在javascript中分配地图坐标返回未定义

Posted

技术标签:

【中文标题】在javascript中分配地图坐标返回未定义【英文标题】:Assigning map co ordinates in javascript returns undefined 【发布时间】:2021-10-23 11:28:59 【问题描述】:
(async ( ) =>  
    async function foo() 
        navigator.geolocation.getCurrentPosition(success, error, options)
        
            var options = 
            enableHighAccuracy: true,
            timeout: 5000,
            maximumAge: 0
            ;
            
            function success(pos) 
            var crd = pos.coords;
            console.log('Your current position is:');
            console.log(`Latitude : $crd.latitude`);
            lat = crd.latitude;
            console.log(`Longitude: $crd.longitude`);
            long = crd.longitude;
            console.log(`More or less $crd.accuracy meters.`);
            return [lat, long];
            
            
            function error(err) 
            console.warn(`ERROR($err.code): $err.message`);
            
        ;
    ;
)
    

let result = await foo();
console.log(result);

 x = await result[1]
    console.log(x);

我试图从浏览器中获取地图坐标并将它们分配给变量,以便与其他坐标进行比较并找到与某个地方的接近度。 但它一直返回un

【问题讨论】:

您的代码创建了一个async => 函数,但它没有调用它。 为什么optionssuccesserror被包裹在一个块中? How to return the response from an asynchronous call foo 不返回任何内容 How do I convert an existing callback API to promises? 和 How to implement promises with the html5 Geolocation API? 【参考方案1】:

从您的问题中不清楚这些“其他”坐标来自何处,它们是硬编码的,还是从 cookie 或 localStorage 加载的,但此示例获取坐标并将它们保存到然后将数组保存到 localStorage 中,该数组在页面刷新时加载。

它使用一个 promise 来返回地理位置搜索的结果,以及一个用于 main 函数的异步方法。

注意:由于安全问题,这不会在 sn-p 中运行,但已经过全面测试。

const posArr = JSON.parse(localStorage.getItem('pos')) || [];

function getPos(options)  
  return new Promise((res, rej) => 
    if (navigator.geolocation) 
      navigator.geolocation.getCurrentPosition(
        (pos) => res(pos),
        (err) => rej(logError(err)),
        options
      );
    
  );


function logPos(data) 
  const  accuracy, latitude, longitude  = data.coords;
  console.log('Your current position is:');
  console.log(`Latitude : $latitude`);
  console.log(`Longitude: $longitude`);
  console.log(`More or less $accuracy meters.`);
  posArr.push( accuracy, latitude, longitude );
  localStorage.setItem('pos', JSON.stringify(posArr));


function logError(err) 
  const  code, message  = err;
  console.error(`Error code $code: $message`);


const options = 
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
;

async function main(options) 
  try 
    const response = await getPos(options);
    if (response) 
      logPos(response);
      console.log(posArr);
    
   catch (err) 
    console.log('Position not available.');
  


main();

【讨论】:

非常感谢,我会将其他坐标硬编码到另一组数组中。

以上是关于在javascript中分配地图坐标返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

一种将历史地图坐标配准到GIS中的方法

在 .NET 中分析 GIS/地图数据

arcgis中怎么做一个小的补充地图

从Javascript中的数字数组返回坐标(x,y)

GIS方面:如何对已经数字化的地图进行配准?

谷歌地图(javascript API):从地址获取 GPS 坐标