0

我的 Geolocation API 有问题 -.-'

我正在使用 FirefoxOS Boilerplate App ( https://github.com/robnyman/Firefox-OS-Boilerplate-App ) 创建一个简单的 html5 应用程序。

问题很简单:我希望从 API 获得的数据(纬度/经度)由函数作为数组返回。我发现的所有示例都使用动态数据来显示地图或插入 div(也是这个样板)。

navigator.geolocation.getCurrentPosition(function (position) {
            geolocationDisplay.innerHTML = "<strong>Latitude:</strong> " + position.coords.latitude + ", <strong>Longitude:</strong> " + position.coords.longitude;
            geolocationDisplay.style.display = "block";
        },
        function (position) {
            geolocationDisplay.innerHTML = "Failed to get your current location";
            geolocationDisplay.style.display = "block";
        });

这是地理定位的样板代码...

我想要一个像 get_location 这样的函数来返回数据,但是经过几天的测试/谷歌搜索我放弃了,我问你谁对我的 Javascript 中的回调/范围更有经验。

我评估过的选项是将数据保存在隐藏的 div 中或使用 localstorage/cookies 保存。

谢谢您的帮助!

编辑 20/11:

    function load_location() {
        navigator.geolocation.getCurrentPosition(save_location, handleLocationError, {maximumAge: 0, timeout: 1000, enableHighAccuracy: true});
    }

    function handleLocationError(error) {
        alert(error.code + ' - ' + error.message);
    }

    function save_location(position) {
        localStorage.clear();
        ls_save('latitude',position.coords.latitude);
        ls_save('longitude',position.coords.longitude);
        ls_save('accuracy',position.coords.accuracy);
        ls_save('altitude',position.coords.altitude);
        ls_save('altitudeAccuracy',position.coords.altitudeAccuracy);
        ls_save('heading',position.coords.heading);
        ls_save('speed',position.coords.speed);

    }

    function ls_save(key,value) {
        localStorage.setItem(key, value); 
    }

    function get_location() {
    while(typeof localStorage['latitude'] === 'string') {
        return localStorage.getItem("latitude");
    }
}

    load_location();
//Code
    console.log(get_location());

注释后的新代码。我不知道这个解决方案的性能如何......我已经用警报替换了console.log,我得到了未定义,那么在某些情况下不是异步的。

编辑:22/11: 修复了一段时间

4

1 回答 1

1

您可以通过执行以下操作将地理位置数据作为数组返回:

function doSomethingWithGeo(geo) {
    console.log(geo);
}

function get_location() {
    navigator.geolocation.getCurrentPosition(function (position) {
        doSomethingWithGeo([[position.coords.latitude, position.coords.longitude]]);
    });
}

当您调用 get_location 时,它将检索地理位置坐标,并使用您想要的数组调用函数 doSomethingWithGeo。如果要存储数据,可以在 doSomethingWithGeo 函数中进行。

让我知道它是否不是您想要的。

于 2013-11-20T02:49:44.563 回答