Geolocation 地理位置有时给出奇怪的位置

Geolocation 地理位置有时给出奇怪的位置,geolocation,wifi,sencha-touch,ipod-touch,3g,Geolocation,Wifi,Sencha Touch,Ipod Touch,3g,这是我们在Sencha Touch应用程序中用于获取用户当前位置的代码。现在,我在我的Droid HTC Eris上使用3G连接测试了这段代码,它给了我一个离我6英里的位置,这很好,我可以接受,我甚至可以接受多一点 然而,在使用Wifi连接到家庭路由器的iPodtouch上进行测试,我们距离当前位置147英里。现在,如果我们这里的路由器有一些奇怪的IP地址或者类似的东西,这可能是有意义的,如果它不返回到IP,这段代码实际上用来查找位置,但我直接从谷歌测试地理位置,从笔记本电脑也连接到我们这里的w

这是我们在Sencha Touch应用程序中用于获取用户当前位置的代码。现在,我在我的Droid HTC Eris上使用3G连接测试了这段代码,它给了我一个离我6英里的位置,这很好,我可以接受,我甚至可以接受多一点

然而,在使用Wifi连接到家庭路由器的iPodtouch上进行测试,我们距离当前位置147英里。现在,如果我们这里的路由器有一些奇怪的IP地址或者类似的东西,这可能是有意义的,如果它不返回到IP,这段代码实际上用来查找位置,但我直接从谷歌测试地理位置,从笔记本电脑也连接到我们这里的wifi,它使我们不到1英里的开销


什么样的情况会发生这种情况?在地理定位技术进一步发展之前,这是我们不得不忍受的吗?如果是这样,没关系,我只是想知道我们是否可以做些什么来改善这一点。147英里之外有点疯狂,考虑到我们尝试过的所有其他来源都将我们限制在最大10英里以内。

我能想到的唯一一件事是谷歌自己的数据库中有一些更正列表。可能发生的情况是,您的ip已注册到距离您147英里的holdco。例如,如果谁是我的知识产权,它是注册到一个控股公司,这是大约50英里以外的我。未经更正的数据库,如您通常在网上购买的数据库,会显示该城镇的情况。谷歌,不管谁不知道。

这是有道理的。所以基本上你的意思是,当我把我的IP发送到谷歌或者其他什么东西,或者一个修正的数据库,它会给我尽可能正确的位置,但是如果我使用的是Sencha Touch的地理定位框架,它可能不会被修正-只是使用简单的方法吗?是的。一两年前,我们在工作时开发了一款手持GPS应用程序,我们就是这样做的。我们从手持设备上获得了实际的GPS位置,这是一个geocache类型的手持设备,仍然需要根据本地校准站进行校正。我想我会等待地理位置库都内置了校正:因为这是一些新的,可能需要一段时间,哈哈。谢谢你的帮助。
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
        }