2011-06-30 19 views
0
var initialLocation; 
     var siberia = new google.maps.LatLng(60, 105); 
     var newyork = new google.maps.LatLng(40.69847032728747, -73.9514422416687); 
     var browserSupportFlag = new Boolean(); // Try W3C Geolocation (Preferred) 
     if (navigator.geolocation) { 
      browserSupportFlag = true; 
      navigator.geolocation.getCurrentPosition(function(position) { 
       initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); // THERES OUR LAT/LONG VALUES 
       ajaxPost(initialLocation); 
      }, 
      function() { 
       handleNoGeolocation(browserSupportFlag); 
      }); // Try Google Gears Geolocation 
     } else if (google.gears) { 
      browserSupportFlag = true; 
      var geo = google.gears.factory.create('beta.geolocation'); 
      geo.getCurrentPosition(function(position) { 
       initialLocation = new google.maps.LatLng(position.latitude, position.longitude); // THERES OUR LAT/LONG VALUES 
       ajaxPost(initialLocation); 
      }, 
      function() { 
       handleNoGeoLocation(browserSupportFlag); 
      }); // Browser doesn't support Geolocation 
     } else { 
      browserSupportFlag = false; 
      handleNoGeolocation(browserSupportFlag); 
     } 
     function handleNoGeolocation(errorFlag) { 
      if (errorFlag == true) { 
       initialLocation = new google.maps.LatLng(geoip_latitude(), geoip_longitude()); // THERES OUR LAT/LONG VALUES 
       ajaxPost(initialLocation); 
       navigator.notification.alert('Geolocation service failed', // message 
       'Geolocation Error!', // title 
       'OK' // buttonName 
       ); 
      } else { 
       initialLocation = new google.maps.LatLng(geoip_latitude(), geoip_longitude()); // THERES OUR LAT/LONG VALUES 
       ajaxPost(initialLocation); 
       navigator.notification.alert("Your browser doesn't support geolocation. We've placed you in Siberia.", // message 
       'Browser Error!', // title 
       'OK' // buttonName 
       ); 
      } // THERES OUR LAT/LONG VALUES 
     } 

これは私たちのSencha Touchアプリケーションでユーザーの現在の位置を取得するために使用するコードです。さて、私はDroid HTC Erisで3G接続を使ってこのコードをテストしました。それは自分から6マイル離れたところに私に距離を与えました。これは問題ありません。時折奇妙な位置を与える地理位置

しかし、Wifiを使ってiPod Touchでテストして、自宅のルータに接続すると、私たちは現在の場所から147マイル離れています。さて、私たちのルーターがここで奇妙なIPアドレスなどを持っていたら意味があるかもしれませんが(IPに戻ってこないならこのコードは実際に場所を見つけるために使用します)、私はgeolocationをgoogleから直接テストしますノートパソコンもここで私たちのWiFiに接続し、それは私たちをオーバーヘッドから1マイル以下にします。

どのような状況が起こる可能性がありますか?ジオロケーションがさらに進歩するまで、私たちが生きていなければならないものですか?そうだとすれば、これを改善するためにできることがあるかどうかを知りたいだけです。私たちが試したすべての他の情報源が10以下であることを考慮すると、147マイル離れたところから少し狂っています。

答えて

0

私が考えることができる唯一のことは、Googleには独自のデータベースにいくつかの修正リストがあるということです。おそらく起こっていることは、あなたのIPアドレスがあなたから147マイル離れたホールコに登録されていることです。例えば、私の知っているwhoisなら、私から約50マイル離れた持株会社に登録されています。通常はオンラインで購入するデータベースなどの修正されていないデータベースは、その町で私を示しています。 Google、そうでない人は

+0

これは意味があります。だからあなたの言っていることは、IPアドレスをGoogleや何か、あるいは修正されたデータベースに送ると、正しい位置に(正しいものとして)私に与えてくれるが、もし私がgeolocationフレームワークを使っているならSencha Touch、それは修正されない可能性があります - と簡単な方法を使用して? – slandau

+0

ああかなり。私たちは年前または2年前に仕事場でハンドヘルドGPSアプリをやっていました。私たちはハンドヘルド(geocacheタイプのハンドヘルド)から実際のGPS位置を取得し、ローカルの較正ステーションに基づいて修正する必要がありました。 – meteorainer

+0

私はジオロケーションライブラリがすべて訂正に組み込まれているのを待つつもりです:)これは少しでも新しいかもしれませんが、それは笑です。ご協力いただきありがとうございます。 – slandau