为什么我的Wordpress地图插件上的地理位置不稳定?

时间:2019-06-06 17:15:20

标签: wordpress geolocation

我有一个基于wordpress的网站(aboutmyjourney.com),该网站使用Maps Marker Pro插件在火车上旅行时可以在地图上跟踪和显示用户的位置。 (“地图标记”显示带有点击按钮的地图,以打开/关闭位置显示)。从其行为,我可以看到启用了高精度(GPS)。

当我单击以开始跟踪火车旅程中的位置时,它可以在几分钟内正常运行,但随后常常变得不稳定-有时它更新很快,但有时却冻结了几分钟。听起来好像没有足够好的GPS信号来进行修复,也没有可用的移动网络天线杆位置,但是.....

...我还有一个完全独立的Android应用程序,可以跟踪位置。这会使用Google Play服务每20秒请求一个位置,然后让广播接收器侦听返回的位置响应。如果我在使用网站时让此应用运行,则地图上的位置不再冻结,而是每20秒作为发条定期更新。由此我得出以下结论:1. GPS /地理位置在我的移动设备上运行正常,并且2.我网站上的地图插件正在接收由我的应用触发的位置广播。

因此,对于我(新手网站开发人员)来说,似乎浏览器地理位置API并不总是提供定期的位置更新,即使我知道应该可以,因为我的应用程序的Android / Google Play服务地理位置可以定期进行可靠的位置定位。

我使用的浏览器是Chrome,可在Android设备上运行(我已经在多个设备上尝试过)。

有人可以帮助我了解这里的情况吗?是否有解决方法可以改善浏览器地理位置API的性能?


经过大量的实验,我发现了问题所在,并且找到了解决方法,以防万一它与其他人有关。

问题是mapsmarker插件仅使用粗略(手机信号塔)位置,无法启动高精度(GPS)。这导致位置不会更新,直到移动连接翻转到新的手机信号塔为止(这可能需要几分钟的时间),而且如果火车处于没有移动接收的死区中,则根本不会更新。

但是,插件确实可以响应由其他软件触发的任何位置定位广播。因此,解决方法是使用navigator.geolocation.watchPosition()包含一些单独的javascript代码,以启动高精度GPS定位。然后,地图插件会使用由此产生的频繁的GPS修复程序,并平稳,有规律地进行更新,完全没有问题。

如果它对像我这样的新手有帮助,我使用的代码如下:

主网页正文上的代码以创建一个按钮来打开和关闭GPS:

<a href="#" class="button1" id="trackbutton" onclick="trackToggle();">USE GPS</a>
在其他CSS中定义的

按钮1:

.button1 {
display: inline-block;
padding-left:15px;
padding-right:15px;
border-radius: 20px;
font-weight: bold;
font-size:12pt;
text-align:center;
background: red;
color:black;
}

按钮触发的代码段,用于打开和关闭GPS。调用最后两个代码段之一:

<script type="text/javascript">
var gpsTrack = new Boolean(false);
function trackToggle(){
    if (gpsTrack==false) {
        rptFind();
        gpsTrack=true;
    } else {
        stopFind();
        gpsTrack=false;
    };
};
</script>

打开GPS的代码段(在页面正文中定义为id =“ latlon”的点处以文本形式显示位置,并更改按钮文本)

<script type="text/javascript">
var posID=0;
var myLat=0;
var myLon=0;
var geoError = function(error) {
    if (error.code<3){//[0=unknown 1=disallowed 2=unavailable 3=timeout]
        alert("There was a problem with GPS tracking. Click the button to stop 
        GPS, then try again);
    }
};
var geoOptions = {
    enableHighAccuracy: true, 
    maximumAge: 1000, 
    timeout: 60000
};
var getpos=function(position){ 
    document.getElementById("trackbutton").innerHTML="STOP GPS";
    myLat=position.coords.latitude;
    myLon=position.coords.longitude;
    document.getElementById("latlon").innerHTML = "Postion Lat:"+position.coords.latitude+"  Lon:"+position.coords.longitude;
}
function rptFind(){
   if ("geolocation" in navigator){
   posID=navigator.geolocation.watchPosition(getpos,geoError,geoOptions);
   } else {
   alert("Your browser doesn't appear to support geolocation");
   }
}
</script>

代码段可关闭GPS :(清除位置显示并更改按钮文字)

<script type="text/javascript">
var stopOptions = {
    enableHighAccuracy: false, 
    maximumAge: 500, 
    timeout: 1000
};
var stopError = function(error) {//ignore error
    };
var stopPos=function(position){
    document.getElementById("latlon").innerHTML = "";
    document.getElementById("trackbutton").innerHTML="USE GPS";
}
function stopFind(){
    navigator.geolocation.clearWatch(posID);
    navigator.geolocation.getCurrentPosition(stopPos,stopError,stopOptions);
}
</script>

0 个答案:

没有答案