增加osgb合并功能
This commit is contained in:
parent
df74970ca9
commit
a3951c47d0
@ -185,6 +185,13 @@ class ImagePreprocessor:
|
|||||||
self.visualizer.visualize_filter_step(
|
self.visualizer.visualize_filter_step(
|
||||||
self.gps_points, previous_points, "3-Time Group Overlap")
|
self.gps_points, previous_points, "3-Time Group Overlap")
|
||||||
|
|
||||||
|
def calculate_center_coordinates(self):
|
||||||
|
"""计算剩余点的中心经纬度坐标"""
|
||||||
|
mean_lat = self.gps_points['lat'].mean()
|
||||||
|
mean_lon = self.gps_points['lon'].mean()
|
||||||
|
self.logger.info(f"区域中心坐标:纬度 {mean_lat:.6f}, 经度 {mean_lon:.6f}")
|
||||||
|
return mean_lat, mean_lon
|
||||||
|
|
||||||
def filter_alternate_images(self):
|
def filter_alternate_images(self):
|
||||||
"""按时间顺序隔一个删一个图像来降低密度"""
|
"""按时间顺序隔一个删一个图像来降低密度"""
|
||||||
previous_points = self.gps_points.copy()
|
previous_points = self.gps_points.copy()
|
||||||
@ -258,13 +265,13 @@ class ImagePreprocessor:
|
|||||||
merger = MergeObj(self.config.output_dir)
|
merger = MergeObj(self.config.output_dir)
|
||||||
merger.merge_grid_obj(grid_points, translations)
|
merger.merge_grid_obj(grid_points, translations)
|
||||||
|
|
||||||
def convert_obj(self, grid_points: Dict[tuple, pd.DataFrame]):
|
def convert_obj(self, grid_points: Dict[tuple, pd.DataFrame], center_lat: float, center_lon: float):
|
||||||
"""转换OBJ模型"""
|
"""转换OBJ模型"""
|
||||||
self.logger.info("开始转换OBJ模型")
|
self.logger.info("开始转换OBJ模型")
|
||||||
converter = ConvertOBJ(self.config.output_dir)
|
converter = ConvertOBJ(self.config.output_dir, center_lat, center_lon)
|
||||||
converter.convert_grid_obj(grid_points)
|
converter.convert_grid_obj(grid_points)
|
||||||
|
|
||||||
def post_process(self, successful_grid_points: Dict[tuple, pd.DataFrame], grid_points: Dict[tuple, pd.DataFrame], translations: Dict[tuple, tuple]):
|
def post_process(self, successful_grid_points: Dict[tuple, pd.DataFrame], grid_points: Dict[tuple, pd.DataFrame], translations: Dict[tuple, tuple], center_lat: float, center_lon: float):
|
||||||
"""后处理:合并或复制处理结果"""
|
"""后处理:合并或复制处理结果"""
|
||||||
if len(successful_grid_points) < len(grid_points):
|
if len(successful_grid_points) < len(grid_points):
|
||||||
self.logger.warning(
|
self.logger.warning(
|
||||||
@ -277,12 +284,12 @@ class ImagePreprocessor:
|
|||||||
elif self.config.mode == "三维模式":
|
elif self.config.mode == "三维模式":
|
||||||
# self.merge_ply(successful_grid_points)
|
# self.merge_ply(successful_grid_points)
|
||||||
# self.merge_obj(successful_grid_points, translations)
|
# self.merge_obj(successful_grid_points, translations)
|
||||||
self.convert_obj(successful_grid_points)
|
self.convert_obj(successful_grid_points, center_lat, center_lon)
|
||||||
else:
|
else:
|
||||||
self.merge_tif(successful_grid_points, self.config.produce_dem)
|
self.merge_tif(successful_grid_points, self.config.produce_dem)
|
||||||
# self.merge_ply(successful_grid_points)
|
# self.merge_ply(successful_grid_points)
|
||||||
# self.merge_obj(successful_grid_points, translations)
|
# self.merge_obj(successful_grid_points, translations)
|
||||||
self.convert_obj(successful_grid_points)
|
self.convert_obj(successful_grid_points, center_lat, center_lon)
|
||||||
|
|
||||||
def process(self):
|
def process(self):
|
||||||
"""执行完整的预处理流程"""
|
"""执行完整的预处理流程"""
|
||||||
@ -291,6 +298,7 @@ class ImagePreprocessor:
|
|||||||
self.cluster()
|
self.cluster()
|
||||||
self.filter_isolated_points()
|
self.filter_isolated_points()
|
||||||
self.filter_time_group_overlap()
|
self.filter_time_group_overlap()
|
||||||
|
center_lat, center_lon = self.calculate_center_coordinates()
|
||||||
# self.filter_alternate_images()
|
# self.filter_alternate_images()
|
||||||
grid_points, translations = self.divide_grids()
|
grid_points, translations = self.divide_grids()
|
||||||
self.copy_images(grid_points)
|
self.copy_images(grid_points)
|
||||||
@ -300,7 +308,7 @@ class ImagePreprocessor:
|
|||||||
grid_points, self.config.produce_dem)
|
grid_points, self.config.produce_dem)
|
||||||
|
|
||||||
self.post_process(successful_grid_points,
|
self.post_process(successful_grid_points,
|
||||||
grid_points, translations)
|
grid_points, translations, center_lat, center_lon)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"处理过程中发生错误: {str(e)}", exc_info=True)
|
self.logger.error(f"处理过程中发生错误: {str(e)}", exc_info=True)
|
||||||
|
@ -5,8 +5,10 @@ import shutil
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
class ConvertOBJ:
|
class ConvertOBJ:
|
||||||
def __init__(self, output_dir: str):
|
def __init__(self, output_dir: str, center_lat: float, center_lon: float):
|
||||||
self.output_dir = output_dir
|
self.output_dir = output_dir
|
||||||
|
self.center_lat = center_lat
|
||||||
|
self.center_lon = center_lon
|
||||||
self.logger = logging.getLogger('UAV_Preprocess.ConvertOBJ')
|
self.logger = logging.getLogger('UAV_Preprocess.ConvertOBJ')
|
||||||
|
|
||||||
def convert_grid_obj(self, grid_points):
|
def convert_grid_obj(self, grid_points):
|
||||||
@ -18,6 +20,9 @@ class ConvertOBJ:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"网格 {grid_id} 转换失败: {str(e)}")
|
self.logger.error(f"网格 {grid_id} 转换失败: {str(e)}")
|
||||||
|
|
||||||
|
# 在所有网格处理完成后创建总的metadata.xml
|
||||||
|
self._create_merged_metadata()
|
||||||
|
|
||||||
def _convert_single_grid(self, grid_id):
|
def _convert_single_grid(self, grid_id):
|
||||||
"""转换单个网格的OBJ文件"""
|
"""转换单个网格的OBJ文件"""
|
||||||
# 1. 构建相关路径
|
# 1. 构建相关路径
|
||||||
@ -51,28 +56,30 @@ class ConvertOBJ:
|
|||||||
ref_lla = json.load(f)
|
ref_lla = json.load(f)
|
||||||
|
|
||||||
# 4. 创建OSGB目录结构
|
# 4. 创建OSGB目录结构
|
||||||
osgb_dir = os.path.join(self.output_dir, "osgb", grid_name)
|
osgb_base_dir = os.path.join(self.output_dir, "osgb")
|
||||||
data_dir = os.path.join(osgb_dir, "Data")
|
data_dir = os.path.join(osgb_base_dir, "Data")
|
||||||
tile_dir = os.path.join(data_dir, "Tile")
|
tile_dir = os.path.join(data_dir, f"Tile_{grid_id[0]}_{grid_id[1]}")
|
||||||
os.makedirs(tile_dir, exist_ok=True)
|
os.makedirs(tile_dir, exist_ok=True)
|
||||||
|
|
||||||
# 5. 创建metadata.xml
|
# 5. 复制OSGB文件
|
||||||
|
target_osgb = os.path.join(tile_dir, f"Tile_{grid_id[0]}_{grid_id[1]}.osgb")
|
||||||
|
shutil.copy2(output_osgb, target_osgb)
|
||||||
|
|
||||||
|
self.logger.info(f"网格 {grid_id} 转换完成")
|
||||||
|
|
||||||
|
def _create_merged_metadata(self):
|
||||||
|
"""创建合并后的metadata.xml文件"""
|
||||||
metadata_content = f"""<?xml version="1.0" encoding="utf-8"?>
|
metadata_content = f"""<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ModelMetadata version="1">
|
<ModelMetadata version="1">
|
||||||
<!--Spatial Reference System-->
|
<!--Spatial Reference System-->
|
||||||
<SRS>EPSG:4326</SRS>
|
<SRS>EPSG:4326</SRS>
|
||||||
<!--Origin in Spatial Reference System-->
|
<!--Origin in Spatial Reference System-->
|
||||||
<SRSOrigin>{ref_lla['longitude']},{ref_lla['latitude']},0.000000</SRSOrigin>
|
<SRSOrigin>{self.center_lon},{self.center_lat},0.000000</SRSOrigin>
|
||||||
<Texture>
|
<Texture>
|
||||||
<ColorSource>Visible</ColorSource>
|
<ColorSource>Visible</ColorSource>
|
||||||
</Texture>
|
</Texture>
|
||||||
</ModelMetadata>"""
|
</ModelMetadata>"""
|
||||||
|
|
||||||
metadata_file = os.path.join(osgb_dir, "metadata.xml")
|
metadata_file = os.path.join(self.output_dir, "osgb", "metadata.xml")
|
||||||
with open(metadata_file, 'w', encoding='utf-8') as f:
|
with open(metadata_file, 'w', encoding='utf-8') as f:
|
||||||
f.write(metadata_content)
|
f.write(metadata_content)
|
||||||
|
|
||||||
# 6. 复制OSGB文件
|
|
||||||
shutil.copy2(output_osgb, os.path.join(tile_dir, "Tile.osgb"))
|
|
||||||
|
|
||||||
self.logger.info(f"网格 {grid_id} 转换完成")
|
|
||||||
|
Loading…
Reference in New Issue
Block a user