Геолокация иногда дает странное положение - PullRequest
0 голосов
/ 30 июня 2011
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 для получения текущей позиции пользователя. Теперь я протестировал этот код, используя соединение 3G на своем Droid HTC Eris, и он дал мне местоположение в 6 милях от меня, и это нормально, я могу с этим смириться, я мог бы даже жить с немного большим количеством *. 1002 *

Тем не менее, тестирование на iPod Touch с использованием Wi-Fi, подключенного к нашему домашнему маршрутизатору, поставило нас в 147 милях от нашего текущего местоположения. Теперь, это может иметь смысл, если у нашего маршрутизатора есть какой-то странный IP-адрес или что-то в этом роде (с этим кодом на самом деле используется поиск местоположения, если он не возвращается к IP), но я тестирую геолокацию прямо из Google из Ноутбук также подключен к нашему Wi-Fi здесь, и это ставит нас менее чем в 1 миле от накладных расходов.

В какой ситуации это может произойти? Это то, с чем нам придется жить, пока геолокация не продвинется дальше? Если это так, это хорошо, я просто хочу знать, можем ли мы что-то сделать, чтобы улучшить это. 147 миль немного сумасшедшие, учитывая, что любой другой источник, который мы пробовали, ставит нас в пределах 10 макс.

1 Ответ

0 голосов
/ 30 июня 2011

Единственное, о чем я могу думать, - это то, что у Google есть некоторые исправления в своих собственных базах данных.Вероятно, происходит то, что ваш ip зарегистрирован в Holdco, который находится в 147 милях от вас.Например, если это мой IP-адрес, он зарегистрирован в холдинговой компании, которая находится примерно в 50 милях от меня.Не исправленные базы данных (например, те, которые вы обычно покупаете онлайн) показывают мне в этом городе.Google, кто бы не сделал.

...