谷歌地图道路API:让“匆匆上路”更加宽容

时间:2015-06-04 15:44:45

标签: javascript jquery google-maps google-maps-api-3 google-roads-api

我的任务是使用Google Maps API创建一个工具,餐馆可以使用该工具来定义交付区域。以下是进度:http://codepen.io/keithpickering/pen/NqdzKO

用户应该能够绘制多边形,之后它将捕捉到附近的道路以确保准确性。这是相当不错的,除了谷歌的内置对话功能......好吧,有点糟糕。如果你的分数不够接近,它会拒绝捕捉任何东西,或者只是制造一些奇怪的笨拙的线条。

我需要的是让工具更加“原谅”它的道路捕捉;换句话说,有人应该能够从任何缩放距离懒洋洋地绘制任何类型的多边形,并且线条应该被强制捕捉到一条道路或另一条道路。

以下是我用来捕捉的代码部分:

...

// Snap polygon to roads
  placeIdArray = [];
  runSnapToRoad(poly, path, color);
});

// Snap a user-created polyline to roads and draw the snapped path
function runSnapToRoad(poly, path, color) {
  var pathValues = [];
  for (var i = 0; i < path.getLength(); i++) {
    pathValues.push(path.getAt(i).toUrlValue());
  }

  $.get('https://roads.googleapis.com/v1/snapToRoads', {
    interpolate: true,
    key: apiKey,
    path: pathValues.join('|')
  }, function(data) {
    processSnapToRoadResponse(data);
    drawSnappedPolyline(poly, path, color);
  });
}

// Store snapped polyline returned by the snap-to-road method.
function processSnapToRoadResponse(data) {
  snappedCoordinates = [];
  placeIdArray = [];
  for (var i = 0; i < data.snappedPoints.length; i++) {
    var latlng = new google.maps.LatLng(
        data.snappedPoints[i].location.latitude,
        data.snappedPoints[i].location.longitude);
    snappedCoordinates.push(latlng);
    placeIdArray.push(data.snappedPoints[i].placeId);
  }
}

是否有必要放弃Roads API并使用路线服务寻求更加个性化的解决方案?有没有人有任何想法?感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为您可以尝试从Microsoft Snap点到Road API。它提供了高达1000个点的非常高精度,并且GPS点之间的距离可以达到2.5公里。

https://docs.microsoft.com/en-us/bingmaps/rest-services/routes/snap-points-to-roads?redirectedfrom=MSDN

答案 1 :(得分:0)

不幸的是,使用当前的API无法做到这一点。 API旨在纠正实际穿越道路的路径,并考虑允许的交通路线(即单向道路),有效转弯和所提供点的顺序等因素。

某些道路附近的路径的徒手画可能不是有效路线(尤其是来自遥远的缩放级别),因此API找不到真实概率很高的路径。

如果您愿意,可以在issue tracker上提出此功能。