KML文件PolyStyle颜色在Google MyMaps中不显示问题咨询
问题:Google MyMaps导入KML后所有多边形显示为黑色?
我尝试用R导出的KML文件在Google MyMaps生成自定义分级统计图(chloropleth map),每个多边形对应独立变量填充不同颜色。实际文件包含98个多边形,每个都有独立的<Style id>,但导入MyMaps后所有多边形都显示为黑色,已清除缓存无效。
简化的KML结构如下:
<kml xmlns:xsd="https://schemas.opengis.net/kml/2.2.0/ogckml22.xsd" xmlns:xmlns="https://www.opengis.net/kml/2.2/" version="1.0"> <Document> <name>map_test2_1</name> <open>1</open> <Folder> <name>sfdata.frame</name> <Style id="poly1"> <PolyStyle> <color>#ff445eb5</color> <outline>1</outline> <fill>1</fill> </PolyStyle> <BalloonStyle> <text>$[description]</text> </BalloonStyle> </Style> <Placemark> <name>School Lane/Tankerton Road Area</name> <styleUrl>#poly1</styleUrl> <Polygon> <extrude>1</extrude> <tessellate>0</tessellate> <altitudeMode>clampToGround</altitudeMode> <outerBoundaryIs> <LinearRing> <coordinates>-0.3060805,51.402915,0 -0.2748381,51.3823493,0 -0.2552687,51.4096612,0 -0.3060805,51.402915,0</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Folder> </Document> </kml>
解决方案
出现这个问题主要有两个原因,对应解决方法如下:
1. 颜色格式不符合Google MyMaps的KML解析规则
KML标准中<color>标签的取值要求是8位十六进制字符串,顺序为AABBGGRR(AA=透明度,BB=蓝色分量,GG=绿色分量,RR=红色分量),并且不能带#号。你的代码里用了#ff445eb5,带#号会导致MyMaps无法识别,直接使用默认的黑色。
解决步骤:
- 去掉颜色值前的
#,改成ff445eb5 - 确认颜色顺序是否正确:如果R中导出的是常规RGB颜色(比如
#b55e44),需要转换成KML的ABGR顺序,即把RGB反转成BGR,再加上透明度前缀,比如#b55e44(RGB)对应KML的ff445eb5(AA=ff,BB=44,GG=5e,RR=b5)
2. Style标签的位置可能导致解析问题
Google MyMaps对KML的结构兼容性有限,若<Style>标签放在<Folder>内部,可能无法被正确关联到对应的Placemark。
解决步骤:
- 将所有
<Style>标签移到<Document>根节点下,和<Folder>同级,保持<styleUrl>的引用不变(比如#poly1依然指向Document下的Style)
调整后的KML示例:
<kml xmlns:xsd="https://schemas.opengis.net/kml/2.2.0/ogckml22.xsd" xmlns:xmlns="https://www.opengis.net/kml/2.2/" version="1.0"> <Document> <name>map_test2_1</name> <open>1</open> <!-- 将Style移到Document下 --> <Style id="poly1"> <PolyStyle> <color>ff445eb5</color> <outline>1</outline> <fill>1</fill> </PolyStyle> <BalloonStyle> <text>$[description]</text> </BalloonStyle> </Style> <Folder> <name>sfdata.frame</name> <Placemark> <name>School Lane/Tankerton Road Area</name> <styleUrl>#poly1</styleUrl> <Polygon> <extrude>1</extrude> <tessellate>0</tessellate> <altitudeMode>clampToGround</altitudeMode> <outerBoundaryIs> <LinearRing> <coordinates>-0.3060805,51.402915,0 -0.2748381,51.3823493,0 -0.2552687,51.4096612,0 -0.3060805,51.402915,0</coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Folder> </Document> </kml>
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

