Google Maps Roads API:让“快速上路”更加宽容

Posted

技术标签:

【中文标题】Google Maps Roads API:让“快速上路”更加宽容【英文标题】:Google Maps Roads API: Making 'snap to road' more forgiving 【发布时间】:2015-08-19 07:58:40 【问题描述】:

我的任务是使用 Google Maps API 创建一个工具,餐厅可以使用它来定义送货区域。这是进度:http://codepen.io/keithpickering/pen/NqdzKO

用户应该能够绘制一个多边形,然后它会捕捉到附近的道路以确保准确性。这运行得相对较好,除了谷歌内置的快速道路功能......嗯,有点糟糕。如果你的点不够接近,它要么拒绝捕捉到任何东西,要么只是做出一些奇怪的 janky line。

我需要的是让工具在截断道路时更加“宽容”;换句话说,某人应该能够从任何缩放距离懒惰地绘制几乎任何类型的多边形,并且应该强制线条捕捉到一条道路或另一条道路。

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

...

// 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 并使用路线服务寻求更个性化的解决方案?有没有人有任何想法?感谢您的所有帮助。

【问题讨论】:

如果您正在考虑替代方案,here 的答案可能会有所帮助。它使用方向而不是 Roads api。 @Andy 这是我想做的事情,但由于这个例子没有使用绘图工具,它不能开箱即用。如何获取“polygoncomplete”事件的“origin”和“destination”值? 【参考方案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

【讨论】:

【参考方案2】:

很遗憾,目前的 API 无法做到这一点。 API 旨在纠正实际穿过道路的路径,并考虑允许的交通方向(即单向道路)、有效转弯和所提供点的顺序等因素。

在某些道路附近徒手绘制的路径可能不是有效的路径(尤其是从远处缩放级别),因此 API 没有找到一条很有可能是真实的路径。

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

【讨论】:

以上是关于Google Maps Roads API:让“快速上路”更加宽容的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps Roads API 返回重复的坐标和 placeIds

如何使用带有 Google Maps Roads API 的坐标列表计算距离

有没有一种好方法可以最大限度地减少 Google Maps Roads API 的负载?

如何让 Google Maps Directions API 选择正确的机场?

Google Maps Geocoding APi 不返回 lat 和 long

可以向 Google Maps API 发出多少请求而不被禁止?