Почему turf js distance возвращает результаты, отличные от геометрии Google Map libs computeDistanceBetween? - PullRequest
0 голосов
/ 11 марта 2020

Я озадачен, почему две библиотеки дают разные результаты.

const CATA = {
  lat: 57.312004,
  lng: 25.289825
};

const PK = {
  lat: 57.307953,
  lng: 25.295025
};

const tCATA = turf.point([CATA.lat, CATA.lng]);
const tPK = turf.point([PK.lat, PK.lng]);
const tDistance = turf.distance(tCATA, tPK, { units: "meters" });

const gCATA = new google.maps.LatLng(CATA);
const gPK = new google.maps.LatLng(PK);
const gDistance = google.maps.geometry.spherical.computeDistanceBetween(
  gCATA,
  gPK
);

console.log(tDistance, gDistance); // 707.249063108749, 548.7294775022126

CodeSandbox: https://codesandbox.io/s/boring-hawking-b7uwh

Хорошо, одна вещь может быть, что газон js использует другой радиус Земли (6371008.8), чем Google (6378137). Но даже предоставляя радиус дерна для computeDistanceBetween, результаты все еще различаются для ~ 150 м.

Но, предполагая, что computeDistanceBetween учитывает параметр радиуса, я предполагаю, что Google полагается на Haversine тоже, как и газон ...

1 Ответ

0 голосов
/ 11 марта 2020

Обе функции фактически возвращают одинаковые значения при правильном использовании!

По-видимому, turf js - поскольку он основан на Geo JSON - вместо него используется формация LngLat LatLng. Переключение их в turf.point определениях решает вопрос и исправляет все связанные с ним вещи.

Для справки: https://macwright.org/lonlat/

Расстраивающее несоответствие В геопространственном (картографическом) программном обеспечении есть порядок координат. Координаты часто представлены в виде массивов, таких как [-87.73, 41.83], а не объектов, таких как { lng: -87.73, lat: 41.83 }. Это позволяет разработчику определить, является ли -87.73 долготой или широтой. Один из вариантов - точка в Чика go, а другая - в глубине Антарктиды.

Существует некоторый консенсус в отношении долготы, порядка широты для геопространственных форматов, но все же хаос для библиотек и программного обеспечения. Разработчик должен знать об этой проблеме и читать необходимую документацию, а также при необходимости менять координаты для перевода между различными системами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...