Google 地图设置 directionsRenderer 对象的方向不绘制路线
Google Maps setting directions of directionsRenderer object not drawing route
尝试绘制路线时,代码运行正常但无法呈现。
下面是一个遵循相同结构并以相同方式运行的示例代码:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Simple markers</title>
<style>
#map {
height: 100%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
var routeDisplay = new function() {
var self = this;
// Variables
self.directionsService;
self.directionsRenderer;
self.map;
self.origin;
self.destination;
// Functions
self.setup = function() {
self.directionsService = new google.maps.DirectionsService();
self.directionsRenderer = new google.maps.DirectionsRenderer({
preserveViewport: true,
suppressMarkers: true
});
}
self.setMap = function(map) {
self.map = map;
self.directionsRenderer.map = map;
}
self.setPoints = function(origin, destination) {
self.origin = origin;
self.destination = destination;
}
self.render = function() {
if (self.directionsRenderer.map == null) self.directionsRenderer.map = self.map;
self.directionsService.route({
origin: self.origin,
destination: self.destination,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
self.directionsRenderer.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
self.hide = function() {
self.directionsRenderer.map = null;
}
self.show = function() {
self.directionsRenderer.map = self.map;
}
self.toggleShow = function() {
self.directionsRenderer.map = (self.directionsRenderer.map == null) ?
self.map : null;
}
self.isAlreadyRendered = function(origin, destination) {
if (origin == self.origin && destination == self.destination) return true;
return false;
}
}
function initMap() {
var myLatLng = {
lat: 45.5325016,
lng: -122.7973512
};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: myLatLng
});
var start = new google.maps.Marker({
position: myLatLng,
map: map,
label: 'start'
});
var end = new google.maps.Marker({
position: {
lat: myLatLng.lat - .5,
lng: myLatLng.lng - .5
},
map: map,
label: 'end'
});
// Set up routeDisplay
routeDisplay.setup();
routeDisplay.setMap(map);
start.addListener('click', function() {
var a = start.position;
var b = end.position;
if (routeDisplay.isAlreadyRendered(a, b)) routeDisplay.toggleShow();
else {
routeDisplay.setPoints(a, b);
routeDisplay.render();
}
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY&callback=initMap">
</script>
</body>
</html>
调用 directionsRenderer.setDirections(response)
应呈现路线,如 Google 地图 API 文档所述:
Call setDirections() on the renderer, passing it the DirectionsResult as noted above. Because the renderer is an MVCObject, it will automatically detect any changes to its properties and update the map when its associated directions have changed.
这个确切的策略通常工作正常,但在这种情况下,我的 self.render
函数是我用来处理所有路由渲染的对象内部的函数。
还应注意,我已确认 directionsRenderer
使用的地图是正确的地图并且 directionRenderer.directions
确实发生了变化(应该如此)。
是什么阻止了路径多段线的渲染?
要设置 DirectionsRenderer
的 map
属性,请使用 .setMap
方法。您目前正在设置 DirectionsRenderer
的 map
属性,这没有记录。
var routeDisplay = new function() {
var self = this;
// Variables
self.directionsService;
self.directionsRenderer;
self.map;
self.origin;
self.destination;
// Functions
self.setup = function() {
self.directionsService = new google.maps.DirectionsService();
self.directionsRenderer = new google.maps.DirectionsRenderer({
preserveViewport: true,
suppressMarkers: true
});
}
self.setMap = function(map) {
self.map = map;
self.directionsRenderer.setMap(map);
}
self.setPoints = function(origin, destination) {
self.origin = origin;
self.destination = destination;
}
self.render = function() {
if (self.directionsRenderer.getMap() == null)
self.directionsRenderer.setMap(self.map);
self.directionsService.route({
origin: self.origin,
destination: self.destination,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
self.directionsRenderer.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
self.hide = function() {
self.directionsRenderer.setMap(null);
}
self.show = function() {
self.directionsRenderer.setMap(self.map);
}
self.toggleShow = function() {
self.directionsRenderer.map = (self.directionsRenderer.getMap() == null) ?
self.map : null;
}
self.isAlreadyRendered = function(origin, destination) {
if (origin == self.origin && destination == self.destination) return true;
return false;
}
}
代码片段:
html,
body,
#map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<div id="map"></div>
<script>
var routeDisplay = new function() {
var self = this;
// Variables
self.directionsService;
self.directionsRenderer;
self.map;
self.origin;
self.destination;
// Functions
self.setup = function() {
self.directionsService = new google.maps.DirectionsService();
self.directionsRenderer = new google.maps.DirectionsRenderer({
preserveViewport: true,
suppressMarkers: true
});
}
self.setMap = function(map) {
self.map = map;
self.directionsRenderer.setMap(map);
}
self.setPoints = function(origin, destination) {
self.origin = origin;
self.destination = destination;
}
self.render = function() {
if (self.directionsRenderer.getMap() == null)
self.directionsRenderer.setMap(self.map);
self.directionsService.route({
origin: self.origin,
destination: self.destination,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
self.directionsRenderer.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
self.hide = function() {
self.directionsRenderer.setMap(null);
}
self.show = function() {
self.directionsRenderer.setMap(self.map);
}
self.toggleShow = function() {
self.directionsRenderer.map = (self.directionsRenderer.getMap() == null) ?
self.map : null;
}
self.isAlreadyRendered = function(origin, destination) {
if (origin == self.origin && destination == self.destination) return true;
return false;
}
}
function initMap() {
var myLatLng = {
lat: 45.5325016,
lng: -122.7973512
};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: myLatLng
});
var start = new google.maps.Marker({
position: myLatLng,
map: map,
label: 'start'
});
var end = new google.maps.Marker({
position: {
lat: myLatLng.lat - .5,
lng: myLatLng.lng - .5
},
map: map,
label: 'end'
});
// Set up routeDisplay
routeDisplay.setup();
routeDisplay.setMap(map);
start.addListener('click', function() {
var a = start.position;
var b = end.position;
if (routeDisplay.isAlreadyRendered(a, b)) routeDisplay.toggleShow();
else {
routeDisplay.setPoints(a, b);
routeDisplay.render();
}
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk">
</script>
尝试绘制路线时,代码运行正常但无法呈现。
下面是一个遵循相同结构并以相同方式运行的示例代码:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Simple markers</title>
<style>
#map {
height: 100%;
}
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
var routeDisplay = new function() {
var self = this;
// Variables
self.directionsService;
self.directionsRenderer;
self.map;
self.origin;
self.destination;
// Functions
self.setup = function() {
self.directionsService = new google.maps.DirectionsService();
self.directionsRenderer = new google.maps.DirectionsRenderer({
preserveViewport: true,
suppressMarkers: true
});
}
self.setMap = function(map) {
self.map = map;
self.directionsRenderer.map = map;
}
self.setPoints = function(origin, destination) {
self.origin = origin;
self.destination = destination;
}
self.render = function() {
if (self.directionsRenderer.map == null) self.directionsRenderer.map = self.map;
self.directionsService.route({
origin: self.origin,
destination: self.destination,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
self.directionsRenderer.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
self.hide = function() {
self.directionsRenderer.map = null;
}
self.show = function() {
self.directionsRenderer.map = self.map;
}
self.toggleShow = function() {
self.directionsRenderer.map = (self.directionsRenderer.map == null) ?
self.map : null;
}
self.isAlreadyRendered = function(origin, destination) {
if (origin == self.origin && destination == self.destination) return true;
return false;
}
}
function initMap() {
var myLatLng = {
lat: 45.5325016,
lng: -122.7973512
};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: myLatLng
});
var start = new google.maps.Marker({
position: myLatLng,
map: map,
label: 'start'
});
var end = new google.maps.Marker({
position: {
lat: myLatLng.lat - .5,
lng: myLatLng.lng - .5
},
map: map,
label: 'end'
});
// Set up routeDisplay
routeDisplay.setup();
routeDisplay.setMap(map);
start.addListener('click', function() {
var a = start.position;
var b = end.position;
if (routeDisplay.isAlreadyRendered(a, b)) routeDisplay.toggleShow();
else {
routeDisplay.setPoints(a, b);
routeDisplay.render();
}
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY&callback=initMap">
</script>
</body>
</html>
调用 directionsRenderer.setDirections(response)
应呈现路线,如 Google 地图 API 文档所述:
Call setDirections() on the renderer, passing it the DirectionsResult as noted above. Because the renderer is an MVCObject, it will automatically detect any changes to its properties and update the map when its associated directions have changed.
这个确切的策略通常工作正常,但在这种情况下,我的 self.render
函数是我用来处理所有路由渲染的对象内部的函数。
还应注意,我已确认 directionsRenderer
使用的地图是正确的地图并且 directionRenderer.directions
确实发生了变化(应该如此)。
是什么阻止了路径多段线的渲染?
要设置 DirectionsRenderer
的 map
属性,请使用 .setMap
方法。您目前正在设置 DirectionsRenderer
的 map
属性,这没有记录。
var routeDisplay = new function() {
var self = this;
// Variables
self.directionsService;
self.directionsRenderer;
self.map;
self.origin;
self.destination;
// Functions
self.setup = function() {
self.directionsService = new google.maps.DirectionsService();
self.directionsRenderer = new google.maps.DirectionsRenderer({
preserveViewport: true,
suppressMarkers: true
});
}
self.setMap = function(map) {
self.map = map;
self.directionsRenderer.setMap(map);
}
self.setPoints = function(origin, destination) {
self.origin = origin;
self.destination = destination;
}
self.render = function() {
if (self.directionsRenderer.getMap() == null)
self.directionsRenderer.setMap(self.map);
self.directionsService.route({
origin: self.origin,
destination: self.destination,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
self.directionsRenderer.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
self.hide = function() {
self.directionsRenderer.setMap(null);
}
self.show = function() {
self.directionsRenderer.setMap(self.map);
}
self.toggleShow = function() {
self.directionsRenderer.map = (self.directionsRenderer.getMap() == null) ?
self.map : null;
}
self.isAlreadyRendered = function(origin, destination) {
if (origin == self.origin && destination == self.destination) return true;
return false;
}
}
代码片段:
html,
body,
#map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<div id="map"></div>
<script>
var routeDisplay = new function() {
var self = this;
// Variables
self.directionsService;
self.directionsRenderer;
self.map;
self.origin;
self.destination;
// Functions
self.setup = function() {
self.directionsService = new google.maps.DirectionsService();
self.directionsRenderer = new google.maps.DirectionsRenderer({
preserveViewport: true,
suppressMarkers: true
});
}
self.setMap = function(map) {
self.map = map;
self.directionsRenderer.setMap(map);
}
self.setPoints = function(origin, destination) {
self.origin = origin;
self.destination = destination;
}
self.render = function() {
if (self.directionsRenderer.getMap() == null)
self.directionsRenderer.setMap(self.map);
self.directionsService.route({
origin: self.origin,
destination: self.destination,
travelMode: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
self.directionsRenderer.setDirections(response);
} else {
window.alert('Directions request failed due to ' + status);
}
});
}
self.hide = function() {
self.directionsRenderer.setMap(null);
}
self.show = function() {
self.directionsRenderer.setMap(self.map);
}
self.toggleShow = function() {
self.directionsRenderer.map = (self.directionsRenderer.getMap() == null) ?
self.map : null;
}
self.isAlreadyRendered = function(origin, destination) {
if (origin == self.origin && destination == self.destination) return true;
return false;
}
}
function initMap() {
var myLatLng = {
lat: 45.5325016,
lng: -122.7973512
};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: myLatLng
});
var start = new google.maps.Marker({
position: myLatLng,
map: map,
label: 'start'
});
var end = new google.maps.Marker({
position: {
lat: myLatLng.lat - .5,
lng: myLatLng.lng - .5
},
map: map,
label: 'end'
});
// Set up routeDisplay
routeDisplay.setup();
routeDisplay.setMap(map);
start.addListener('click', function() {
var a = start.position;
var b = end.position;
if (routeDisplay.isAlreadyRendered(a, b)) routeDisplay.toggleShow();
else {
routeDisplay.setPoints(a, b);
routeDisplay.render();
}
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk">
</script>