Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps 可拖动捕捉到道路距离标记_Google Maps_Google Maps Api 3 - Fatal编程技术网

Google maps 可拖动捕捉到道路距离标记

Google maps 可拖动捕捉到道路距离标记,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正在使用在上找到的一些有用代码来添加标记和测量距离 我希望默认情况下标记捕捉到道路,但当用户按住shift键时,将使用一条直线 我已经为shift键实现了if语句,当我按住shift键时会绘制一条路径,但是默认情况下不会绘制“捕捉到道路”路径 我调用了两个函数,一个用于绘制直线绘制路径,另一个用于绘制道路直线绘制路径的捕捉 任何帮助都将不胜感激 <code> var map, service = new google.maps.DirectionsService(), shiftP

我正在使用在上找到的一些有用代码来添加标记和测量距离

我希望默认情况下标记捕捉到道路,但当用户按住shift键时,将使用一条直线

我已经为shift键实现了if语句,当我按住shift键时会绘制一条路径,但是默认情况下不会绘制“捕捉到道路”路径

我调用了两个函数,一个用于绘制直线绘制路径,另一个用于绘制道路直线绘制路径的捕捉

任何帮助都将不胜感激

<code>
var map,
service = new google.maps.DirectionsService(),
shiftPressed = false,
poly;

var path = [];

shiftPressed = false;
var markers = [];
var routePoints = [];

google.maps.event.addDomListener(document, "keydown", function () {
shiftPressed = true;
});
google.maps.event.addDomListener(document, "keyup", function () {
shiftPressed = false;
});

function $(id) {
return document.getElementById(id);
}

var map;
var mapOptions = {
center: new google.maps.LatLng(-23.5489433, - 46.6388182),
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};

var markers = [];
var line;

function initialize() {
map = new google.maps.Map($("map_canvas"), mapOptions);
line = new google.maps.Polyline({
map: map,
strokeColor: "#FF3333",
strokeOpacity: 0.5,
strokeWeight: 8
});

google.maps.event.addListener(map, 'click', function (event) {
var marker = new google.maps.Marker({
map: map,
position: event.latLng,
draggable: true
});


if (shiftPressed) {

markers.push(marker);
drawPath();

} else {

markers.push(marker);
drawPathD();

}


google.maps.event.addListener(marker, 'dblclick', function (event) {
marker.setMap(null);
drawPath();
});

google.maps.event.addListener(marker, 'drag', function (event) {
drawPath();
});
});
}

function countMarkers() {
count = 0;
for (var i = routePoints.length - 1; i >= 0; i--) {
if (markers[i].getMap() == null) {
routePoints.splice(i, 1);
} else {
count++;
}
}
return count;
}

function drawPath() {
countMarkers();

var coords = [];
for (var i = 0; i < markers.length; i++) {
coords.push(markers[i].getPosition());
}
line.setPath(coords);

meters = google.maps.geometry.spherical.computeLength(coords);
$("distKm").value = Math.round(meters / 1000 * 100) / 100;
$("distMi").value = Math.round(meters / 1609 * 100) / 100;
}

function drawPathD(event) {
countMarkers();
var coords = [];

service.route({
origin: path[path.length - 1],
destination: event.latLng,
travelMode: google.maps.DirectionsTravelMode.WALKING
}, function (result, status) {
if (status == google.maps.DirectionsStatus.OK) {
path = path.concat(result.routes[0].overview_path);
routePoints.setPath(path);
}
});



meters = google.maps.geometry.spherical.computeLength(coords);
$("distKm").value = Math.round(meters / 1000 * 100) / 100;
$("distMi").value = Math.round(meters / 1609 * 100) / 100;
}

function clearMarkers() {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(null)
}
drawPath();
}
google.maps.event.addDomListener(window, 'load', initialize);

</code>

下面介绍如何在Google Maps API v3中实现快速上路功能: