【问题标题】:Adding static legend into KML file is not working将静态图例添加到 KML 文件中不起作用
【发布时间】:2026-01-13 16:00:01
【问题描述】:

我创建了一张地图,在这里找到:http://userpages.flemingc.on.ca/~eluli/collab.html

我使用 shp2kml 将我的 shapefile 转换为 KML 图层。 我想为最后五个 KML 图层添加静态图例(另存为 PNG),以便当用户检查特定图层时,静态图例会显示在地图上。我已经尝试添加屏幕叠加,但我仍然无法看到图例。 下面显示了我添加到 Exports KML 文件中的内容。我在风格化代码之后编写了 ScreenOverlay 代码。我提到了以下链接,但它们没有用: https://developers.google.com/kml/documentation/kml_tut#screen_overlays https://developers.google.com/kml/documentation/kmlreference#screenoverlay

<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://earth.google.com/kml/2.0"><Document><name>Companies.shp</name><Style id="shp2kml1"><IconStyle>
    <color>BF004A4A</color><scale>1.0</scale><Icon><href>https://drive.google.com/uc?id=0B79b02nBK5vkVnRLalEtQk5LVkE</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><BalloonStyle ><text>$[description]</text><color>FFFFFFFF</color></BalloonStyle><LineStyle>
<color>FFFF0000</color><width>1</width></LineStyle><PolyStyle><color>FFFFCA95</color></PolyStyle></Style><Style id="shp2kml2"><IconStyle>
<color>BF006A6A</color><scale>1.0</scale><Icon><href>https://drive.google.com/uc?id=0B79b02nBK5vkTG5LWjF4anBkeW8</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><BalloonStyle ><text>$[description]</text><color>FFFFFFFF</color></BalloonStyle><LineStyle>
<color>FFFF0000</color><width>1</width></LineStyle><PolyStyle>
<color>FFFFCA95</color></PolyStyle></Style><Style id="shp2kml3"><IconStyle>
<color>BF007F7F</color><scale>1.0</scale><Icon><href>https://drive.google.com/uc?id=0B79b02nBK5vkaG9EM1VfcVdEM28</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><BalloonStyle ><text>$[description]</text>
<color>FFFFFFFF</color></BalloonStyle><LineStyle>
<color>FFFF0000</color><width>1</width></LineStyle><PolyStyle>
<color>FFFFCA95</color></PolyStyle></Style><Style id="shp2kml4"><IconStyle>
<color>BF009595</color><scale>1.0</scale><Icon><href>https://drive.google.com/uc?id=0B79b02nBK5vkSWpNejFoZU9sdnM</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><BalloonStyle ><text>$[description]</text>
<color>FFFFFFFF</color></BalloonStyle><LineStyle>
<color>FFFF0000</color><width>1</width></LineStyle><PolyStyle>
<color>FFFFCA95</color></PolyStyle></Style><Style id="shp2kml5"><IconStyle>
<color>BF00ABAB</color><scale>1.0</scale><Icon><href>https://drive.google.com/uc?id=0B79b02nBK5vkZWFTa2ZXOHMzSmc</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><BalloonStyle ><text>$[description]</text>
<color>FFFFFFFF</color></BalloonStyle><LineStyle><color>FFFF0000</color><width>1</width></LineStyle><PolyStyle>
<color>FFFFCA95</color></PolyStyle></Style><Style id="shp2kml6"><IconStyle>
<color>BF00C0C0</color><scale>1.0</scale><Icon><href>https://drive.google.com/uc?id=0B79b02nBK5vkRW83UHFLbElVVk0</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><BalloonStyle ><text>$[description]</text>
<color>FFFFFFFF</color></BalloonStyle><LineStyle>
<color>FFFF0000</color><width>1</width></LineStyle><PolyStyle>
<color>FFFFCA95</color></PolyStyle></Style><Style id="shp2kml7"><IconStyle>
<color>BF00E1E1</color><scale>1.0</scale><Icon>
<href>https://drive.google.com/uc?id=0B79b02nBK5vkd2FoSkM4X2hSRDA</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><BalloonStyle ><text>$[description]</text>
<color>FFFFFFFF</color></BalloonStyle><LineStyle>
<color>FFFF0000</color><width>1</width></LineStyle><PolyStyle>
<color>FFFFCA95</color></PolyStyle></Style><Folder><name>Features</name><open>0</open><visibility>0</visibility><Placemark><name>0</name><Snippet></Snippet> 


<!-- code for Screen Overlay -->

<ScreenOverlay>
<name>Exports</name>
<Icon> <href>https://drive.google.com/open?id=0BxwnqYr_qb1DbzdQaFktbzF3WGs</href>
</Icon>
<overlayXY x="0" y="0" xunits="fraction" yunits="fraction"/>
<screenXY x="25" y="95" xunits="pixels" yunits="pixels"/>
<rotationXY x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>
<size x="0" y="0" xunits="pixels" yunits="pixels"/>
</ScreenOverlay>



<description>............ </description>...... <description>............ 
</description>...... <description>............ </description></Folder></Document></kml>

【问题讨论】:

    标签: html kml


    【解决方案1】:

    主要问题是图像的 URL 是 HTML 跳转页面而不是图像本身。

    https://drive.google.com/open?id=0BxwnqYr_qb1DbzdQaFktbzF3WGs

    在启用调试的情况下获取此 URL 会显示内容类型为 text/html 而不是 image/png。 Google Drive、Dropbox 等提供内联和/或链接到媒体的 html 页面的 URL。

    您需要从该 URL 获取图像本身的 URL。从此 URL 中,右键单击图像并选择“复制图像 URL”或“在新选项卡中打开图像”(取决于您使用的 Web 浏览器)。

    将目标屏幕覆盖图像更改为该 URL。

    此外,您的 KML 结构无效。

    例如,&lt;ScreenOverlay&gt; 元素必须在 &lt;Document&gt; ... &lt;/Document&gt; 内。此外,元素外部似乎有一个 &lt;description&gt; 标记,这是无效的。

    您的 KML 的结构应如下所示:

    <kml xmlns="http://www.opengis.net/kml/2.2">
     <Document>
      <Placemark>...</Placemark>
      <ScreenOverlay>..</ScreenOverlay>
     </Document>
    </kml>
    

    您可以使用KML validator 验证您的 KML。同样,您可以通过使用 .xml 文件扩展名重命名 KML 并将文件拖到 Web 浏览器上,轻松验证您的 KML 是格式正确的 XML 文件(例如匹配标签等)。

    【讨论】:

    • &lt;ScreenOverlay&gt; IS 在&lt;Document&gt; ... &lt;/Document&gt; 中我应该指定我使用 shp2kml 应用程序创建了 KML 层,因此 KML 层没有&lt;kml xmlns="http://www.opengis.net/kml/2.2"&gt;,而是有&lt;kml xmlns="http://earth.google.com/kml/2.0"&gt;
    • 你的意思是&lt;ScreenOverlay&gt;必须在&lt;description&gt;&lt;/description&gt;里面,也就是&lt;Document&gt; ... &lt;/Document&gt;里面?
    • 我有几个&lt;description&gt;&lt;/description&gt;标签
    • 必须在 标记内...上面粘贴的示例显示 紧接在结束 标记之前。
    • 感谢您指出这一点。将&lt;/kml&gt; 放在&lt;ScreenOverlay&gt; 之后是我的错误。我已经编辑了我的帖子。