38

假设我有一条从一个城镇到另一个城镇的路线。从 Google Maps API 我可以恢复两者之间的路线。但是,从谷歌返回的路线是一条仅在一条腿有另一步的地方(例如,我必须从一条高速公路转到另一条高速公路的地方)包含地理坐标的驾驶路线。

我需要的是沿整个路线的地理位置(纬度/经度),以特定的间隔(例如,每 1/4 英里或 100m)。

有没有办法通过谷歌地图 API/网络服务来实现这一点?

或者 OpenStreetMap 数据库会是实现它的方法吗?

亲切的问候,玛德琳。

4

5 回答 5

29

OSRM为您提供具有道路几何形状的路线,就像它们在 OpenStreetMap 数据库中一样。例如,您可以将路由作为 GPX 获取(如果需要,可以对该文件进行后处理)。这将如下所示:

GET http://router.project-osrm.org/viaroute?hl=en&loc=47.064970,15.458470&loc=47.071100,15.476760&output=gpx

阅读更多:OSRM API 文档

于 2013-05-23T13:57:27.573 回答
12

由于接受的答案已过时并且不再起作用,因此可以使用Project OSRM中的路线服务来查询道路沿线的所有节点。

给定任意数量的 lon,lat 对。例如以下三个(在柏林):

  • 13.388860,52.517037
  • 13.397634,52.529407
  • 13.428555,52.523219

路线服务计算这些点之间的最快路线,并使用以下查询返回沿路的所有节点:

http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?alternatives=false&annotations=nodes

这将返回一个 json 响应,其中包含沿途所有节点的节点 ID。结果应如下所示:

{
  "routes": [
    {
      ...
      "legs": [
        {
          "annotation": {
            "nodes": [
              2264199819,
              2045820592,
              21487242,
              ...
    ]
 }

可以使用OverpassAPI接收节点的纬度、经度坐标。

[out:json];
(
   node(264199819);
   node(...);
   node(...);
   ...
);
(._;>;);
out;

这是使用 overpass-turbo 的示例请求:http: //overpass-turbo.eu/s/toe

于 2017-11-28T19:30:46.633 回答
6

这只是 google.maps.DirectionsService().route() 方法。您需要传递服务请求,然后在服务请求完成时执行回调。

https://developers.google.com/maps/documentation/javascript/directions

于 2013-08-15T16:16:58.677 回答
2

虽然不用作 API,但在这里:https ://www.nmeagen.org/可以创建“多点线”,设置点之间的距离和下载路线(坐标)为 CSV。

于 2021-04-25T11:20:07.233 回答
1

添加到马里奥的答案。

您可以使用 Google Maps Directions API 本身。对于给定的起点和终点,在 JSON 输出中查找以下内容:

"polyline" : {
  "points" : ""
}

您可以使用解码器从折线获取坐标。: https ://github.com/emcconville/google-map-polyline-encoding-tool 或。您可以使用 R 中的 googleway 包对其进行解码。 https://cran.r-project.org/web/packages/googleway/googleway.pdf

我不确定如何将分辨率设置为您想要的级别。但是 API 输出中的分辨率非常好。

于 2017-05-26T21:47:35.667 回答