我们有两个应用程序:一个Web应用程序(使用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 ++中实现其距离公式?
谢谢
答案 0 :(得分:0)
您可能希望将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]
。