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,这个代码实际上用于查找位置),这可能是有道理的,但我直接从谷歌测试地理定位笔记本电脑也在这里连接到我们的 wifi,它使我们距离头顶不到 1 英里。

什么样的情况会导致这种情况发生?在地理定位进一步发展之前,这是我们必须忍受的吗?如果是这样,那很好,我只是想知道我们是否可以做些什么来改善这一点。147 英里外有点疯狂,考虑到我们尝试过的所有其他来源,我们都在 10 英里以内。

4

1 回答 1

0

我唯一能想到的是谷歌在它自己的数据库中有一些更正列表。可能发生的情况是您的 ip 已注册到距离您 147 英里的控股公司。例如,如果谁是我的 IP,则它已注册到距离我约 50 英里的控股公司。未更正的数据库(例如您通常在网上购买的数据库)显示我在那个城镇。谷歌,谁没有。

于 2011-06-30T00:17:52.783 回答