我在谷歌地图的JavaScript API中从google.maps.Polyline类收到某种奇怪的行为。
我想要实现的很简单 - 在不断更新的LatLngLiteral数组中在地图上绘制折线。
问题 - google.maps.Polyline的“path”属性未初始化,因此Polyline不可见。奇怪的是,无论我在google.maps.Polyline的初始化中包含“path”属性,加载地图后,这样的属性都不存在(尽管创建了Polyline对象,我可以访问它的其他属性。)
我得到的确切错误:“无法在ok(map.js:74)”中读取未定义的属性'push'。我尝试通过setPath()方法设置值“path”,我尝试使用LatLng类,尝试了MVCArray类 - 没有任何作用。提前感谢你的帮助!代码如下。 (下面的代码没有优化,我只是开始这个项目的基本功能)
function loadMap(){
var options = {
zoom : 15,
center : {lat:42.553080288955805, lng: 11.25}
};
map = new google.maps.Map(document.getElementById("test-map"),options);
player = new google.maps.Marker(
{
map: map,
position: {lat:42.553080288955805, lng: 11.25},
title: "This is you!",
label: {
text: "You are here!",
color: "rgb(50,50,255)",
fontFamily: "Helvetica, sans-serif",
fontWeight: "bold"
}
});
//initializing path variable
pathArray = [
new google.maps.LatLng(-42, 11),
new google.maps.LatLng(-43, 12),
new google.maps.LatLng(-44, 15)
];
playerPath = new google.maps.Polyline({
map: map,
path: pathArray, //the value here is not assigned for some reason
strokeColor: "orange", //this property and value is assigned and
//accessible after the map was loaded
visible: true
});
}
let options2 = {
enableHighAccuracy : true,
timeout : 10000,
maximumAge : 30000
};
var positionWatcher = navigator.geolocation.watchPosition(ok,null,options2);
function ok(p){
player.setPosition({lat:p.coords.latitude, lng:p.coords.longitude}); // works ok
playerPath.path.push({lat:p.coords.latitude, lng:p.coords.longitude});
//above line provides the mentioned error
}
答案 0 :(得分:0)
由于没有对此进行回复,我深入挖掘并找到了一个有效的解决方案,但是在Polyline实例创建过程中未创建为什么" path" 属性的问题仍然让我感到困惑。
在任何情况下," path" 属性似乎只接受 google.maps.MVCArray([LatLng,LatLng])作为值在初始化期间。 JavaScript API说它应该接受一个带有LatLng或LatLngLiteral作为元素的常规Array对象,但它没有(至少在我的代码中,这非常简单)。
因此,如果你有同样的问题,我建议像这样初始化路径:
pathArray = new google.maps.MVCArray([
new google.maps.LatLng(-42, 11),
new google.maps.LatLng(-43, 12),
new google.maps.LatLng(-44, 15)
]);
playerPath = new google.maps.Polyline({
map: map,
path: pathArray
});