使用navigation.geolocation

时间:2016-08-11 14:44:41

标签: javascript google-chrome safari gps geolocation

我正在创建一个浏览器应用程序,其中一个功能是将用户放置在地图上,然后在周围区域搜索附近的"事物。"重要(并且要求)我尽可能准确,因为附近的位置对用户显示的内容有很大的不同。

为了将这个人放在地图上,我写了下面的代码(还有一些,但是我把这部分留下了)。但是,在每种情况下,我都会看到从我的位置到最远几百米的精确度范围。对于原因,似乎没有任何押韵或理由。

我在测量时在外面。我与任何WiFi断开连接(但我的WiFi已启用)。我在Safari和Chrome上测试iOS设备,我正在测试Chrome上的Android设备。所有设备的结果都相似。

我注意到的一件事是我看到手机正在向位置发出请求。我看到GPS符号在我的Android设备上显示(简要)。我可以看到Safari和Chrome已在Apple位置设置中发出最近的位置请求。此外,当我将用户导航到该位置(分为Google地图或Apple地图等应用)时,位置非常准确并立即找到。

我在这里做错了吗?我能做些什么来提高准确度吗?

    // Attempt to get low-accuracy location if high cannot be retrieved.
    function handleLocationError_high(error) {
        if(error.code == error.TIMEOUT) {
            // Attempt low accuracy if a timeout occurs.
            navigator.geolocation.getCurrentPosition(
                locationSuccessCallback,
                handleLocationError_low,
                {timeout: 10000, maximumAge: 0, enableHighAccuracy: false});
        } else {
            handleLocationError_low(error);
        }
    }

    // Handle the error if location cannot be retrieved at all.
    function handleLocationError_low(error) {
        console.log('No location found!');
    }

    // Geolocation callback if there is success in getting the golocation (high or low accuracy).
    function locationSuccessCallback(position) {
        var pos = {
            lat: position.coords.latitude,
            lng: position.coords.longitude
        };
        // ...place the user on the map.
    }

    // Try HTML5 geolocation.
    // Test for support of geolocation. If it is not supported, error.
    // Next, attempt to get high accuracy (GPS) position. If that times out, get the low accuracy position.
    if(!navigator.geolocation) {
        handleLocationError_low();
        return;
    }
    navigator.geolocation.getCurrentPosition(
        locationSuccessCallback, 
        handleLocationError_high,
        {timeout: 5000, maximumAge: 0, enableHighAccuracy: true});

0 个答案:

没有答案