Google map api,uncaught error,marker.setMap不是函数

时间:2017-05-04 10:47:25

标签: javascript google-maps-api-3

我正在使用MeteorJS 1.4.4.2 + ReactJS构建交通堵塞应用程序。我使用大气谷歌地图包之前和2流行的谷歌地图npm包(istarkov和tomchentw),这些包工作正常,但它没有我想要的,所以相反,我直接使用谷歌地图api,以获得它的完整功能

我希望能够在地图上删除所选标记

学尝试:

// Map functions in the same file as mapInit function

let addMarker = ( location )=> {

    let marker = new google.maps.Marker({

        position: location,
        map: map,
        animation: google.maps.Animation.DROP,
        draggable: true

    }).addListener( 'click', ( e )=> removeMarkerOnClick( e ) );

    markers.push( marker );

};

let removeMarkerOnClick( marker )=> {

    let lat = marker.latLng.lat (),
        lng = marker.latLng.ln (),
        position = {};

    markers = markers.reduce(( new_markers, marker )=> {

        position = marker.f.position;

        position.lat() !== lat && position.lng() !== lng ?

            new_markers.push( marker ) : marker.setMap( null );

        return new_markers;

    }, markers);

}

window.initMap = () => {

    //.... body hidden

    map.addListener( 'click', ( e )=> addMarker( e.latLng ) );

}

来自客户端控制台的错误:

Uncaught TypeError:
    MapFunctions.jsx:74
    marker.setMap is not a function
     at http://localhost:3000/app/app.js?hash=1f01aac45aac6af0dd009bc4623183b2511f62bf:419:20
at Array.reduce (native)
at removeMarkerOnClick (http://localhost:3000/app/app.js?hash=1f01aac45aac6af0dd009bc4623183b2511f62bf:413:23)
at _.Ge.<anonymous> (http://localhost:3000/app/app.js?hash=1f01aac45aac6af0dd009bc4623183b2511f62bf:403:16)
at Object._.z.trigger (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:102:121)
at XT.<anonymous> (https://maps.googleapis.com/maps-api-v3/api/js/28/14/marker.js:19:348)
at _.pG._.z.trigger (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:102:121)
at _.pG.onclick (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:40:81)
at _.Bu._.z.trigger (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:102:121)
at _.Bu.<anonymous> (https://maps.googleapis.com/maps/api/js?key=AIzaSyB1-fwP96l-_VAicaDGRNMmEU93TY4fcGs&libraries=places&callback=initMap:40:81)

解决方案尝试:

  1. 使用setOnMap(null)也行不通,同样的TypeError,setOnMap()不是函数

  2. 使用marker.setVisibility(false)也不起作用,同样的TypeError,...不是函数

  3. 我在Google周围搜索了一个半小时但还没有找到任何内容,所以请帮助并非常感谢您花时间阅读本文。

2 个答案:

答案 0 :(得分:0)

您正在函数调用中传递事件。

}).addListener( 'click', ( e )=> removeMarkerOnClick( e ) ); 

you should do:
}).addListener( 'click', ( e )=> removeMarkerOnClick( marker ) );

答案 1 :(得分:0)

如果有人试图找到解决方法,请不要打扰。 当我尝试搜索Marker对象时,我尝试使用标记的其他示例,控制台记录标记对象以检查差异,然后我发现我的标记对象位于另一个顶级对象中,因此为了访问setMap功能,我必须去一个较低的水平。 的解决方案:

let removeMarkerOnClick( marker )=> {

    let lat = marker.latLng.lat (),
        lng = marker.latLng.ln (),
        position = {};

    markers = markers.reduce(( new_markers, marker )=> {

        position = marker.f.position;

        position.lat() !== lat && position.lng() !== lng ?

        new_markers.push( marker ) : marker.f.setMap ( null ); // Change this line from marker.setMap( null ) to marker.f.setMap ( null )

        return new_markers;

    }, markers);

}