Google maps api 3 方向路线-仅主要街道
这是我的例子http://gidzior.net/map/v3_animate_marker_directions.html (我在输入中使用了占位符),这里是geocodezip.com的GM代码的thx 在我的示例中,我使用的是谷歌地图API 3,是否可以只设置方向路线上的主要街道Google maps api 3 方向路线-仅主要街道,google-maps-api-3,Google Maps Api 3,这是我的例子http://gidzior.net/map/v3_animate_marker_directions.html (我在输入中使用了占位符),这里是geocodezip.com的GM代码的thx 在我的示例中,我使用的是谷歌地图API 3,是否可以只设置方向路线上的主要街道 var map; var directionDisplay; var directionsService; var stepDisplay; var markerArray = [];
var map;
var directionDisplay;
var directionsService;
var stepDisplay;
var markerArray = [];
var position;
var marker = null;
var polyline = null;
var poly2 = null;
var speed = 0.000005, wait = 1;
var infowindow = null;
var zoomed;
var myPano;
var panoClient;
var nextPanoId;
var timerHandle = null;
function createMarker(latlng, label, html) {
// alert("createMarker("+latlng+","+label+","+html+","+color+")");
var contentString = '<b>'+label+'</b><br>'+html;
var marker = new google.maps.Marker({
position: latlng,
map: map,
title: label,
zIndex: Math.round(latlng.lat()*-100000)<<5
});
//marker.myname = label;
// gmarkers.push(marker);
/*google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(contentString);
infowindow.open(map,marker);
});*/
return marker;
}
function initialize() {
infowindow = new google.maps.InfoWindow(
{
size: new google.maps.Size(150,50)
});
// Instantiate a directions service.
directionsService = new google.maps.DirectionsService();
// Create a map and center it on Warszawa.
var myOptions = {
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
address = 'warszawa'
geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
map.setCenter(results[0].geometry.location);
});
// Create a renderer for directions and bind it to the map.
var rendererOptions = {
map: map
}
directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
// Instantiate an info window to hold step text.
stepDisplay = new google.maps.InfoWindow();
polyline = new google.maps.Polyline({
path: [],
strokeColor: '#FF0000',
strokeWeight: 3
});
poly2 = new google.maps.Polyline({
path: [],
strokeColor: '#FF0000',
strokeWeight: 3
});
}
var steps = []
function calcRoute(){
if (timerHandle) { clearTimeout(timerHandle); }
if (marker) { marker.setMap(null);}
polyline.setMap(null);
poly2.setMap(null);
directionsDisplay.setMap(null);
polyline = new google.maps.Polyline({
path: [],
strokeColor: '#FF0000',
strokeWeight: 3
});
poly2 = new google.maps.Polyline({
path: [],
strokeColor: '#FF0000',
strokeWeight: 3
});
// Create a renderer for directions and bind it to the map.
var rendererOptions = {
map: map
}
directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
var start = document.getElementById("start").value;
var end = document.getElementById("end").value;
var travelMode = google.maps.DirectionsTravelMode.DRIVING
var request = {
origin: start,
destination: end,
travelMode: travelMode
};
// Route the directions and pass the response to a
// function to create markers for each step.
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK){
directionsDisplay.setDirections(response);
var bounds = new google.maps.LatLngBounds();
var route = response.routes[0];
startLocation = new Object();
endLocation = new Object();
// For each route, display summary information.
var path = response.routes[0].overview_path;
var legs = response.routes[0].legs;
for (i=0;i<legs.length;i++) {
if (i == 0) {
startLocation.latlng = legs[i].start_location;
startLocation.address = legs[i].start_address;
// marker = google.maps.Marker({map:map,position: startLocation.latlng});
marker = createMarker(legs[i].start_location,"start",legs[i].start_address,"green");
}
endLocation.latlng = legs[i].end_location;
endLocation.address = legs[i].end_address;
var steps = legs[i].steps;
for (j=0;j<steps.length;j++) {
var nextSegment = steps[j].path;
for (k=0;k<nextSegment.length;k++) {
polyline.getPath().push(nextSegment[k]);
bounds.extend(nextSegment[k]);
}
}
}
polyline.setMap(map);
map.fitBounds(bounds);
// createMarker(endLocation.latlng,"end",endLocation.address,"red");
map.setZoom(18);
startAnimation();
zoomed=false;
}
});
}
var step = 50; // 5; // metres
var tick = 100; // milliseconds
var eol;
var k=0;
var stepnum=0;
var speed = "";
var lastVertex = 1;
//=============== animation functions ======================
function updatePoly(d) {
// Spawn a new polyline every 20 vertices, because updating a 100-vertex poly is too slow
if (poly2.getPath().getLength() > 20) {
poly2=new google.maps.Polyline([polyline.getPath().getAt(lastVertex-1)]);
// map.addOverlay(poly2)
}
if (polyline.GetIndexAtDistance(d) < lastVertex+2) {
if (poly2.getPath().getLength()>1) {
poly2.getPath().removeAt(poly2.getPath().getLength()-1)
}
poly2.getPath().insertAt(poly2.getPath().getLength(),polyline.GetPointAtDistance(d));
} else {
poly2.getPath().insertAt(poly2.getPath().getLength(),endLocation.latlng);
}
}
function animate(d) {
// alert("animate("+d+")");
if (d>eol) {
map.panTo(endLocation.latlng);
marker.setPosition(endLocation.latlng);
return;
}
if (d>eol-1000 && zoomed!=true) {
map.setZoom(15); // or whatever value
zoomed=true;
}
var p = polyline.GetPointAtDistance(d);
map.panTo(p);
marker.setPosition(p);
updatePoly(d);
timerHandle = setTimeout("animate("+(d+step)+")", tick);
}
function startAnimation() {
eol=polyline.Distance();
map.setCenter(polyline.getPath().getAt(0));
// map.addOverlay(new google.maps.Marker(polyline.getAt(0),G_START_ICON));
// map.addOverlay(new GMarker(polyline.getVertex(polyline.getVertexCount()-1),G_END_ICON));
// marker = new google.maps.Marker({location:polyline.getPath().getAt(0)} /* ,{icon:car} */);
// map.addOverlay(marker);
poly2 = new google.maps.Polyline({path: [polyline.getPath().getAt(0)], strokeColor:"#0000FF", strokeWeight:10});
// map.addOverlay(poly2);
setTimeout("animate(50)",2000); // Allow time for the initial map display
}
var映射;
方向显示;
var定向服务;
var步进显示;
var-markerary=[];
var位置;
var-marker=null;
var polyline=null;
var poly2=null;
var速度=0.000005,等待=1;
var infowindow=null;
变焦;
myPano变种;
客户机;
nextPanoId变种;
var timerHandle=null;
函数createMarker(板条、标签、html){
//警报(“createMarker”(“+latlng+”、“+label+”、“+html+”、“+color+”));
var contentString=''+label+'
'+html;
var marker=new google.maps.marker({
位置:latlng,
地图:地图,
标题:标签,
zIndex:Math.round(latlng.lat()*-100000)没有。你可以选择avoidHighways
和avoidTolls
,但没有什么比avoidways
更好的了。这是因为服务需要尽可能靠近起点
和目的地
,而且可能只能通过旁道到达那里。avoidHighways
之所以可行,是因为我很可能存在从A到B的路线,而不使用高速公路。[例外情况是,高速公路连接两个岛屿,并且没有次要道路路线:我不知道避免高速公路是否只是避免它们,如果没有其他选择,API实际上会使用高速公路。]
API将支持快速路线,因此默认情况下将首选主要街道。如果您能够指示API仅使用主要街道,则完全有可能无法在A和B之间找到方向。否。您可以选择避免高速公路
和避免通行费
,但没有比避免通行费更好的选择D通道
。这是因为服务需要尽可能靠近起点
和目的地
,并且可能只能使用旁道到达那里。避免高速公路
是可能的,因为很可能存在从A到B的路线,而不使用高速公路。[例外情况是,高速公路连接两个岛屿,并且没有次要道路路线:我不知道避免高速公路是否只是避免它们,如果没有其他选择,API实际上会使用高速公路。]
API将支持快速路线,因此默认情况下将首选主要街道。如果您能够指示API仅使用主要街道,则完全可能无法在A和B之间找到方向。这是一个很大的遗憾,因为我的最终位置非常靠近主要道路,这对我非常有用,e特别是现在路线经常经过一条封闭的道路,也许我可以在道路上设置一个点,该点必须指向每条路线,我的意思是每个方向的路径必须指向某个点。我在回答中几乎提到了航路点。如果它们可能有助于指引一条靠近目的地的路线,请尝试一下。不幸的是,没有avoidPoints
其中之一(例如,为了避免临时封闭的街道),虽然这是几年前要求的。非常好,我还有一个问题,我可以隐藏航路点的图标吗?您可以使用suppressMarkers:true
,但是您需要明确地将标记A和B添加回地图上。再次感谢您的大力帮助这是一个很大的遗憾,因为我的最终位置非常靠近主干道,我这对我来说是非常有用的,尤其是现在这条路线经常经过一条封闭的道路,也许我可以在这条路上设置一个点,它必须通过每一条路线,我的意思是每一条路线必须通过某个点。我在回答中几乎提到了路点。如果它们可能有助于引导一条靠近目的地的路线,那就让它们走吧。不幸的是只是也没有avoidPoints
(例如,为了避免临时封闭的街道),虽然这是几年前要求的。非常好,我还有一个问题,我可以隐藏航路点的图标吗?您可以使用suppressMarkers:true
,但是您需要显式地将标记A和B添加回地图。再次感谢您的大力帮助