KML 多边形,高度模式破坏颜色

问题描述

我正在尝试生成 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 地球中简单地停用地形。这现在似乎有效。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...