これは私がテストページで使用している私の単純なコードです:しかし、アドレスを見つけるのに何年もかかります...どうしてですか?私は何か間違ったことをしていますか?
<script src="http://maps.google.com/maps?hl=it&file=api&v=2&sensor=true&key=*xxxxxx*" type="text/javascript"></script>
<script type="text/javascript">
var map;
var geocoder;
function addAddressToMap(response)
{
if (!response || response.Status.code != 200)
{
alert("Sorry, we were unable to geocode that address");
}
else
{
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
document.getElementById('address').innerHTML = place.address;
}
}
function searchGeolocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position)
{
geocoder = new GClientGeocoder();
document.getElementById('latitude').innerHTML = position.coords.latitude;
document.getElementById('longitude').innerHTML = position.coords.longitude;
coordinates = position.coords.latitude+","+position.coords.longitude;
geocoder.getLocations(coordinates, addAddressToMap);
});
}else
{
document.getElementById('latitude').innerHTML = "Unknown";
document.getElementById('longitude').innerHTML = "Unknown";
document.getElementById('address').innerHTML = "Unknown";
alert("I'm sorry, but geolocation services are not supported by your browser.");
}
}
</script>
<br/>
latitude = <div id="latitude">loading...</div>
<br/>
longitude = <div id="longitude">loading...</div>
<br/>
address = <div id="address">loading...</div>
<br/>
<script type="text/javascript">
searchGeolocation();
</script>
ブラウザによって速度が大きく異なることがわかりました。ほぼ瞬時にジオロケーションをテストしてきました。 Firefoxは地獄のように遅く(多くの場合、機能しません)、サファリは2番目です。うまくいけば、彼らは実装を修正して、クロムと同じくらい速くなるでしょう
えーと、実際にジオロケーションを行っています!
それをスピードアップするには、キャッシュされた結果を利用するための追加のパラメーターとタイムアウトを提供することを検討してください。
モバイルデバイスの位置情報サービスモードを確認してください。精度がデバイスで高ステータスになっていることを確認してください。高精度モードでは、GPS、WIFI、またはモバイルネットワークを使用して場所を検索します。
低モードまたはGPSのみのモードを選択した場合、それは永遠にかかります。
また、地理的位置オプションを試して、タイムアウトとキャッシュオプションを指定します。
いくつかの通話は、終了するまでに数秒かかる場合があります。たとえば、navigator.geolocation.getCurrentPosition
Safariでは最大5秒(作業中)かかります。
私はこれに数時間苦労してきましたが、ブラウザごとに異なる結果であることがわかりました。つまり、コードでは完全に制御できないものですが、これらのオプションをgetlocation.getCurrentPosition
関数に追加することである程度の進歩を遂げることができます。コール:
enableHighAccuracy: false,
timeout: 5000,
maximumAge: Infinity
各オプションの意味についてもっと読むことができます ここ