我正在尝试在地面以上的KML中创建一个多边形。当多边形尺寸较小时,它可以正常工作,但是当多边形很大时,由于Z-fighting,它看起来很奇怪。我也试过镶嵌,但结果是一样的。
<?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" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<name>KmlFile</name>
<StyleMap id="TS">
<Pair>
<key>normal</key>
<styleUrl>#TS0</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#TS1</styleUrl>
</Pair>
</StyleMap>
<Style id="TS0">
<LineStyle id="TSLine">
<color>7f0000c0</color>
<width>2</width>
</LineStyle>
<PolyStyle id="TSPoly">
<color>7f0000c0</color>
</PolyStyle>
</Style>
<Style id="TS1">
<LineStyle id="TSLine">
<color>7f0000c0</color>
<width>2</width>
</LineStyle>
<PolyStyle id="TSPoly">
<color>7f0000c0</color>
</PolyStyle>
</Style>
<Placemark>
<name>Z-fighting issue with polygon</name>
<description>
Tessellation not working
</description>
<styleUrl>#TS</styleUrl>
<Polygon>
<tessellate>1</tessellate>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
108.71,17.38,785 106.74,16.93,785 106.69,16.52,785 107.66,16.06,785 107.29,15.82,785 107.71,15.46,785 107.45,14.4,785 107.84,13.24,785 107.57,12.34,785 105.82,11.51,785 106.15,10.83,785 105.39,10.85,785 104.56,10.3,785 103.96,10.53,785 102.71,8.880000000000001,785 103.02,7.04,785 105.56,7.04,785 108.04,7.04,785 111.22,8.9,785 114.02,10.47,785 114.02,12.72,785 113.98,14.53,785 112.24,14.41,785 110.23,16.06,785 108.71,17.38,785
</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>
此问题的任何解决方案?
答案 0 :(得分:0)
问题是地球是弯曲的,并且使用绝对或 relativeToGround 的altitudeMode的KML中的多边形 NOT 跟随地球的曲率和切割地球的表面,如下图所示。这会导致多边形位于与地球相交的平面上,使边缘处于适当的高度,但中心切入海洋表面。
第二个问题是tessellation仅在<altitudeMode>
的值为clampToGround或clampToSeaFloor时启用。绝对和相对高度忽略了细分。
如果将altitudeMode更改为clampToGround,则整个多边形将遵循地面/海洋的曲率,多边形将在海洋上方。只有这样才能启用曲面细分。
但是,要在地面上表示多边形,唯一的解决方法是创建较小的多边形区域,其大小足够小,不会受到地球曲率的影响。尝试将多边形细分为4个较小的多边形。如果这不起作用,那么将每个细分为4个多边形。
有关详情,请参阅第6.3.3节中的OGC KML 2.2 spec。