保存在变量/本地存储中的地理位置数据

Posted

技术标签:

【中文标题】保存在变量/本地存储中的地理位置数据【英文标题】:Geolocation data saved in a variable/localstorage 【发布时间】:2013-11-19 23:36:31 【问题描述】:

我的 Geolocation API 有问题 -.-'

我正在使用 FirefoxOS 样板应用程序 (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());

cmets 之后的新代码。我不知道这个解决方案的性能如何...... 我已将 console.log 替换为 alert 并且我得到未定义然后在某些情况下不是异步的。

编辑:22/11: 修复了while

【问题讨论】:

【参考方案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 函数中进行。

如果不是您想要的,请告诉我。

【讨论】:

uhm 像这样:function save_location(geo) //save the data with cookie,local-storage, data tag ecc function get_location() //return the data function load_location() navigator.geolocation.getCurrentPosition(function (position) save_location([[position.coords.latitude, position.coords.longitude]]); ); 唯一的问题是异步,我必须想一个解决方案等待 get_location 中的响应 你没有像你的代码示例那样,你传递给 getCurrentPosition 的匿名函数只会在成功时调用,所以只有当你能够获得地理位置时。在这种情况下, save_location 只有当你得到坐标时才会被调用。在我的示例中,我的 doSomethingWithGeo 函数也是如此。试试看,你会看到会发生什么。 正如我之前所说,由于 getCurrentPosition 是异步的,因此您无法在尝试加载位置后立即调用 get_location,因此这就是您需要回调函数的原因。您要么从回调函数调用 get_location,要么在尝试检索之前检查是否保存了数据。

以上是关于保存在变量/本地存储中的地理位置数据的主要内容,如果未能解决你的问题,请参考以下文章

参数变量存储在内存中的啥位置?

如何在本地存储中保存图像位置

在 angular/ngrx 应用程序中将状态保存到本地存储的逻辑的位置

wps保存的文件在哪里

java中静态变量在内存中的位置

变量进阶