【问题标题】:OpenLayers: Get distance from gpxOpenLayers:获取与 gpx 的距离
【发布时间】:2014-07-03 18:29:00
【问题描述】:

我有一个 gpx 文件。我使用 OpenLayers 和 this example 在 OSM 上显示它。

我的要求是获得路线的距离。我怎样才能做到这一点?

请帮忙, 谢谢。

【问题讨论】:

  • 该链接似乎不正确。
  • 请说明“获取路线的距离”。是指轨道的长度吗?表示从我在哪里到轨道最近段的距离?
  • @JohnBarça 抱歉,我编辑了链接
  • @GuillaumePelletier 是的,轨道长度(gpx 文件中给出的轨道)。即,实际长度(轨道中的总公里数)。

标签: javascript openlayers openstreetmap


【解决方案1】:

基本上,GPX 是一个 XML 文件,它定义了一组 Track Segment,其中包含按顺序逻辑连接的 Track Point 列表。

<trkseg>
     <trkpt lat='float' lon='float'/>
     <trkpt lat='float' lon='float'/>
     <trkpt lat='float' lon='float'/>
...
</trkseg> 

您只需要使用点到点的距离来计算所有轨道段的长度(这些点包含纬度和经度) 点到点的距离将使用以下公式计算:

var radius = 6378137.0 ; // earth radius in meter
var DE2RA = 0.01745329252; // degre to radian conversion

// return the distance between (lat1,lon1) and (lat2,lon2) in meter.
GCDistance= function (lat1, lon1, lat2, lon2) {
    if (lat1 == lat2 && lon1 == lon2) return 0;
    lat1 *= DE2RA;
    lon1 *= DE2RA;
    lat2 *= DE2RA;
    lon2 *= DE2RA;
    var d = Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2);
    return (radius * Math.acos(d));
};

请注意,Track Segment 没有逻辑连接。

使用 DOM 解析 GPX 非常简单。

这段代码是从一个使用了多年的库中提取的。 这是我使用它的sample

希望对您有所帮助。 G.

【讨论】:

  • GCDistance fn 的输出以千米 ryt 为单位?
  • 实际以米为单位,而半径以米为单位。我更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多