我想检查我的路线上是否有标记..所以我尝试使用isLocationOnEdge(),我得到“TypeError:b.get不是函数”错误。这是我的代码我尝试了几个更改,但无法解决问题。
var directionsDisplay = new google.maps.DirectionsRenderer;
var directionsService = new google.maps.DirectionsService;
directionsDisplay.setMap(map);
calculateAndDisplayRoute(directionsService, directionsDisplay);
function calculateAndDisplayRoute(directionsService, directionsDisplay) {
directionsService.route({
origin: my_position.getPosition(),
destination: new google.maps.LatLng(my_markers[0][0],my_markers[0][1]),
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
var isLocationOnEdge = google.maps.geometry.poly.isLocationOnEdge;
var path = response.routes[0].overview_path;
for (var i = 0; i < my_markers.length; i++) {
if (isLocationOnEdge(new google.maps.LatLng(my_markers[i][0],my_markers[i][1]),path))
{
console.log("Its in!")
}
}
});
根据qazxsw poi,qazxsw poi方法采用以下参数:
isLocationOnEdge(point:LatLng,poly:Polygon | Polyline,tolerance?:number) 返回值:布尔值 计算给定点是否位于指定公差范围内的折线或多边形边缘上或附近。当提供的点的纬度和经度与边缘上的最近点之间的差小于公差时,返回true。公差默认为10-9度。
the documentation不是isLocationOnEdge
(或多边形),它是一系列overview_path
物体。
如果我使用该路径创建折线,它适用于mel
google.maps.Polyline
google.maps.LatLng
var isLocationOnEdge = google.maps.geometry.poly.isLocationOnEdge;
var path = response.routes[0].overview_path;
var polyline = new google.maps.Polyline({
path: path
})
if (isLocationOnEdge(new google.maps.LatLng(37.438442, -122.157558), polyline, 1e-3)) {
console.log("Its in!")
}
代码段:
proof of concept fiddle
function initialize() {
var map = new google.maps.Map(
document.getElementById("map_canvas"), {
center: new google.maps.LatLng(37.4419, -122.1419),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP,
styles: [{
featureType: 'poi',
stylers: [{
visibility: 'off'
}]
}]
});
var directionsDisplay = new google.maps.DirectionsRenderer;
var directionsService = new google.maps.DirectionsService;
directionsDisplay.setMap(map);
calculateAndDisplayRoute(directionsService, directionsDisplay);
function calculateAndDisplayRoute(directionsService, directionsDisplay) {
directionsService.route({
origin: "Palo Alto, CA",
destination: "Stanford, CA",
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
directionsDisplay.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
var isLocationOnEdge = google.maps.geometry.poly.isLocationOnEdge;
var path = response.routes[0].overview_path;
var polyline = new google.maps.Polyline({
path: path
})
if (isLocationOnEdge(new google.maps.LatLng(37.438442, -122.157558), polyline, 1e-3)) {
console.log("Its in!")
var mark = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(37.438442, -122.157558),
icon: {
url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle.png",
size: new google.maps.Size(7, 7),
anchor: new google.maps.Point(3.5, 3.5)
},
title: "On Route"
});
var infowindow = new google.maps.InfoWindow({
content: "on route"
});
infowindow.open(map, mark);
}
});
}
}
google.maps.event.addDomListener(window, "load", initialize);