3D城市模型COLLADA数据格式详解
1. 概述
本文档基于3D城市模型COLLADA数据规范(v1.8),结合旧金山(San Francisco)实际数据集,详细说明该数据格式的组织结构、文件命名规范、数据内容及使用方法。
1.1 数据源
- 数据标准 : 
COLLADA1.4.1 - 城市: 美国加利福尼亚州旧金山
 
1.2 数据特点
- 基于瓦片(Tile)的城市3D模型数据
 - 包含建筑物、地形、道路、水体等城市要素
 - 支持多细节层次(
LOD):LOW、STANDARD、HIGH - 使用
PNG纹理贴图 - 采用横轴墨卡托(Transverse Mercator)投影坐标系统
 
2. 目录结构
SAN_FRANCISCO/
├── CM_USA_CA_SAN_FRANCISCO_XXX_YYY_B2.DAE     # 边界元数据文件
├── CM_USA_CA_SAN_FRANCISCO_XXX_YYY_M.DAE      # 主模型数据文件
├── 3D_LANDMARKS/                              # 地标建筑目录
│   ├── [建筑名称]/
│   │   ├── LOW/                              # 低细节模型
│   │   │   ├── [建筑名称]_L.DAE
│   │   │   └── [建筑名称]_L.PNG
│   │   └── STANDARD/                         # 标准细节模型
│   │       ├── [建筑名称]_S.DAE
│   │       └── [建筑名称]_S.PNG
├── ASSETS/                                    # 辅助资产文件
│   ├── CM_USA_CA_SAN_FRANCISCO.csgis          # 压缩的GIS元数据(zlib格式)
│   ├── CM_USA_CA_SAN_FRANCISCO.dbf            # Shapefile数据库文件(dBASE格式)
│   ├── CM_USA_CA_SAN_FRANCISCO.plorg          # 压缩的数据组织信息(zlib格式)
│   ├── CM_USA_CA_SAN_FRANCISCO.prj            # 投影坐标系统定义(WKT格式)
│   ├── CM_USA_CA_SAN_FRANCISCO.shp            # Shapefile几何数据(ESRI格式)
│   └── CM_USA_CA_SAN_FRANCISCO.shx            # Shapefile索引文件
└── TEXTURES/                                  # 纹理资源目录
    └── HERE/
        ├── HIGH/                             # 高质量纹理
        ├── LOW/                              # 低质量纹理
        └── STANDARD/                         # 标准质量纹理
            └── DAY/
                ├── ARROWS/                   # 道路箭头标识
                ├── BUILDINGS/                # 建筑纹理
                │   ├── B2/                   # 二维建筑纹理(238张)
                │   ├── B3/                   # 三维建筑纹理(100张)
                │   └── COMMON/               # 通用纹理(屋顶等)
                └── OTHER/                    # 其他纹理(地形、道路等)
        3. 文件命名规范
3.1 瓦片文件命名
格式 : CM_[国家]_[州]_[城市]_XXX_YYY_[类型].DAE
示例 : CM_USA_CA_SAN_FRANCISCO_000_000_M.DAE
字段说明:
CM: City Model(城市模型)USA: 国家代码(美国)CA: 州代码(加利福尼亚)SAN_FRANCISCO: 城市名称XXX: 瓦片X索引(3位数字,从000开始)YYY: 瓦片Y索引(3位数字,从000开始)类型:B2: 二维边界数据文件M: Main(主模型数据文件)S: Spline(样条曲线文件,如道路中心线)
3.2 瓦片网格系统
数据采用规则网格瓦片组织:
- 瓦片尺寸: 400m × 400m
 - 索引方式: XXX(列)× YYY(行)
 - 覆盖范围: 旧金山数据集包含约8×16的瓦片网格
 
示例瓦片索引:
000_000 | 001_000 | 002_000 | ...
000_001 | 001_001 | 002_001 | ...
000_002 | 001_002 | 002_002 | ...
...
        3.3 地标建筑命名
格式 : [国家]_[州]_[城市]_[建筑名称]
示例:
USA_CA_SANFRANCISCO_TRANSAMERICAPYRAMID(泛美金字塔大厦)USA_CA_SANFRANCISCO_COITTOWER(科伊特塔)USA_CA_SANFRANCISCO_FERRYBUILDING(渡轮大厦)
细节层次后缀:
_L.DAE: Low(低细节)_S.DAE: Standard(标准细节)
4. 文件类型详解
4.1 B2文件(Building文件)
用途: 存储建筑物的边界信息和元数据
内容:
- 瓦片基本信息(瓦片ID、尺寸)
 - 最小边界矩形(MBR)
 - 投影坐标系统定义
 - 地理坐标系统参数
 
示例 : CM_USA_CA_SAN_FRANCISCO_000_000_B2.DAE
            
            
              xml
              
              
            
          
          <visual_content_metadata 
    tile_id="000_000" 
    tile_width="400" 
    tile_height="400" 
    spline_curve_file="CM_USA_CA_SAN_FRANCISCO_000_000_S.DAE" 
    dtm_integrated="false"/>
<minimum_bounding_rectangle 
    XMax="-3635.11768" 
    XMin="-4035.11768" 
    YMax="-2799.99976" 
    YMin="-3199.99976"/>
        4.2 M文件(主模型文件)
用途: 包含瓦片内的所有3D几何模型和场景数据
内容:
- 地形(TERRAIN)
 - 道路(ROAD, feature_type: 9999999)
 - 水体(WATER, feature_type: 507116)
 - 人行横道(PEDESTRIAN_CROSSWALK)
 - 转向箭头标识(TURN_ARROW_DECAL)
 - 植被覆盖(Grass, Park, feature_type: 900150)
 - 其他地物
 
特点:
- 包含完整的COLLADA库(images、effects、materials、geometries、visual_scenes)
 - 文件大小从几KB(空旷区域)到数MB(密集城区)
 - 包含纹理引用和材质定义
 
4.3 ASSETS文件(辅助资产文件)
ASSETS 目录包含城市模型的辅助元数据和空间索引文件:
4.3.1 投影坐标系统文件
| 文件 | 格式 | 说明 | 
|---|---|---|
.prj | 
WKT文本 | 投影坐标系统定义(Well-Known Text格式) | 
示例内容(CM_USA_CA_SAN_FRANCISCO.prj):
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
        此文件定义了数据集使用的地理坐标系统(WGS 84)。
4.3.2 Shapefile 文件组
| 文件 | 格式 | 说明 | 
|---|---|---|
.shp | 
ESRI Shapefile | 存储几何图形(点、线、面) | 
.shx | 
Shapefile索引 | 加速空间查询的索引文件 | 
.dbf | 
dBASE III+ | 属性数据表 | 
用途: 存储城市模型的边界多边形(Polygon)和相关属性。
注意: 旧金山数据集中的 Shapefile 仅包含 1 条记录,表示整个城市模型的外边界范围。
5. COLLADA文件结构
5.1 基本结构
            
            
              xml
              
              
            
          
          <?xml version="1.0" encoding="UTF-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
    <asset>...</asset>                      <!-- 元数据 -->
    <library_images>...</library_images>    <!-- 图像库 -->
    <library_effects>...</library_effects>  <!-- 效果库 -->
    <library_materials>...</library_materials>  <!-- 材质库 -->
    <library_geometries>...</library_geometries>  <!-- 几何库 -->
    <library_visual_scenes>...</library_visual_scenes>  <!-- 场景库 -->
    <scene>...</scene>                      <!-- 场景实例 -->
    <extra>...</extra>                      <!-- 扩展信息 -->
</COLLADA>
        5.2 Asset节点(元数据)
            
            
              xml
              
              
            
          
          <asset>
    <contributor>
        <author>HERE</author>
        <copyright>Copyright 2022 HERE</copyright>
    </contributor>
    <created>2022-04-08T23:49:00.0Z</created>
    <modified>2022-04-08T23:49:00.0Z</modified>
    <revision>1.4.1</revision>
    <unit/>
    <up_axis>Z_UP</up_axis>  <!-- Z轴向上 -->
</asset>
        关键字段:
author: 数据提供商(HERE)created/modified: 创建和修改时间(UTC格式)up_axis: 坐标系统上方向(Z_UP表示Z轴向上)unit: 长度单位(米)
5.3 Library_images(图像库)
定义所有纹理图像资源:
            
            
              xml
              
              
            
          
          <library_images>
    <image id="file-terrain_grass_color" name="file-terrain_grass_color">
        <init_from>./TEXTURES/HERE/HIGH/DAY/OTHER/USA_L_GRASS-COLOUR_5.PNG</init_from>
    </image>
    <image id="file-roads_street_solid" name="file-roads_street_solid">
        <init_from>./TEXTURES/HERE/HIGH/DAY/OTHER/USA_R_STREET-SOLID.PNG</init_from>
    </image>
    <!-- 更多图像... -->
</library_images>
        纹理路径格式 : ./TEXTURES/HERE/[质量]/DAY/[类别]/[文件名].PNG
5.4 Library_effects(效果库)
定义材质的视觉效果(着色模型、纹理采样等):
            
            
              xml
              
              
            
          
          <effect id="terrain_grass_color-fx">
    <profile_COMMON>
        <newparam sid="file-terrain_grass_color-surface">
            <surface type="2D">
                <init_from>file-terrain_grass_color</init_from>
                <format>A8R8G8B8</format>  <!-- 32位ARGB格式 -->
            </surface>
        </newparam>
        <newparam sid="file-terrain_grass_color-sampler">
            <sampler2D>
                <source>file-terrain_grass_color-surface</source>
                <wrap_s>WRAP</wrap_s>       <!-- 水平环绕 -->
                <wrap_t>WRAP</wrap_t>       <!-- 垂直环绕 -->
                <minfilter>LINEAR_MIPMAP_LINEAR</minfilter>
                <magfilter>LINEAR</magfilter>
            </sampler2D>
        </newparam>
        <technique sid="common">
            <lambert>  <!-- Lambert着色模型 -->
                <emission><color>0 0 0 1</color></emission>
                <ambient><color>1 1 1 1</color></ambient>
                <diffuse>
                    <texture texture="file-terrain_grass_color-sampler" texcoord="TEX0"/>
                </diffuse>
            </lambert>
        </technique>
    </profile_COMMON>
</effect>
        着色模型: 使用Lambert漫反射模型
5.5 Library_materials(材质库)
关联效果到材质:
            
            
              xml
              
              
            
          
          <library_materials>
    <material id="terrain_grass_color" name="terrain_grass_color">
        <instance_effect url="#terrain_grass_color-fx"/>
    </material>
</library_materials>
        5.6 Library_geometries(几何库)
定义3D几何数据(顶点、法线、纹理坐标、面):
            
            
              xml
              
              
            
          
          <geometry id="MESH_TERRAIN" name="MESH_TERRAIN">
    <mesh>
        <!-- 顶点位置数组 -->
        <source id="MESH_TERRAIN-positions">
            <float_array id="MESH_TERRAIN-positions-array" count="12">
                -4035.11768 -3199.99976 0 
                -3635.11768 -3199.99976 0 
                -3635.11768 -2799.99976 0 
                -4035.11768 -2799.99976 0
            </float_array>
            <technique_common>
                <accessor count="4" stride="3">
                    <param name="X" type="float"/>
                    <param name="Y" type="float"/>
                    <param name="Z" type="float"/>
                </accessor>
            </technique_common>
        </source>
        
        <!-- 法线数组 -->
        <source id="MESH_TERRAIN-normals">
            <float_array id="MESH_TERRAIN-normals-array" count="12">
                0 0 1 0 0 1 0 0 1 0 0 1
            </float_array>
            <technique_common>
                <accessor count="4" stride="3">
                    <param name="X" type="float"/>
                    <param name="Y" type="float"/>
                    <param name="Z" type="float"/>
                </accessor>
            </technique_common>
        </source>
        
        <!-- 纹理坐标数组 -->
        <source id="MESH_TERRAIN-texcoords">
            <float_array id="MESH_TERRAIN-texcoords-array" count="12">
                -403.51178 -318.999969 
                -363.51178 -318.999969 
                -363.51178 -278.999969 
                -403.51178 -278.999969 
                -403.51178 -278.999969 
                -363.51178 -318.999969
            </float_array>
            <technique_common>
                <accessor count="6" stride="2">
                    <param name="S" type="float"/>
                    <param name="T" type="float"/>
                </accessor>
            </technique_common>
        </source>
        
        <!-- 顶点定义 -->
        <vertices id="MESH_TERRAIN-vertices">
            <input semantic="POSITION" source="#MESH_TERRAIN-positions"/>
        </vertices>
        
        <!-- 三角形面 -->
        <triangles count="2" material="SubMesh0">
            <input offset="0" semantic="VERTEX" source="#MESH_TERRAIN-vertices"/>
            <input offset="0" semantic="NORMAL" source="#MESH_TERRAIN-normals"/>
            <input offset="1" semantic="TEXCOORD" source="#MESH_TERRAIN-texcoords" set="0"/>
            <p>3 3 0 0 1 1 2 2 3 3 1 1</p>
        </triangles>
    </mesh>
</geometry>
        数据组织:
positions: XYZ顶点坐标(单位:米)normals: 法线向量(单位向量)texcoords: 纹理UV坐标(S, T)triangles: 三角形索引(支持多重索引)
5.7 Library_visual_scenes(场景库)
组织场景中的节点和几何实例:
            
            
              xml
              
              
            
          
          <library_visual_scenes>
    <visual_scene id="VisualScene" name="VisualScene">
        <node id="TERRAIN" name="TERRAIN">
            <instance_geometry url="#MESH_TERRAIN">
                <bind_material>
                    <technique_common>
                        <instance_material symbol="SubMesh0" target="#terrain_grass_color">
                            <bind_vertex_input semantic="TEX0" input_semantic="TEXCOORD" input_set="0"/>
                        </instance_material>
                    </technique_common>
                </bind_material>
            </instance_geometry>
            <extra>
                <technique profile="VISUALS">
                    <feature_type type="TERRAIN"/>
                    <coverage_info outside_coverage_area="true"/>
                </technique>
            </extra>
        </node>
    </visual_scene>
</library_visual_scenes>
        节点类型(通过node id和feature_type识别):
TERRAIN: 地形WATER_[ID]: 水体(feature_type: 507116)ROAD_[ID]: 道路(feature_type: 9999999)PEDESTRIAN_CROSSWALK: 人行横道TURN_ARROW_DECAL: 转向箭头标识
5.8 Extra节点(扩展信息)
包含HERE特有的元数据:
            
            
              xml
              
              
            
          
          <extra>
    <technique profile="VISUALS">
        <visual_content_metadata 
            tile_id="000_000" 
            tile_width="400" 
            tile_height="400" 
            spline_curve_file="CM_USA_CA_SAN_FRANCISCO_000_000_S.DAE" 
            dtm_integrated="false"/>
        <minimum_bounding_rectangle 
            XMax="-3635.11768" 
            XMin="-4035.11768" 
            YMax="-2799.99976" 
            YMin="-3199.99976"/>
        <projection_coordinate_system name="PA_Projection_Coordinate_System">
            <geographic_coordinate_system name="GCS_North_American_1983">
                <datum name="D_North_American_1983">
                    <spheroid name="GRS_1980" 
                              semi_major_axis="6378137" 
                              semi_minor_axis="6356752.314245179"/>
                </datum>
                <prime_meridian name="Greenwich" longitude_value="0"/>
                <unit name="Degree" conversion_factor="0.01745329251994328"/>
            </geographic_coordinate_system>
            <projection name="Transverse_Mercator" unit="Metres" unit_conversion_factor="1">
                <parameter name="SCALE_FACTOR" value="1"/>
                <parameter name="X_FALSE" value="0"/>
                <parameter name="Y_FALSE" value="0"/>
                <parameter name="CENTRAL_MERIDIAN" value="-122.4061349773356"/>
                <parameter name="LATITUDE_OF_ORIGIN" value="37.78819876292745"/>
            </projection>
        </projection_coordinate_system>
    </technique>
</extra>
        6. 坐标系统
6.1 投影坐标系统
类型: 横轴墨卡托投影(Transverse Mercator)
参数:
- 中央子午线 (CENTRAL_MERIDIAN): -122.4061349773356°(旧金山中心经度)
 - 原点纬度 (LATITUDE_OF_ORIGIN): 37.78819876292745°(旧金山中心纬度)
 - 比例因子 (SCALE_FACTOR): 1
 - 东伪偏移 (X_FALSE): 0
 - 北伪偏移 (Y_FALSE): 0
 - 单位: 米(Metres)
 
6.2 地理坐标系统
基准 : NAD83(North American Datum 1983)
椭球: GRS 1980
- 长半轴: 6378137 m
 - 短半轴: 6356752.314245179 m
 
6.3 坐标转换
瓦片内的坐标为局部笛卡尔坐标系(米),原点位于投影中心:
- X轴: 向东为正
 - Y轴: 向北为正
 - Z轴: 向上为正
 
坐标范围示例 (瓦片 000_000):
- X: [-4035.11768, -3635.11768] (400m宽)
 - Y: [-3199.99976, -2799.99976] (400m高)
 - Z: 0 及以上(地面和建筑高度)
 
7. 纹理资源
7.1 纹理目录结构
TEXTURES/HERE/
├── HIGH/       # 高质量纹理
├── LOW/        # 低质量纹理
└── STANDARD/   # 标准质量纹理
    └── DAY/
        ├── ARROWS/      # 道路箭头标识纹理
        ├── BUILDINGS/   # 建筑纹理
        │   ├── B2/     # 2.5D建筑纹理(238个)
        │   ├── B3/     # 3D建筑纹理(100个)
        │   └── COMMON/ # 通用建筑纹理(18个,主要是屋顶)
        └── OTHER/       # 其他纹理
        7.2 纹理命名规范
地形纹理 (Terrain, 前缀: USA_L_):
USA_L_GRASS-COLOUR_5.PNG: 草地USA_L_PARK-COLOUR_5.PNG: 公园USA_L_WATER-COLOUR_5.PNG: 水体USA_L_WOODLAND-COLOUR_5.PNG: 林地USA_L_BEACH-COLOUR_5.PNG: 海滩USA_L_CONCRETE-COLOUR_5.PNG: 混凝土USA_L_GOLF-COLOUR_5.PNG: 高尔夫球场USA_L_HOSPITAL-COLOUR_5.PNG: 医院USA_L_CEMETERY-COLOUR_5.PNG: 墓地USA_L_MLU-COLOUR_5.PNG: 混合土地利用
道路纹理 (Road, 前缀: USA_R_):
USA_R_STREET-SOLID.PNG: 道路实线USA_R_STREET-DASHED.PNG: 道路虚线USA_R_STREET-UNMARKED.PNG: 道路无标线USA_R_STREET-STOPLINE.PNG: 停止线USA_R_STREET-CROSSWALK.PNG: 人行横道线USA_R_STREET-LANE-FILLER.PNG: 车道填充USA_R_STREET-INNER-SHOULDER_2.PNG: 内侧路肩USA_R_STREET-RAMP-SOLID.PNG: 匝道实线USA_R_HIGHWAY-*.PNG: 高速公路纹理(同上)USA_R_WALKWAY-*.PNG: 人行道纹理USA_R_CONCRETE.PNG: 混凝土路面USA_T_RAILROAD.PNG: 铁路
箭头纹理 (Arrow, 前缀: ARROW_USA_):
ARROW_USA_STRAIGHT.PNG: 直行ARROW_USA_RIGHT.PNG: 右转ARROW_USA_STRAIGHTRIGHT.PNG: 直行或右转ARROW_USA_RIGHTLEFT.PNG: 左转或右转ARROW_USA_STRAIGHTRIGHTLEFT.PNG: 直行、左转或右转ARROW_USA_UTURN.PNG: 掉头
屋顶纹理 (Roof, 前缀: ROOF_):
ROOF_001_RSG.PNG~ROOF_029_RTB.PNG: 各种屋顶纹理- 命名中间字母含义: R=Roof, S/T/U/Z=类型代码, G/B/R/W=颜色代码
 
7.3 纹理格式
- 格式: PNG (Portable Network Graphics)
 - 色彩模式: ARGB(32位,包含透明通道)
 - 分辨率: 根据质量等级不同(HIGH > STANDARD > LOW)
 
8. 特征类型(Feature Types)
8.1 常见特征类型代码
| 代码 | 名称 | 说明 | 
|---|---|---|
| TERRAIN | 地形 | 自然地表,包括草地、公园等 | 
| 507116 | 水体 | 河流、湖泊、海洋等水域 | 
| 900150 | 公园/草地 | 特定植被覆盖区域 | 
| 9999999 | 道路 | 街道、高速公路等道路面 | 
| PEDESTRIAN_CROSSWALK | 人行横道 | 斑马线 | 
| TURN_ARROW_DECAL | 转向箭头 | 道路转向指示标识 | 
8.2 特征属性
每个几何节点的 <extra> 部分包含特征元数据:
            
            
              xml
              
              
            
          
          <extra>
    <technique profile="VISUALS">
        <face_PVID>715616466</face_PVID>  <!-- 面ID -->
        <feature_type type="507116"/>      <!-- 特征类型 -->
        <coverage_info outside_coverage_area="true"/>  <!-- 覆盖信息 -->
    </technique>
</extra>
        9. 3D地标建筑
9.1 地标结构
地标建筑单独存放在 3D_LANDMARKS/ 目录,每个地标包含:
- 目录: 以建筑名称命名
 - 细节层次 :
LOW/: 低细节模型(用于远距离显示)STANDARD/: 标准细节模型(用于中近距离显示)
 - 文件 :
.DAE: COLLADA模型文件.PNG: 建筑专用纹理(通常包含建筑立面贴图)
 
9.2 旧金山地标建筑列表(部分)
著名建筑:
- 泛美金字塔 (TRANSAMERICAPYRAMID)
 - 旧金山市政厅 (CITYHALL)
 - 渡轮大厦 (FERRYBUILDING)
 - 科伊特塔 (COITTOWER)
 - 美国银行大厦 (BANKOFAMERICA)
 - 销售力量大厦 (SALESFORCTOWR) - 旧金山最高建筑
 - 金门剧院 (GRACECATHEDRAL)
 - 旧金山现代艺术博物馆 (MUSEUM_MART)
 - 39号码头 (PIER39)
 - 甲骨文球场 (ORACLE_PARK)
 
酒店与商业:
- 希尔顿酒店 (HILTON)
 - 凯悦酒店 (HYATT)
 - 万豪酒店 (MARRIOTT)
 - 圣弗朗西斯酒店 (STFRANCIS)
 - 马克霍普金斯酒店 (MARKHOPKINS)
 - 梅西百货 (MACYS)
 
会议中心:
- 莫斯康会议中心 (MOSCONE / MOSCONE_NORTH)
 - 儿童博物馆 (CHLDRNSMUSAUM)
 
9.3 地标模型特点
- 独立坐标系: 地标模型通常使用独立的本地坐标系
 - 高精度: 比普通瓦片建筑具有更高的几何和纹理精度
 - 专用纹理: 每个地标有自己的纹理文件(非共享纹理)
 - 多部分模型: 大型建筑可能分为多个部分(PART1, PART2等)
 
9.4 地标位置信息与POI数据
根据 HERE COLLADA 数据规范(XSD Schema),完整的地标建筑数据集应该包含:
9.4.1 标准数据组成
- 
POI 数据库(Points of Interest)
- 格式: SQLite 或其他结构化数据库
 - 内容 :
POI_PVID→ 地理坐标(经度、纬度、高度)- 建筑朝向(orientation/rotation)
 - 建筑元数据(名称、类型、楼层等)
 
 - 用途: 提供地标建筑的全局定位信息
 
 - 
地标 DAE 文件中的 POI_PVID 引用
- 位置 : 
<extra><technique profile="VISUALS">节点中 - 格式:
 
xml<extra> <technique profile="VISUALS"> <aggr_feature_PVID PVID="12345"> <POI_PVID>67890</POI_PVID> <!-- 关联的POI永久版本ID --> </aggr_feature_PVID> </technique> </extra>- 用途: 将地标模型与 POI 数据库中的位置信息关联
 
 - 位置 : 
 
10. 数据使用指南
10.1 数据加载流程
- 确定视口范围: 计算需要显示的地理区域
 - 计算瓦片索引: 根据坐标范围确定需要加载的瓦片
 - 加载M文件: 解析COLLADA文件,读取地形数据
 - 加载B2文件: 解析COLLADA文件,读取建筑数据
 - 加载纹理: 根据材质引用加载对应的PNG纹理
 - 加载地标: 如果视口包含地标建筑,加载对应的LOD模型
 - 构建场景: 将几何、材质、纹理组装成渲染场景
 
10.2 瓦片索引计算
假设已知投影坐标 (X, Y):
瓦片列索引 XXX = floor((X - X_origin) / tile_width)
瓦片行索引 YYY = floor((Y - Y_origin) / tile_height)
        其中:
X_origin,Y_origin: 瓦片网格原点tile_width= 400mtile_height= 400m
10.3 LOD选择策略
根据相机距离选择合适的细节层次:
| 距离范围 | 纹理质量 | 地标LOD | 备注 | 
|---|---|---|---|
| > 5000m | LOW | 不加载 | 远景 | 
| 1000-5000m | LOW | LOW | 中远景 | 
| 500-1000m | STANDARD | LOW | 中景 | 
| 100-500m | STANDARD | STANDARD | 近景 | 
| < 100m | HIGH | STANDARD | 特写 | 
10.4 内存优化建议
- 按需加载: 只加载可见瓦片
 - 卸载机制: 及时卸载视口外的瓦片
 - 纹理共享: 多个瓦片共享TEXTURES目录中的纹理
 - 压缩纹理: 运行时可将PNG转换为GPU压缩格式(DXT、ETC等)
 - 几何简化: 根据距离动态简化网格
 
10.5 坐标转换
投影坐标 → 经纬度 :
使用逆横轴墨卡托变换(需要投影参数)
经纬度 → 投影坐标 :
使用正横轴墨卡托变换
局部坐标 → 世界坐标 :
直接使用瓦片内的坐标(已是米制)
11. 数据质量说明
11.1 几何精度
- 位置精度: 约1米
 - 高度精度: 约0.1米
 - 瓦片对齐: 相邻瓦片边界可能存在微小间隙或重叠
 
11.2 覆盖范围
- 地形: 100%覆盖
 - 道路: 主要道路完整覆盖
 - 建筑: 城市中心区密集,郊区稀疏
 - 地标: 精选著名建筑
 
12. 常见问题
12.1 为什么有些瓦片的M文件很小?
这些瓦片可能位于水域、公园等开阔区域,只包含简单的地形平面。
12.2 如何确定一个瓦片是否包含建筑?
解析M文件,查找 feature_type 不为 TERRAIN 的节点。
12.3 纹理路径中的 "./TEXTURES" 如何解析?
相对于DAE文件所在目录,指向同级的 TEXTURES 目录。
12.4 dtm_integrated="false" 是什么意思?
表示数字地形模型(DTM)未集成到此文件中,地形高度为独立数据。
12.5 为什么坐标是负数?
这是投影坐标系的特点,原点在投影中心(旧金山市中心),负值表示在原点西侧和南侧。
12.6 如何处理跨瓦片的建筑?
大型建筑可能跨越多个瓦片,需要同时加载相邻瓦片并合并显示。
12.7 S文件(Spline)在哪里?
样条曲线文件可能单独提供或不包含在此数据集中,主要用于道路中心线等矢量数据。
13. 技术支持与参考
13.1 相关标准
- COLLADA 1.4.1 规范: https://www.khronos.org/collada/
 - NAD83 坐标系: https://epsg.io/4269
 - 横轴墨卡托投影: https://epsg.io/9807
 
13.2 工具推荐
- COLLADA查看器: Blender, Autodesk Maya, FBX Converter
 - GIS软件: QGIS, ArcGIS(用于坐标转换)
 - 3D渲染引擎: Unity, Unreal Engine, Three.js, Cesium
 - C++ 格式读取库 : assimp
 
13.3 HERE地图平台
- 官网: https://www.here.com/
 - 开发者文档: https://developer.here.com/
 
14. 基于 Assimp 实现的 Viewer
