我注意到在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实现它的方式?也许还有其他建议吗?
利亚姆
答案 0 :(得分:0)
Google Earth Pro的行为方式是,当单击经过中点的航迹段时,会提供下一个航点的元数据。这是您在单击轨道并看到另一点的元数据时所看到的。
还要注意,上述KML不符合KML 2.2标准。几个验证问题。
旧:
<Point>
<coordinates>-8.460239 54.253286 0</coordinates>
</Point>
新:
<Point>
<coordinates>-8.460239,54.253286,0</coordinates>
</Point>
名称空间应为xmlns="http://www.opengis.net/kml/2.2"
,而不是http://earth.google.com/kml/2.2
的旧形式。
某些元素顺序不正确。 KML 2.2具有严格的元素顺序(请参见reference),但Google Earth通常会忽略元素的顺序。元素的正确顺序如下:
<Placemark>
<description>...</description>
<TimeStamp>...</TimeStamp>
<styleUrl>...</styleUrl>
<Point>...</Point>
</Placemark>