【问题标题】:OpenLayers distance formulaOpenLayers 距离公式
【发布时间】:2018-07-20 00:00:59
【问题描述】:

我们有两个应用程序:一个 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++ 中实现?

谢谢

【问题讨论】:

    标签: c++ openlayers geospatial openlayers-3


    【解决方案1】:

    您可能希望将 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]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      相关资源
      最近更新 更多