增加osgb合并功能
This commit is contained in:
parent
df74970ca9
commit
a3951c47d0
@ -185,6 +185,13 @@ class ImagePreprocessor:
|
||||
self.visualizer.visualize_filter_step(
|
||||
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):
|
||||
"""按时间顺序隔一个删一个图像来降低密度"""
|
||||
previous_points = self.gps_points.copy()
|
||||
@ -258,13 +265,13 @@ class ImagePreprocessor:
|
||||
merger = MergeObj(self.config.output_dir)
|
||||
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模型"""
|
||||
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)
|
||||
|
||||
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):
|
||||
self.logger.warning(
|
||||
@ -277,12 +284,12 @@ class ImagePreprocessor:
|
||||
elif self.config.mode == "三维模式":
|
||||
# self.merge_ply(successful_grid_points)
|
||||
# self.merge_obj(successful_grid_points, translations)
|
||||
self.convert_obj(successful_grid_points)
|
||||
self.convert_obj(successful_grid_points, center_lat, center_lon)
|
||||
else:
|
||||
self.merge_tif(successful_grid_points, self.config.produce_dem)
|
||||
# self.merge_ply(successful_grid_points)
|
||||
# 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):
|
||||
"""执行完整的预处理流程"""
|
||||
@ -291,6 +298,7 @@ class ImagePreprocessor:
|
||||
self.cluster()
|
||||
self.filter_isolated_points()
|
||||
self.filter_time_group_overlap()
|
||||
center_lat, center_lon = self.calculate_center_coordinates()
|
||||
# self.filter_alternate_images()
|
||||
grid_points, translations = self.divide_grids()
|
||||
self.copy_images(grid_points)
|
||||
@ -300,7 +308,7 @@ class ImagePreprocessor:
|
||||
grid_points, self.config.produce_dem)
|
||||
|
||||
self.post_process(successful_grid_points,
|
||||
grid_points, translations)
|
||||
grid_points, translations, center_lat, center_lon)
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(f"处理过程中发生错误: {str(e)}", exc_info=True)
|
||||
|
@ -5,8 +5,10 @@ import shutil
|
||||
import logging
|
||||
|
||||
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.center_lat = center_lat
|
||||
self.center_lon = center_lon
|
||||
self.logger = logging.getLogger('UAV_Preprocess.ConvertOBJ')
|
||||
|
||||
def convert_grid_obj(self, grid_points):
|
||||
@ -18,6 +20,9 @@ class ConvertOBJ:
|
||||
except Exception as e:
|
||||
self.logger.error(f"网格 {grid_id} 转换失败: {str(e)}")
|
||||
|
||||
# 在所有网格处理完成后创建总的metadata.xml
|
||||
self._create_merged_metadata()
|
||||
|
||||
def _convert_single_grid(self, grid_id):
|
||||
"""转换单个网格的OBJ文件"""
|
||||
# 1. 构建相关路径
|
||||
@ -51,28 +56,30 @@ class ConvertOBJ:
|
||||
ref_lla = json.load(f)
|
||||
|
||||
# 4. 创建OSGB目录结构
|
||||
osgb_dir = os.path.join(self.output_dir, "osgb", grid_name)
|
||||
data_dir = os.path.join(osgb_dir, "Data")
|
||||
tile_dir = os.path.join(data_dir, "Tile")
|
||||
osgb_base_dir = os.path.join(self.output_dir, "osgb")
|
||||
data_dir = os.path.join(osgb_base_dir, "Data")
|
||||
tile_dir = os.path.join(data_dir, f"Tile_{grid_id[0]}_{grid_id[1]}")
|
||||
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"?>
|
||||
<ModelMetadata version="1">
|
||||
<!--Spatial Reference System-->
|
||||
<SRS>EPSG:4326</SRS>
|
||||
<!--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>
|
||||
<ColorSource>Visible</ColorSource>
|
||||
</Texture>
|
||||
</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:
|
||||
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