如何获取距离矩阵,计算在我的服务器上脱机

时间:2014-07-24 15:59:04

标签: php c++ matrix map openstreetmap

我希望得到几个地点之间的旅行距离和时间的近似值。

理想情况下,我希望能够发送位置的GPS坐标,使用OpenStreetMap的数据,并获得具有给定位置的距离矩阵作为输出,所有这些都将在我的AWS服务器上离线完成。 (使用PHP或C ++会很好)

我真的很擅长使用OpenStreetMap。我刚刚下载了ile-de-france.osm.pbf,这是法国某个地区的地图。

我不知道从哪里开始。我甚至不确定这样做是否简单。 谁能指出我正确的方向?如果OpenStreetMap不是使距离矩阵离线的最佳解决方案,那么它是什么?

3 个答案:

答案 0 :(得分:5)

为了计算行驶距离,您还必须安装路由器。选择一个可用的online routers(其中许多可以在本地安装并在线下使用)或offline routers。好的选择是OSRMGraphHoppergosmore

答案 1 :(得分:3)

OSRM有一个距离矩阵调用,但它目前仅限于一定数量的位置。 我已经构建了一个脚本来使用本地 OSRM服务器制作大型距离矩阵(在Ubuntu上编译非常简单)。 这是https://github.com/sabas/OSRMdistance 我计算了300多个地点的平方矩阵......

答案 2 :(得分:-1)

有两个简单的公式来计算2个GPS坐标之间的距离。例如(您可能需要注意单位)

double t1 = sin(y1) * sin(y2);
double t2 = cos(y1) * cos(y2);
double t3 = cos(x1 - x2);
double t4 = t2 * t3;
double t5 = t1 + t4;
double rad_dist = atan(-t5/sqrt(-t5 * t5 +1)) + 2 * atan(1.0f);
double mile = rad_dist * 3437.74677 * 1.1508;
double meter = mile * 1609.3470878864446;

要找到步行/车辆距离,您可以通过匹配最近的"方式"来打破通往检查点的路径。在数据库中。