使用 PhoneGap 和 googlemaps 插件更新位置跟踪的标记位置

Posted

技术标签:

【中文标题】使用 PhoneGap 和 googlemaps 插件更新位置跟踪的标记位置【英文标题】:Updating Marker Position for Location Tracking with PhoneGap and googlemaps plugin 【发布时间】:2015-04-17 02:40:00 【问题描述】:

我正在尝试重新设计 phonegap 应用以使用 googlemaps 插件和 v2 的 google maps API。

我正在努力更新标记位置,这似乎在 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】:

好的,事实证明正在创建标记变量,但没有像setCurrentPosition() 那样及时创建标记,它正在与setMarkerPosition() 异步调用设置标记。完全删除displayAndWatch(),然后从setCurrentPosition() 的回调中调用setMarkerPosition() 似乎是解决办法。

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
                                            ));


            

【讨论】:

以上是关于使用 PhoneGap 和 googlemaps 插件更新位置跟踪的标记位置的主要内容,如果未能解决你的问题,请参考以下文章

我的 googlemap 地理位置不起作用

在 jquery mobile / phonegap 中重新加载外部脚本(即谷歌地图)

使用 phonegap 构建服务的插件 plugin.google.maps 在 ios 上不起作用

在 PhoneGap iOS App 中使用 Google Maps JavaScript API v3

PhoneGap/Cordova 打开外部链接到 Safari 而不是全屏 inApp

使用 KissXML 和 armv7 GoogleMap