2016-08-29 12 views
0

私はTrimble GNSSステータスアプリを使用してBluetoothを搭載したTrimble ProXT GNSSレシーバをAndroid用に接続できます。アプリはベースユニットの位置を出力します。デベロッパーオプションでモックロケーションプロバイダとしてアプリを選択すると、すべてのネイティブアプリで効果的ですが、html5ジオロケーションAPIを使用しているウェブアプリケーションを使用しようとすると失敗します。私のGISデータ集録アプリケーションはウェブベースであり、私はこれを動作させる必要があります!モックGPSロケーションとAndroid用Chrome

答えて

1

私はこの同じ問題に遭遇したとトリンブルからいくつかの助けを得ることができた:

我々は、同様にこの動作を見てきたところだと、私は、あなたは、Android上で作業していると仮定しています。あなたが気づいたことは、残念ながらGoogle Chromeの奇妙な行動特性です。 Firefoxブラウザ(またはその他のブラウザ)を使用して同じmaps.google.comにアクセスすると、その場所が適切に表示されます。

位置情報APIのChromeの実装では、すべての場合にモックの位置は処理されません。これについては現在調査中ですが、Chrome以外のブラウザの回避策を除いて、これまでのところ正式な解決策はありません。

1

Trimbleの「GNSSステータス」アプリをR2と併用すると、ipad + chromeと様々なアンドロイド+クロームの組み合わせが同じ問題になります。FirefoxとSafariは正常に動作します。簡単なテストのための

<DOCTYPE html> 
<html> 
    <head> 
    <style> 
     body { 
      background: white; 
      font-family: Arial, Helvetica, sans-serif; 
      font-size: 1em; 
      color: #000; 
     } 
     @media all and (max-width: 1000px) { 
      body { font-size: 200%;} 
     } 
    </style> 
    <script> 
     function init() { 
     var compass = document.getElementById('compass'); 
     var lat = document.getElementById('lat'); 
     var lon = document.getElementById('lon'); 
     var acc = document.getElementById('acc'); 
     var alt = document.getElementById('alt'); 
     var altAcc = document.getElementById('altAcc'); 
     var err = document.getElementById('err'); 
     var heading = document.getElementById('heading'); 
     var speed = document.getElementById('speed'); 
     var timestamp = document.getElementById('timestamp'); 

     if(window.DeviceOrientationEvent) { 
      window.addEventListener('deviceorientation', function(event) { 
       var alpha; 
       if(event.webkitCompassHeading) { 
        alpha = event.webkitCompassHeading; 
       } 
       else { 
        alpha = event.alpha; 
       } 
       compass.innerHTML = alpha; 
      }, false); 
     } 

     if(navigator.geolocation) { 
      var opts = { 
         enableHighAccuracy: true, 
         timeout: 6000, 
         maximumAge: 5000 
         }; 
      navigator.geolocation.watchPosition(
        updateLocation, 
        handleLocationError, 
        opts 
      ); 
     } 
     } 

    function updateLocation(position) { 
     lat.innerHTML = position.coords.latitude; 
     lon.innerHTML = position.coords.longitude; 
     acc.innerHTML = position.coords.accuracy; 
     alt.innerHTML = position.coords.altitude; 
     altAcc.innerHTML = position.coords.altitudeAccuracy; 
     heading.innerHTML = position.coords.heading; 
     speed.innerHTML = position.coords.speed; 
     var t = new Date(position.timestamp).toString(); 
     timestamp.innerHTML = t; 
     addMsg(t); 
    } 

    function handleLocationError(e){ 
     var msg = e.code+': '; 
     switch (e.code) { 
      case error.PERMISSION_DENIED: 
       msg += 'Permission was denied'; 
       break; 
      case error.POSITION_UNAVAILABLE: 
       msg +='Position is currently unavailable.'; 
       break; 
      case error.PERMISSION_DENIED_TIMEOUT: 
       msg += 'User took to long to grant/deny permission.'; 
       break; 
      case error.UNKNOWN_ERROR: 
       msg += 'An unknown error occurred.'; 
       break; 
     } 
     addMsg(msg); 
    } 

    function addMsg(msg){ 
     err.appendChild(document.createTextNode('message: '+ msg)); 
     err.appendChild(document.createElement("br")); 
    } 
    </script> 
    </head> 
    <body onload="init()" > 
     <p>compass: <span id="compass"></span> deg</p> 
     <hr> 
     <p>lat: <span id="lat"></span> deg</p> 
     <p>lon: <span id="lon"></span> deg</p> 
     <p>acc: <span id="acc"></span> m</p> 
     <p>alt: <span id="alt"></span> m +msl</p> 
     <p>alt. acc: <span id="altAcc"></span> m</p> 

     <p>heading: <span id="heading"></span> deg</p> 
     <p>speed: <span id="speed"></span> m/s</p> 
     <p>timestamp: <span id="timestamp"></span></p> 
     <hr> 
     <p>messages:</p> 
     <div id="err"></div> 
    </body> 
</html> 
関連する問題