google.maps.Polyline(JavaScript API)“path”属性未初始化

时间:2017-12-05 11:43:26

标签: javascript api maps

我在谷歌地图的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
}

1 个答案:

答案 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
    });