谷歌地图JavaScript API与移动端API及react-native-maps的KML文件差异咨询
Google Maps不同端KML支持差异说明
- 3D属性支持差异:Google Maps JavaScript API对KML的
extrude、altitudeMode等3D相关属性支持完整,可直接渲染带高度的3D多边形。但安卓、iOS端原生Google Maps SDK对这类属性的支持度极低,多数版本会直接忽略该类配置,甚至会因为识别到不支持的属性导致整个KML解析失败。 - 格式容错性差异:JavaScript API对KML内的空白字符容错性极高,坐标节点内的换行、缩进、多余空格都能正常识别。但原生SDK对
coordinates节点的格式要求严格,多余的空白字符很容易导致坐标解析失败,无法渲染几何图形。 - 节点完整性要求差异:JavaScript API允许KML缺省部分非必要节点属性,比如Document节点的id属性。但多数版本的原生SDK要求根Document节点必须配置id属性,否则会出现解析异常。
- 样式支持差异:JavaScript API完整支持KML的所有样式规则,包括自定义LineStyle、PolyStyle、IconStyle的所有属性。原生SDK仅支持基础样式配置,部分特殊样式值、相对路径样式引用会被忽略,且要求样式定义必须出现在引用它的Placemark节点之前。
KML无法生效的修复方案
将你的KML按以下规则修改即可在react-native-maps中正常渲染:
- 删除Polygon节点下的
<extrude>1</extrude>和<altitudeMode>relativeToGround</altitudeMode>两个3D相关节点 - 清理
coordinates节点内的所有换行、缩进、前后多余空格,仅保留坐标之间的单个空格分隔 - 给Document节点添加id属性,如
<Document id="root_doc">
内容的提问来源于stack exchange,提问作者Jai Saravanan
相关产品推荐
相关产品推荐

