Javascript 地图路由正在运行,但在源或目的地发生变化时,它不会';不反映
我已经在谷歌地图上显示了嵌套地图路由 在第一个视图中,它在地图上显示了良好的路由,但我们从下拉列表中更改点,然后根据功能将其反映在地图上。 我的代码片段如下所示:Javascript 地图路由正在运行,但在源或目的地发生变化时,它不会';不反映,javascript,google-maps,google-maps-api-3,google-api,Javascript,Google Maps,Google Maps Api 3,Google Api,我已经在谷歌地图上显示了嵌套地图路由 在第一个视图中,它在地图上显示了良好的路由,但我们从下拉列表中更改点,然后根据功能将其反映在地图上。 我的代码片段如下所示: <style> html, body, #map { height: 90%; width: 90%; margin: 0px; padding: 0px } .org{ margin-left: 8%; overflow: hidden; position: absolut
<style>
html,
body,
#map {
height: 90%;
width: 90%;
margin: 0px;
padding: 0px
}
.org{
margin-left: 8%;
overflow: hidden;
position: absolute;
top: 10px;
width: 92%;
}
.org_sel {
float: left;
margin-right: 30px;
width: 12%;
}
.org_city{
width: 200px;
height: 34px;
}
.dest_city{
width: 200px;
height: 34px;
}
.dest_sel {
float: left;
margin-right: 30px;
width: 12%;
}
</style>
<html>
<head>
<title>Map Demo</title>
</head>
<div id="map"></div>
<div class="org">
<div class="org_sel">
<select id="origin" class="org_city">
<option value="28.238897, 2.227514">Algeria</option>
<option value="40.641176, -73.777796">New York</option>
</select>
</div>
<div class="dest_sel">
<select id="destination" class="dest_city">
<option value="19.089681, 72.865486">Mumbai</option>
<option value="21.090766, 79.054833">Nagpur</option>
</select>
</div>
<div class="org_sel">
<select id="destination1" class="org_city">
<option value="39.882300, 116.289431">Beijing</option>
<option value="59.923152, 10.688673">Oslo</option>
</select>
</div>
<div class="dest_sel">
<select id="destination2" class="dest_city">
<option value="59.367975, 18.115430">Stockholm</option>
<option value="56.199034, 92.734745">Krasnoyarsk</option>
</select>
</div>
</div>
</html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDgO1x-l4g_ofV7Q26EzJPA7tYDcKhpauQ&libraries=places&callback=initMap"></script>
<script>
var cnt = 0;
var locations = [];
var flightPathCoordinates = [];
function initMap(org, dest1, dest2, dest3) {
map = new google.maps.Map(document.getElementById('map'), {
zoom: 3,
center: {lat: 28.615809, lng: 77.217683},
mapTypeId: 'terrain'
});
if(cnt==0)
{
flightPathCoordinates = [
{lat: 28.238897, lng: 2.227514},
{lat: 19.089681, lng: 72.865486},
{lat: 39.882300, lng: 116.289431},
{lat: 59.367975, lng: 18.115430}
];
}else
{
var org_arr = org.split(', ');
var dest_arr = dest1.split(', ');
var dest1_arr = dest2.split(', ');
var dest2_arr = dest3.split(', ');
flightPathCoordinates = [];
flightPathCoordinates = [
{lat: org_arr[0], lng: org_arr[1]},
{lat: dest_arr[0], lng: dest_arr[1]},
{lat: dest1_arr[0], lng: dest1_arr[1]},
{lat: dest2_arr[0], lng: dest2_arr[1]}
];
}
cnt = cnt + 1;
flightPath = new google.maps.Polyline({
path: flightPathCoordinates,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2
});
console.log(flightPath);
flightPath.setMap(map);
}
google.maps.event.addDomListener(window, "load", initMap);
jQuery(document).on('change','#origin',function (event) {
var org = $('#origin').val();
var dest = $('#destination').val();
var dest1 = $('#destination1').val();
var dest2 = $('#destination2').val();
initMap(org, dest, dest1, dest2);
});
jQuery(document).on('change','#destination',function (event) {
var org = $('#origin').val();
var dest = $('#destination').val();
var dest1 = $('#destination1').val();
var dest2 = $('#destination2').val();
initMap(org, dest, dest1, dest2);
});
jQuery(document).on('change','#destination1',function (event) {
var org = $('#origin').val();
var dest = $('#destination').val();
var dest1 = $('#destination1').val();
var dest2 = $('#destination2').val();
initMap(org, dest, dest1, dest2);
});
jQuery(document).on('change','#destination2',function (event) {
var org = $('#origin').val();
var dest = $('#destination').val();
var dest1 = $('#destination1').val();
var dest2 = $('#destination2').val();
initMap(org, dest, dest1, dest2);
});
</script>
html,
身体,
#地图{
身高:90%;
宽度:90%;
边际:0px;
填充:0px
}
.org{
左缘:8%;
溢出:隐藏;
位置:绝对位置;
顶部:10px;
宽度:92%;
}
.org_sel{
浮动:左;
右边距:30px;
宽度:12%;
}
.org_城市{
宽度:200px;
高度:34px;
}
德斯特胡城酒店{
宽度:200px;
高度:34px;
}
目的地选择{
浮动:左;
右边距:30px;
宽度:12%;
}
地图演示
阿尔及利亚
纽约
孟买
那格浦尔
北京
奥斯陆
斯德哥尔摩
克拉斯诺亚尔斯克
var-cnt=0;
var位置=[];
var flightPathCoordinates=[];
函数initMap(组织、目的地1、目的地2、目的地3){
map=new google.maps.map(document.getElementById('map'){
缩放:3,
中心:{lat:28.615809,lng:77.217683},
mapTypeId:'地形'
});
如果(cnt==0)
{
flightPathCoordinates=[
{lat:28.238897,lng:2.227514},
{lat:19.089681,lng:72.865486},
{lat:39.882300,lng:116.289431},
{拉丁美洲:59.367975,液化天然气:18.115430}
];
}否则
{
var org_arr=org.split(',');
var dest_arr=dest1.split(',');
var dest1_arr=dest2.split(',');
var dest2_arr=dest3.split(',');
flightPathCoordinates=[];
flightPathCoordinates=[
{lat:org_arr[0],lng:org_arr[1]},
{lat:dest_arr[0],lng:dest_arr[1]},
{lat:dest1_arr[0],lng:dest1_arr[1]},
{lat:dest2_arr[0],lng:dest2_arr[1]}
];
}
cnt=cnt+1;
flightPath=新建google.maps.Polyline({
路径:flightPathCoordinates,
测地线:正确,
strokeColor:“#FF0000”,
笔划不透明度:1.0,
冲程重量:2
});
console.log(flightPath);
flightPath.setMap(map);
}
google.maps.event.addDomListener(窗口“加载”,initMap);
jQuery(文档).on('change','#origin',函数(事件){
var org=$('#origin').val();
var dest=$('#destination').val();
var dest1=$('#destination1').val();
var dest2=$('#destination2').val();
initMap(组织、目的地、目的地1、目的地2);
});
jQuery(文档).on('change','#destination',函数(事件){
var org=$('#origin').val();
var dest=$('#destination').val();
var dest1=$('#destination1').val();
var dest2=$('#destination2').val();
initMap(组织、目的地、目的地1、目的地2);
});
jQuery(文档).on('change','#destination1',函数(事件){
var org=$('#origin').val();
var dest=$('#destination').val();
var dest1=$('#destination1').val();
var dest2=$('#destination2').val();
initMap(组织、目的地、目的地1、目的地2);
});
jQuery(文档).on('change','#destination2',函数(事件){
var org=$('#origin').val();
var dest=$('#destination').val();
var dest1=$('#destination1').val();
var dest2=$('#destination2').val();
initMap(组织、目的地、目的地1、目的地2);
});
但当我从下拉列表中更改点时,它不会反映在地图上。。映射受到干扰。当我执行示例代码时,我可以看到以下错误消息:
InvalidValueError:在索引0处:不是LatLng或LatLngLiteral:在属性lat中:不是数字
这意味着您应该将LatlnLiteral对象属性中的字符串转换为数字:
flightPathCoordinates = [
{lat: parseFloat(org_arr[0]), lng: parseFloat(org_arr[1])},
{lat: parseFloat(dest_arr[0]), lng: parseFloat(dest_arr[1])},
{lat: parseFloat(dest1_arr[0]), lng: parseFloat(dest1_arr[1])},
{lat: parseFloat(dest2_arr[0]), lng: parseFloat(dest2_arr[1])}
];
在您的实现中还有一件事需要解决。当前,您正在调用initMap(org、dest、dest1、dest2)代码>在每个更改事件中。这将创建mapnew google.maps.map(document.getElementById('map')的新实例…
每次选择某个对象时。请注意,地图的每个新实例都会计入您的配额,因此您可以使用此实现来使用每日配额。我建议保留一个地图实例和一个多段线实例,您可以在选择某个对象后进行更新
看看修改后的示例
var映射,flightPath;
var-cnt=0;
var位置=[];
var flightPathCoordinates=[];
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
缩放:3,
中心:{lat:28.615809,lng:77.217683},
mapTypeId:'地形'
});
flightPathCoordinates=[
{lat:28.238897,lng:2.227514},
{lat:19.089681,lng:72.865486},
{lat:39.882300,lng:116.289431},
{拉丁美洲:59.367975,液化天然气:18.115430}
];
flightPath=新建google.maps.Polyline({
路径:flightPathCoordinates,
测地线:正确,
strokeColor:“#FF0000”,
笔划不透明度:1.0,
冲程重量:2
});
flightPath.setMap(map);
调整边界();
}
功能更新方案(组织、目的地1、目的地2、目的地3){
var org_arr=org.split(',');
var dest_arr=dest1.split(',');
var dest1_arr=dest2.split(',');
var dest2_arr=dest3.split(',');
flightPathCoordinates=[
{lat:parseFloat(org_arr[0]),lng:parseFloat(org_arr[1]),
{lat:parseFloat(dest_arr[0]),lng:parseFloat(dest_