使用PhoneGap和googlemaps插件更新标记位置以进行位置跟踪

时间:2015-02-16 14:43:55

标签: javascript google-maps cordova phonegap-plugins phonegap-gmaps-plugin

我正在尝试重新设计一个phonegap应用,以使用googlemaps插件和谷歌地图API的v2。

我正在努力更新标记位置,这似乎在v3中完美运行,但不适用于插件。

问题似乎是在调用setMarkerPosition()时,标记对象没有传递给它,所以我得到"无法调用未定义的方法setPosition"

我将currentPositionMarker设置为我脚本顶部的全局变量,虽然我在开始时在setCurrentPosition()中定义它,但我也尝试使用回调再次定义它,但是工作

道歉如果它的东西很傻,这是我的第一个JavaScript项目,所以对语言部分的理解仍然非常不完整,所以任何指针都非常赞赏。

我正在尝试的代码...

function initializeMap()
                {    map = plugin.google.maps.Map.getMap();
                    // map = new plugin.google.maps.Map(document.getElementById('map_canvas'), {
                    //   zoom: 13,

                    // });
                }

    function initLocationProcedure() {
                    initializeMap();
                    if (navigator.geolocation) {
                        navigator.geolocation.getCurrentPosition(
                            displayAndWatch,
                            errorCallback_highAccuracy,
                            {maximumAge:600000, timeout:5000, enableHighAccuracy: true});
                    } else {
                        alert("Your Phone does not support Geolocation");
                    }
                }

    function displayAndWatch(position) {
                    // set current position
                    setCurrentPosition(position);
                    // watch position
                    watchCurrentPosition();
                }

     function errorCallback_highAccuracy(position) {
      }           

    function watchCurrentPosition() {
                    var positionTimer = navigator.geolocation.watchPosition(
                        function (position) { setMarkerPosition(currentPositionMarker,position);
                        }, error, {maximumAge:600000, timeout:5000, enableHighAccuracy: true});
                }
    function error(){
                    }    

    function setMarkerPosition(marker, position) {
           marker.setPosition(
                        new plugin.google.maps.LatLng(
                            position.coords.latitude,
                            position.coords.longitude)

                    );
       }

    function setCurrentPosition(pos) {
    currentPositionMarker = map.addMarker({
      'position': new plugin.google.maps.LatLng(
                            pos.coords.latitude,
                            pos.coords.longitude
                        ),

                }, function(marker) {
        currentPositionMarker = marker;
                });
                    map.setCenter(new plugin.google.maps.LatLng(
                                                    pos.coords.latitude,
                                                    pos.coords.longitude
                                                ));
                }

1 个答案:

答案 0 :(得分:0)

好的,结果是正在创建标记var,但不及时setCurrentPosition(),这是设置标记与setMarkerPosition()异步调用。完全删除displayAndWatch(),然后从setMarkerPosition()的回调中调用setCurrentPosition()似乎是修复。

function setCurrentPosition(pos) {
                    map.addMarker({
  'position': new plugin.google.maps.LatLng(
                        pos.coords.latitude,
                        pos.coords.longitude
                    ),

            }, function(marker) {
                        currentPositionMarker = marker;
                        watchCurrentPosition();
            });
                map.setCenter(new plugin.google.maps.LatLng(
                                                pos.coords.latitude,
                                                pos.coords.longitude
                                            ));


            }