KML ExtendedData在GE中打开“错误”弹出窗口吗?

时间:2018-09-06 15:29:48

标签: kml google-earth

我注意到在KML中使用ExtendedData的某些行为,这使我对ExtendedData的使用产生疑问,尤其是在轨道交叉的情况下。

我想知道是否有修复程序或解决方法吗?

GoogleEarth(v7.3.2.5491(32位))似乎可以即时进行计算,以计算出与点击位置最近的航路点。如果考虑到时间的关系,如果距离最近的沿途距离距离较近,则这是一个问题。我在这里有一名MRE ...

<kml xmlns="http://earth.google.com/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document xmlns="http://earth.google.com/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
        <name>2018-08-27_Mon</name>
        <Schema id="schema">
            <gx:SimpleArrayField name="gps_coords" type="string">
                <displayName>GPS Coords</displayName>
            </gx:SimpleArrayField>
            <gx:SimpleArrayField name="ping_time" type="string">
                <displayName>Ping Time</displayName>
            </gx:SimpleArrayField>
        </Schema>
        <Folder xmlns="http://earth.google.com/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
            <name>Tracks</name>
            <Placemark xmlns="http://earth.google.com/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
                <name>Trackway</name>
                <styleUrl>#my_track</styleUrl>
                <gx:Track xmlns="http://earth.google.com/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
                    <altitudeMode>clampToGround</altitudeMode>
                    <when>1970-01-01T05:02:28Z</when>
                    <when>1970-01-01T09:04:00Z</when>
                    <when>1970-01-01T11:06:00Z</when>
                    <when>1970-01-01T14:59:30Z</when>
                    <when>1970-01-01T15:02:00Z</when>
                    <when>1970-01-01T17:03:11Z</when>
                    <gx:coord>-8.460239 54.253286 0</gx:coord>
                    <gx:coord>-8.460439 54.256286 0</gx:coord>
                    <gx:coord>-8.460639 54.259286 0</gx:coord>
                    <gx:coord>-8.467867 54.262505 0</gx:coord>
                    <gx:coord>-8.462653 54.256286 0</gx:coord>
                    <gx:coord>-8.460599 54.250317 0</gx:coord>
                    <ExtendedData>
                        <SchemaData schemaUrl="#schema">
                            <gx:SimpleArrayData name="gps_coords">
                                <gx:value>No 1. 54.253286 -8.460239</gx:value>
                                <gx:value>No 2. 54.256286 -8.460439</gx:value>
                                <gx:value>No 3. 54.259286 -8.460539</gx:value>
                                <gx:value>No 4. 54.262505 -8.467867</gx:value>
                                <gx:value>No 5. 54.256286 -8.462653</gx:value>
                                <gx:value>No 6. 54.250317 -8.460599</gx:value>
                            </gx:SimpleArrayData>
                            <gx:SimpleArrayData name="ping_time">
                                <gx:value>2018-08-27T05:02:28Z</gx:value>
                                <gx:value>2018-08-27T09:04:00Z</gx:value>
                                <gx:value>2018-08-27T11:06:00Z</gx:value>
                                <gx:value>2018-08-27T14:59:30Z</gx:value>
                                <gx:value>2018-08-27T15:02:00Z</gx:value>
                                <gx:value>2018-08-27T17:03:11Z</gx:value>
                            </gx:SimpleArrayData>
                        </SchemaData>
                    </ExtendedData>
                </gx:Track>
            </Placemark>
        </Folder>
        <Folder>
            <Placemark>
                <TimeStamp>
                    <when>1970-01-01T05:02:28Z</when>
                </TimeStamp>
                <description>Desc No 1. 54.253286 -8.460239</description>
                <styleUrl>#waypoint</styleUrl>
                <Point>
                    <coordinates>-8.460239 54.253286 0</coordinates>
                </Point>
            </Placemark>
            <Placemark>
                <TimeStamp>
                    <when>1970-01-01T09:04:00Z</when>
                </TimeStamp>
                <description>Desc No 2. 54.256286 -8.460439</description>
                <styleUrl>#waypoint</styleUrl>
                <Point>
                    <coordinates>-8.460439 54.256286 0</coordinates>
                </Point>
            </Placemark>
            <Placemark>
                <TimeStamp>
                    <when>1970-01-01T11:06:00Z</when>
                </TimeStamp>
                <description>Desc No 3. 54.259286 -8.460539</description>
                <styleUrl>#waypoint</styleUrl>
                <Point>
                    <coordinates>-8.460639 54.259286 0</coordinates>
                </Point>
            </Placemark>
            <Placemark>
                <TimeStamp>
                    <when>1970-01-01T14:59:30Z</when>
                </TimeStamp>
                <description>Desc No 4. 54.262505 -8.467867</description>
                <styleUrl>#waypoint</styleUrl>
                <Point>
                    <coordinates>-8.467867 54.262505 0</coordinates>
                </Point>
            </Placemark>
            <Placemark>
                <TimeStamp>
                    <when>1970-01-01T15:02:00Z</when>
                </TimeStamp>
                <description>Desc No 5. 54.256286 -8.462653</description>
                <styleUrl>#waypoint</styleUrl>
                <Point>
                    <coordinates>-8.462653 54.256286 0</coordinates>
                </Point>
            </Placemark>
            <Placemark>
                <TimeStamp>
                    <when>1970-01-01T17:03:11Z</when>
                </TimeStamp>
                <description>Desc No 6. 54.250317 -8.460599</description>
                <styleUrl>#waypoint</styleUrl>
                <Point>
                    <coordinates>-8.460599 54.250317 0</coordinates>
                </Point>
            </Placemark>
        </Folder>
    </Document>
</kml>

单击#4和#5之间的轨道,将弹出#3的ExtendedData。与#5和#6相同,导致#1打开。之所以说是有意义的,是因为轨道只是绘制为两点之间的直线,并且没有自己的几何形状。因此,即使天真的用户可能期望中间位置有一个精确的弹出窗口,我也可以接受。但是,如果移动时间滑块以排除/消失点#1,#2和#3,我现在希望将#1,#2和#3从计算中排除。但这种情况并非如此。获得与上述相同的结果。那不是我期望的。

在此MRE中,这不是问题,而是在具有数百个点的大型轨道上,并且轨道全天在其自身上来回穿行,因此,IMO可以使用此类ExtendedData弹出窗口。

要解决此问题,我为可接受的航迹中的每个航路点创建了CDATA描述

是否存在针对此行为的KML解决方法,或者仅仅是GE实现它的方式?也许还有其他建议吗?

利亚姆

1 个答案:

答案 0 :(得分:0)

Google Earth Pro的行为方式是,当单击经过中点的航迹段时,会提供下一个航点的元数据。这是您在单击轨道并看到另一点的元数据时所看到的。

还要注意,上述KML不符合KML 2.2标准。几个验证问题。

  1. 点坐标中不应有任何空格。空格应替换为逗号(,):

旧:

  <Point>
     <coordinates>-8.460239 54.253286 0</coordinates>
  </Point>

新:

  <Point>
     <coordinates>-8.460239,54.253286,0</coordinates>
  </Point>
  1. 名称空间应为xmlns="http://www.opengis.net/kml/2.2",而不是http://earth.google.com/kml/2.2的旧形式。

  2. 某些元素顺序不正确。 KML 2.2具有严格的元素顺序(请参见reference),但Google Earth通常会忽略元素的顺序。元素的正确顺序如下:

        <Placemark>
            <description>...</description>
            <TimeStamp>...</TimeStamp>
            <styleUrl>...</styleUrl>
            <Point>...</Point>
        </Placemark>
    
相关问题