Проблема с преобразованием показаний Garmin GPS в подходящий формат для Google Earth API

В настоящее время у меня есть задача интеграции некоторых данных GPS, хранящихся в базе данных MySQL, с Google Earth. Цель состоит в том, чтобы создать метки/путевые точки этих показаний и отобразить их в Google Earth.

Я погуглил задачу и наткнулся на статью: «Приложение Земли, управляемое базой данных: использование PHP и MySQL с API Земли».

Находится по адресу:

 https://developers.google.com/earth/articles/phpsqlearth

Я успешно следовал ему; пока я не пришел к тому, где я должен был создать метки. Основная проблема заключается в том, что функция createPlacemark имеет следующую подпись:

"createPlacemark(name,address,type,lat,lng)" . 

Меня больше всего беспокоят аргументы lat и lng (широта и долгота), потому что все данные GPS в базе данных имеют формат:

     "N5 bb.xxx E8 cc.yyy".

Никакие отдельные данные долготы или широты не сохранялись. Данные собираются через Garmin GPS. Я думал, что, возможно, я мог бы решить эту проблему, выполнив следующее:

    var point = ge.createPoint('N5 bb.xxx E8 cc.yyy ') , 

и забыть о

    point.setLatitude(parseFloat(lat))

а также

   point.setLongitude(parseFloat(lng)) statements.

Тем не менее, я хотел подтвердить, что я на правильном пути, поскольку я буду вдали от своей машины для разработки в течение нескольких дней.


person ewom2468    schedule 01.05.2013    source источник


Ответы (1)


Нет, вызов метода GEPlugin createPoint как у вас

var point = ge.createPoint('N5 bb.xxx E8 cc.yyy');

создаст точку с идентификатором N5 bb.xxx E8 cc.yyy - метод createPoint принимает только один строковый параметр, который используется для установки ID объекта.

Как у вас есть, результирующая точка KML будет выглядеть так:

<Point id="N5 bb.xxx E8 cc.yyy">
</Point>

Вам нужно будет вызвать один или несколько методов для фактического точечного объекта, созданного для установки данных широты и долготы. Либо point.set(), либо point.setLatitude() и point.setLongitude() - тогда вы, наконец, установите точку на геометрию меток, чтобы она работала.

Глядя на это, все, что вам действительно нужно сделать, это проанализировать Garmin GPS, используя простую функцию. Простое разделение строки с использованием пробела должно работать нормально.

  //parse a string in the Garmin format "N5 bb.xxx E8 cc.yyy"
  //returns a kmlpoint
  function gpsToPoint(data) {
    var parts = data.split(' ');
    var point = ge.createPoint('');
    point.setLatitude(parseFloat(parts[1]));
    point.setLongitude(parseFloat(parts[3]));
    return point;
  }

Затем просто измените функцию createPlacemark, чтобы создать точечный объект с помощью нового метода gpsToPoint(), передающего данные Garmin.

Это даст вам KML как

<Point>
  <coordinates>bb.xxx,cc.yyy,0</coordinates>
</Point>
person Fraser    schedule 02.05.2013