KML ExtendedData открывает «неправильное» всплывающее окно в GE? - PullRequest
0 голосов
/ 06 сентября 2018

Я замечаю определенное поведение при использовании ExtendedData в KML, которое, как мне кажется, ставит под сомнение использование 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, появится ExtendedData для № 3. То же самое с № 5 и № 6, что привело к открытию № 1. Это отчасти имеет смысл, потому что дорожка просто нарисована как прямая линия между двумя точками и не имеет своей собственной геометрии. Таким образом, я мог бы с этим смириться, хотя наивный пользователь мог ожидать точного всплывающего окна для промежуточных позиций. Однако если я переместу ползунок времени, чтобы исключить / исчезнуть точки № 1, № 2 и № 3, я бы ожидал, что № 1, № 2 и № 3 будут исключены из расчетов. Но это не так. Получите те же результаты, что и выше. Это не то, что я ожидал.

В этом MRE это не проблема как таковая, но на большом треке с несколькими сотнями точек и треком, пересекающим и обратно в течение дня, тогда такие всплывающие окна ExtendedData, IMO, могут использоваться.

Чтобы обойти это, я создал описание CDATA для каждой путевой точки в треке, которое является приемлемым

Есть ли обходной путь KML для такого поведения или это просто способ, которым GE его реализует? Возможно, есть еще предложения?

Ли

1 Ответ

0 голосов
/ 07 сентября 2018

Google Планета Земля Про ведет себя таким образом, что при нажатии на сегмент трека после средней точки выдает метаданные для следующей путевой точки. Это то, что вы видите, когда нажимаете на трек и видите метаданные для другой точки.

Также обратите внимание, что приведенный выше 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 имеет строгий порядок элементов (см. ссылка ), но Google Планета Земля обычно игнорирует порядок элементов. Правильный порядок элементов следующий:

        <Placemark>
            <description>...</description>
            <TimeStamp>...</TimeStamp>
            <styleUrl>...</styleUrl>
            <Point>...</Point>
        </Placemark>
    
...