具有10个以上路点的多条路线
Multiple routes with more than 10 waypoints
我很难尝试在一张地图中显示多条路线,每条路线使用超过10个路点,但它只显示了一条路线。你能告诉我我做错了什么吗?这是我在jsfiddle中的代码。http://jsfiddle.net/agr3a07m/83/
var directionsDisplay = [];
var directionsService = [];
var map = null;
var m = [
'33.2970431149,130.5494435901',
'33.3005149987,130.5513321623',
'33.304042372,130.5497765735',
'33.3104305379,130.5474986907',
'33.3102360342,130.542915747',
'33.3117635011,130.5344719334',
'33.3111524907,130.536499571',
'33.3132632805,130.531027706',
'33.314679737,130.5276668088',
'33.3129298155,130.5214451838',
'33.3135130049 ,130.5167788778',
'33.3143184142,130.5133346823',
'33.3151238268 ,130.5100849151',
];
var msg = [
'33.3288994858, 130.4731429044',
'33.3265106749 ,130.462977192',
'33.3257329153,130.4592553147',
'33.3248161541,130.4482284949',
'33.324871548,130.4393125661',
'33.3246214636,130.4329519947',
'33.3260100846,130.4261191649',
'33.3294818525,130.4213693995',
'33.3319258968,130.4134255023',
'33.3276762737,130.4089816226',
'33.3239542905,130.3998714394',
];
var ms = [
'33.8088548609,130.8573666723',
'33.8100491378 ,130.8550890287',
'33.8121044172 ,130.8518669794',
'33.8141319684 ,130.8513113767',
'33.8159373595 ,130.8529500463',
'33.818687093 ,130.8545331216',
'33.8213534993 ,130.8559495478',
'33.8218257146 ,130.8584493185',
'33.8246587318 ,130.8576992503',
'33.8281028031 ,130.857421337',
'33.8323801257 ,130.8575600175',
'33.8360186793 ,130.8606429272',
'33.8385461993 ,130.8613649731',
'33.8415736984 ,130.8639479525',
'33.8455733138 ,130.8664197853',
'33.8484063873 ,130.8688916718',
'33.8514059878 ,130.8643919073',
];
function init(){
calcRoute(msg);
calcRoute(m);
calcRoute(ms);
}
function calcRoute(f) {
var input_msg = f;
var locations = new Array();
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < input_msg.length; i++) {
var tmp_lat_lng = input_msg[i].split(",");
locations.push(new google.maps.LatLng(tmp_lat_lng[0], tmp_lat_lng[1]));
bounds.extend(locations[locations.length - 1]);
}
var mapOptions = {
// center: locations[0],
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('dvMap'), mapOptions);
map.fitBounds(bounds);
var i = locations.length;
var index = 0;
while (i != 0) {
/* if (i < 3) {
var tmp_locations = new Array();
for (var j = index; j < locations.length; j++) {
tmp_locations.push(locations[j]);
}
drawRouteMap(tmp_locations);
i = 0;
index = locations.length;
}
*/
if ( i <= 10) {
console.log("before :fun < 10: i value " + i + " index value" + index);
var tmp_locations = new Array();
for (var j = index; j < locations.length; j++) {
tmp_locations.push(locations[j]);
}
drawRouteMap(tmp_locations);
i = 0;
index = locations.length;
console.log("after fun < 10: i value " + i + " index value" + index);
}
if (i > 10) {
console.log("before :fun > 10: i value " + i + " index value" + index);
var tmp_locations = new Array();
for (var j = index; j < index + 10; j++) {
tmp_locations.push(locations[j]);
}
drawRouteMap(tmp_locations);
i = i - 9;
index = index + 9;
console.log("after fun > 10: i value " + i + " index value" + index);
}
}
}
function drawRouteMap(locations, a) {
var start, end;
var waypts = [];
for (var k = 0; k < locations.length; k++) {
if (k >= 1 && k <= locations.length - 2) {
waypts.push({
location: locations[k],
stopover: true
});
}
if (k == 0) start = locations[k];
if (k == locations.length - 1) end = locations[k];
}
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
console.log(request);
directionsService.push(new google.maps.DirectionsService());
var instance = directionsService.length - 1;
directionsDisplay.push(new google.maps.DirectionsRenderer({
preserveViewport: true
}));
directionsDisplay[instance].setMap(map);
directionsService[instance].route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
console.log(status);
directionsDisplay[instance].setDirections(response);
}
});
}
google.maps.event.addDomListener(window, 'load', init);
- 将映射初始化放入initialize函数中。如果重用calcRoute函数,就不能在其中使用它
- 如果要缩放地图以显示所有路线,请使用公共(全局)边界对象
- 请记住,DirectionsService受配额和费率限制,当它不"正常"时,您需要检查并报告返回的状态,否则它将以静默方式失败
相关问题(一条路线超过8个航路点):谷歌地图航路点超过8个问题
工作小提琴
代码片段:
var directionsDisplay = [];
var directionsService = [];
var map = null;
var bounds = new google.maps.LatLngBounds();
var m = [
'33.2970431149,130.5494435901',
'33.3005149987,130.5513321623',
'33.304042372,130.5497765735',
'33.3104305379,130.5474986907',
'33.3102360342,130.542915747',
'33.3117635011,130.5344719334',
'33.3111524907,130.536499571',
'33.3132632805,130.531027706',
'33.314679737,130.5276668088',
'33.3129298155,130.5214451838',
'33.3135130049,130.5167788778',
'33.3143184142,130.5133346823',
'33.3151238268,130.5100849151'
];
var msg = [
'33.3288994858,130.4731429044',
'33.3265106749,130.462977192',
'33.3257329153,130.4592553147',
'33.3248161541,130.4482284949',
'33.324871548,130.4393125661',
'33.3246214636,130.4329519947',
'33.3260100846,130.4261191649',
'33.3294818525,130.4213693995',
'33.3319258968,130.4134255023',
'33.3276762737,130.4089816226',
'33.3239542905,130.3998714394'
];
var ms = [
'33.8088548609,130.8573666723',
'33.8100491378,130.8550890287',
'33.8121044172,130.8518669794',
'33.8141319684,130.8513113767',
'33.8159373595,130.8529500463',
'33.818687093,130.8545331216',
'33.8213534993,130.8559495478',
'33.8218257146,130.8584493185',
'33.8246587318,130.8576992503',
'33.8281028031,130.857421337',
'33.8323801257,130.8575600175',
'33.8360186793,130.8606429272',
'33.8385461993,130.8613649731',
'33.8415736984,130.8639479525',
'33.8455733138,130.8664197853',
'33.8484063873,130.8688916718',
'33.8514059878,130.8643919073'
];
function init() {
var mapOptions = {
// center: locations[0],
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('dvMap'), mapOptions);
calcRoute(msg);
calcRoute(m);
calcRoute(ms);
}
function calcRoute(f) {
var input_msg = f;
var locations = new Array();
//alert(f);
for (var i = 0; i < input_msg.length; i++) {
var tmp_lat_lng = input_msg[i].split(",");
locations.push(new google.maps.LatLng(parseFloat(tmp_lat_lng[0]), parseFloat(tmp_lat_lng[1])));
bounds.extend(locations[locations.length - 1]);
}
map.fitBounds(bounds);
i = locations.length;
var index = 0;
while (i != 0) {
if (i < 3) {
var tmp_locations = new Array();
for (var j = index; j < locations.length; j++) {
tmp_locations.push(locations[j]);
}
drawRouteMap(tmp_locations);
i = 0;
index = locations.length;
}
if (i >= 3 && i <= 10) {
//alert("before :fun < 10: i value " + i + " index value" + index);
var tmp_locations = new Array();
for (var j = index; j < locations.length; j++) {
tmp_locations.push(locations[j]);
}
drawRouteMap(tmp_locations);
i = 0;
index = locations.length;
console.log("after fun < 10: i value " + i + " index value" + index);
}
if (i >= 10) {
// alert("before :fun > 10: i value " + i + " index value" + index);
var tmp_locations = new Array();
for (var j = index; j < index + 10; j++) {
tmp_locations.push(locations[j]);
}
drawRouteMap(tmp_locations);
i = i - 9;
index = index + 9;
console.log("after fun > 10: i value " + i + " index value" + index);
}
}
}
j = 0;
function drawRouteMap(locations) {
j++;
var start, end;
var waypts = [];
for (var k = 0; k < locations.length; k++) {
if (k >= 1 && k <= locations.length - 2) {
waypts.push({
location: locations[k],
stopover: true
});
}
if (k == 0) start = locations[k];
if (k == locations.length - 1) end = locations[k];
}
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
console.log(request);
directionsService.push(new google.maps.DirectionsService());
var instance = directionsService.length - 1;
directionsDisplay.push(new google.maps.DirectionsRenderer({
preserveViewport: true
}));
// var instance = directionsDisplay.length - 1;
// directionsDisplay[instance].setMap(map);
directionsService[instance].route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
// alert(status);
if (directionsDisplay && directionsDisplay[instance]) {
directionsDisplay[instance].setMap(map);
directionsDisplay[instance].setDirections(response);
} else {
document.getElementById('info').innerHTML += "instance=" + instance + " doesn't exist<br>";
}
} else {
document.getElementsById('info').innerHTML += "instance=" + instance + " status=" + status + "<br>";
}
});
// alert(instance);
}
google.maps.event.addDomListener(window, 'load', init);
html,
body,
#dvMap {
height: 100%;
width: 100%;
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="info"></div>
<div id="dvMap"></div>
相关文章:
- 如何jQuery-Add按钮最多插入10个新输入
- 正在加载+10个帖子
- 如何在输入文本字段中输入10个字符时自动提交表单
- 骨干.js集合筛选前 10 个模型
- 使用jQuery在p-tag中查找给定字符串的前10个单词和下10个单词
- ajax请求每秒返回10个响应
- 当一次加载所有文件时,是否有来自阵列的10个随机闪存文件显示在页面上?(在javascript中)
- 当至少有20个搜索结果时,只呈现10个搜索结果?使用Google Places API
- 将动态表单元素限制为最多10个记录
- JavaScript仅加载10个xml节点
- 限制“;文本字段“;以magento形式只接受数字和最多10个数字
- limit jquery get text();只收集10个字符
- 尝试在谷歌地图V3中绘制超过10个标记,不使用地理编码
- 精确匹配10个边界未知的数字
- 嵌套函数:我在这里创建了 10 个函数
- 查询 DynamoDB 外壳中的最后 10 个项目
- 从csv文件中获取值,具体取决于10个值JAVASCRIPT
- 使用唯一但不友好的名称更新 10 个动态文本字段
- 一个滚动条用于三个选项或选择区域
- 具有10个以上路点的多条路线