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 选择正确的机场?