问题描述
我正在尝试生成 KML 叠加层。我有一个网格,我正在绘制一个区域,带有彩色方块。当我将高度模式设置为“clampToGround”时,我生成的多边形的所有内容(包括它们的颜色)都按预期工作。但是,让网格变形以映射到地面是不可取的。当我改变高度模式使得覆盖层悬停在离地面几米的地方时,网格部分的形状是正确的,但颜色信息被丢弃并且网格部分被涂成黑色。
这是我的 KML 代码的可测试摘录。这是显示正确的颜色,但网格变形到地面。将altitudeMode的值更改为: 绝对产生另一种行为。
有没有办法在正确的高度和正确的颜色同时使用它?
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document id="1">
<Document id="2">
<Style id="10">
<polyStyle id="10">
<color>0xFF0000FF</color>
<colorMode>normal</colorMode>
<fill>1</fill>
<outline>1</outline>
</polyStyle>
</Style>
<name>Antenna Data</name>
<Camera>
<longitude>-122.30201334502573</longitude>
<latitude>37.87244901754293</latitude>
<altitude>200</altitude>
</Camera>
<Placemark id="5">
<name>region</name>
<styleUrl>#10</styleUrl>
<polygon id="4">
<altitudeMode>clampToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing id="8">
<coordinates>-122.30243999999999,37.871973499999996,10 -122.30243999999999,37.8719265,10 -122.30238,10</coordinates>
</LinearRing>
</outerBoundaryIs>
</polygon>
</Placemark>
</Document>
</Document>
</kml>
解决方法
您的 KML 有几个问题。
多边形缺少闭合顶点。为了成为有效的 KML 多边形,第一个坐标集 (lon,lat,alt) 必须作为最后一个坐标集重复,以便多边形自行闭合。对于正方形示例,您需要 5 个坐标集,第一个和最后一个相同。
先尝试修复该问题,如果您仍然看到着色问题,请尝试确保顶点缠绕方向正确(逆时针方向)。如果它是向后的,那么多边形的较暗“底部”将朝上,并且可能会显得暗/黑色。从坐标上看,你的似乎是正确的,但我可能弄错了。
此外,您的颜色不是有效的 KML 颜色,因为它前面似乎有一个额外的“0x”。有效的 KML 颜色需要四个两个字符的值(每个值都在 00 和 ff 之间),代表 Alpha、蓝色、绿色、红色(AABBGGRR,是的,它是 HTML 颜色的倒序)。纯红色将是:FF0000FF。
下面是您的 KML 示例的更新副本,其中高度模式 = 绝对、添加了结束顶点并校正了颜色……这在 Google 地球专业版中对我有用。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document id="1">
<Document id="2">
<Style id="10">
<PolyStyle id="10">
<color>FF0000FF</color>
<colorMode>normal</colorMode>
<fill>1</fill>
<outline>1</outline>
</PolyStyle>
</Style>
<name>Antenna Data</name>
<Camera>
<longitude>-122.30201334502573</longitude>
<latitude>37.87244901754293</latitude>
<altitude>200</altitude>
</Camera>
<Placemark id="5">
<name>region</name>
<styleUrl>#10</styleUrl>
<Polygon id="4">
<altitudeMode>absolute</altitudeMode>
<outerBoundaryIs>
<LinearRing id="8">
<coordinates>-122.30243999999999,37.871973499999996,10 -122.30243999999999,37.8719265,10 -122.30238,10</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</Document>
</kml>
,
我遇到的解决方案是,我可以在 Google 地球中简单地停用地形。这现在似乎有效。