本文档基于3D城市模型COLLADA数据规范(v1.8),结合旧金山(San Francisco)实际数据集,详细说明该数据格式的组织结构、文件命名规范、数据内容及使用方法。
COLLADA 1.4.1LOD):LOW、STANDARD、HIGHPNG纹理贴图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/ # 其他纹理(地形、道路等)
格式: 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(样条曲线文件,如道路中心线)数据采用规则网格瓦片组织:
示例瓦片索引:
000_000 | 001_000 | 002_000 | ...
000_001 | 001_001 | 002_001 | ...
000_002 | 001_002 | 002_002 | ...
...
格式: [国家]_[州]_[城市]_[建筑名称]
示例:
USA_CA_SANFRANCISCO_TRANSAMERICAPYRAMID (泛美金字塔大厦)USA_CA_SANFRANCISCO_COITTOWER (科伊特塔)USA_CA_SANFRANCISCO_FERRYBUILDING (渡轮大厦)细节层次后缀:
_L.DAE: Low(低细节)_S.DAE: Standard(标准细节)用途: 存储建筑物的边界信息和元数据
内容:
示例: CM_USA_CA_SAN_FRANCISCO_000_000_B2.DAE
<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"/>
用途: 包含瓦片内的所有3D几何模型和场景数据
内容:
特点:
ASSETS 目录包含城市模型的辅助元数据和空间索引文件:
| 文件 | 格式 | 说明 |
|---|---|---|
.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)。
| 文件 | 格式 | 说明 |
|---|---|---|
.shp | ESRI Shapefile | 存储几何图形(点、线、面) |
.shx | Shapefile索引 | 加速空间查询的索引文件 |
.dbf | dBASE III+ | 属性数据表 |
用途: 存储城市模型的边界多边形(Polygon)和相关属性。
注意: 旧金山数据集中的 Shapefile 仅包含 1 条记录,表示整个城市模型的外边界范围。
<?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>
<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: 长度单位(米)定义所有纹理图像资源:
<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
定义材质的视觉效果(着色模型、纹理采样等):
<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漫反射模型
关联效果到材质:
<library_materials>
<material id="terrain_grass_color" name="terrain_grass_color">
<instance_effect url="#terrain_grass_color-fx"/>
</material>
</library_materials>
定义3D几何数据(顶点、法线、纹理坐标、面):
<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: 三角形索引(支持多重索引)组织场景中的节点和几何实例:
<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: 转向箭头标识包含HERE特有的元数据:
<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>
类型: 横轴墨卡托投影(Transverse Mercator)
参数:
基准: NAD83(North American Datum 1983)
椭球: GRS 1980
瓦片内的坐标为局部笛卡尔坐标系(米),原点位于投影中心:
坐标范围示例 (瓦片 000_000):
TEXTURES/HERE/
├── HIGH/ # 高质量纹理
├── LOW/ # 低质量纹理
└── STANDARD/ # 标准质量纹理
└── DAY/
├── ARROWS/ # 道路箭头标识纹理
├── BUILDINGS/ # 建筑纹理
│ ├── B2/ # 2.5D建筑纹理(238个)
│ ├── B3/ # 3D建筑纹理(100个)
│ └── COMMON/ # 通用建筑纹理(18个,主要是屋顶)
└── OTHER/ # 其他纹理
地形纹理 (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: 各种屋顶纹理
| 代码 | 名称 | 说明 |
|---|---|---|
| TERRAIN | 地形 | 自然地表,包括草地、公园等 |
| 507116 | 水体 | 河流、湖泊、海洋等水域 |
| 900150 | 公园/草地 | 特定植被覆盖区域 |
| 9999999 | 道路 | 街道、高速公路等道路面 |
| PEDESTRIAN_CROSSWALK | 人行横道 | 斑马线 |
| TURN_ARROW_DECAL | 转向箭头 | 道路转向指示标识 |
每个几何节点的 <extra> 部分包含特征元数据:
<extra>
<technique profile="VISUALS">
<face_PVID>715616466</face_PVID> <!-- 面ID -->
<feature_type type="507116"/> <!-- 特征类型 -->
<coverage_info outside_coverage_area="true"/> <!-- 覆盖信息 -->
</technique>
</extra>
地标建筑单独存放在 3D_LANDMARKS/ 目录,每个地标包含:
LOW/: 低细节模型(用于远距离显示)STANDARD/: 标准细节模型(用于中近距离显示).DAE: COLLADA模型文件.PNG: 建筑专用纹理(通常包含建筑立面贴图)著名建筑:
酒店与商业:
会议中心:
根据 HERE COLLADA 数据规范(XSD Schema),完整的地标建筑数据集应该包含:
POI 数据库(Points of Interest)
POI_PVID → 地理坐标(经度、纬度、高度)地标 DAE 文件中的 POI_PVID 引用
<extra><technique profile="VISUALS"> 节点中<extra>
<technique profile="VISUALS">
<aggr_feature_PVID PVID="12345">
<POI_PVID>67890</POI_PVID> <!-- 关联的POI永久版本ID -->
</aggr_feature_PVID>
</technique>
</extra>
假设已知投影坐标 (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根据相机距离选择合适的细节层次:
| 距离范围 | 纹理质量 | 地标LOD | 备注 |
|---|---|---|---|
| > 5000m | LOW | 不加载 | 远景 |
| 1000-5000m | LOW | LOW | 中远景 |
| 500-1000m | STANDARD | LOW | 中景 |
| 100-500m | STANDARD | STANDARD | 近景 |
| < 100m | HIGH | STANDARD | 特写 |
投影坐标 → 经纬度:
使用逆横轴墨卡托变换(需要投影参数)
经纬度 → 投影坐标:
使用正横轴墨卡托变换
局部坐标 → 世界坐标:
直接使用瓦片内的坐标(已是米制)
这些瓦片可能位于水域、公园等开阔区域,只包含简单的地形平面。
解析M文件,查找 feature_type 不为 TERRAIN 的节点。
相对于DAE文件所在目录,指向同级的 TEXTURES 目录。
表示数字地形模型(DTM)未集成到此文件中,地形高度为独立数据。
这是投影坐标系的特点,原点在投影中心(旧金山市中心),负值表示在原点西侧和南侧。
大型建筑可能跨越多个瓦片,需要同时加载相邻瓦片并合并显示。
样条曲线文件可能单独提供或不包含在此数据集中,主要用于道路中心线等矢量数据。
