У нас есть два приложения: веб-приложение (которое использует OpenLayers3) и приложение C ++. В настоящее время существует несоответствие в формуле для вычисления расстояния между двумя точками.
Для OpenLayers: мы используем проекцию по умолчанию (https://openlayers.org/en/latest/doc/faq.html#how-do-i-change-the-projection-of-my-map-).
Для приложения C ++: Мы используем формулу, приведенную в подразделе «Эллипсоидальная Земля, спроецированная на плоскость»: https://en.wikipedia.org/wiki/Geographical_distance. Это код:
double distanceKMs(Node* a, Node* b)
{
double latMean = (a->lat + b->lat) / 2.0;
double lonDiff = b->longi - a->longi;
double latDiff = b->lat - a->lat;
double k1 = 111.13209 - 0.56605 * cos(2 * latMean) + 0.00120 * cos(4 * latMean);
double k2 = 111.41513 * cos(latMean) -
0.09455 * cos(3 * latMean) +
0.00012 * cos(5 * latMean);
return sqrt( pow((k1 * latDiff), 2) + pow((k2 * lonDiff), 2));
}
Мы в первую очередь не обеспокоены точность (w.r.t. фактическое расстояние как мухи вороны). Наша цель — устранить несоответствие между двумя системами. Какую проекцию мы можем использовать в OpenLayers, чтобы ее формула расстояния легко (т.е. без использования какой-либо внешней библиотеки) была реализована в C ++?
Спасибо
Вы можете преобразовать формулу OpenLayers JavaScript в C ++.
Для этого вам необходимо конвертировать ol.sphere.getDistance
(OpenLayers v5), ранее известный как ol.Sphere.haversineDistance
(OpenLayers v4) функция https://github.com/openlayers/openlayers/blob/v5.1.2/src/ol/sphere.js#L44
На стороне клиента, чтобы получить координаты точки, используя долготу, широту просто используйте ol.proj.fromLonLat([lon, lat]
,
Других решений пока нет …