【问题标题】:Table of citys and coords and then using my coords and see which city-coord is closer to me [closed]城市和坐标表,然后使用我的坐标,看看哪个城市坐标离我更近[关闭]
【发布时间】:2021-01-13 10:20:33
【问题描述】:

我想制作一个城市和城市坐标的表格, 然后我有一个按钮,可以告诉我我的位置(经度和纬度)

如何连接它们?假设有 2 个城市,其中一个离我较近,另一个离我很远,我希望它自动将我置于离我较近的城市中。 例如,在代码中可能是这样的:

<table>
<tr>
<td id="city">Haifa</td>
<td id="coord">32.81841 34.9885</td>
</tr>

<tr>
<td id="city">Tel-Aviv</td>
<td id="coord">32.083333 34.7999968</td>
</tr>

</table>

然后可以说,我的位置是: 32.777777 34.999999 我怎样才能让它说我来自海法? 谢谢。

【问题讨论】:

  • 也许反向地理编码 API 可以帮助您 developers.google.com/maps/documentation/javascript/examples/… 这可以确定您在这里协调的位置是另一个问题,您可能会感兴趣 stackoverflow.com/questions/6548504/…
  • @Alex 我不想使用 google api 我也已经可以获取我的位置坐标,我只是不知道如何从我可以创建的城市表中使其适合正确的位置..
  • 我的位置是:32.777777 34.999999 我怎样才能让它说我来自海法?我评论的目的是回答这个问题,因为反向地理编码是从坐标中获取城市名称的流行语
  • @Alex 我明白了,我也调查过了,问题是要从谷歌获得一个 api 密钥,我需要把我的签证,即使它是免费的,直到你达到某个点,但我不想冒险和发生事故,他们会向我收费。现在,我想要的是刺激反向地理编码,通过制作一个包含城市列表和协调的表格,并让我自己的坐标找到离我最近的地方并将其链接在一起。希望你明白我的意思,如果不是让我知道我试着更好地解释一下自己
  • 也许用勾股定理计算斜线长度来选择城市?

标签: javascript html


【解决方案1】:

距离排序解决方案

  • 计算我在 jaircazarin-old-account 的 the answer 中使用算法的距离
  • 排序从最短到最长的距离
  • 在表格中显示

const pix = 3.141592653589793;
const radius = 6378.16;

function radians(x) {
  return x * pix / 180;
}

function calculateDistance(lat1, long1, lat2, long2) {



  let dlon = radians(long2 - long1);
  let dlat = radians(lat2 - lat1);

  let a = (Math.sin(dlat / 2) * Math.sin(dlat / 2)) + Math.cos(radians(lat1)) * Math.cos(radians(lat2)) * (Math.sin(dlon / 2) * Math.sin(dlon / 2));

  let angle = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  return angle * radius;
}

let yourLocationLat = 32.777777;
let yourLocationLong = 34.999999;

let places = [{
  "name": "Tel-Aviv",
  "lat": 32.083333,
  "long": 34.7999968
}, {
  "name": "Haifa",
  "lat": 32.81841,
  "long": 34.9885

}, {
  "name": "Berlin",
  "lat": 52.520008,
  "long": 13.404954
},{
  "name": "Alaska",
  "lat": 66.160507,
  "long": -153.369141

},{
  "name": "Mexico",
  "lat": 19.432608,
  "long": -99.133209
},{
  "name": "Jerusalem",
  "lat": 31.771959,
  "long": 35.217018
}


]
let result = []; 
places.forEach((x) => {
  let resultDistance = calculateDistance(yourLocationLat, yourLocationLong, x.lat, x.long)
  let obj = {
  "city": x.name,
  "lat": x.lat,
  "long": x.long,
  "distance": resultDistance
  }
  
  result.push(obj);
})

// shortest first
result.sort((a, b) => {
 return a.distance - b.distance  
})

// now you have in result the data which you can display in your table



document.getElementById("valueInsert").innerHTML = result[0].city;
&lt;div id="valueInsert"&gt;&lt;/div&gt;

【讨论】:

  • 嘿亚历克斯,非常感谢这个答案,我不知道它是否适合我,没有尝试,但我想先了解你做了什么,所以我的第一个问题是,如果你能解释我乞讨的部分是为了什么? ``` 常量 pix = 3.141592653589793;常数半径 = 6378.16;函数弧度(x){返回x * pix / 180; }```然后如果你能向我解释calculatedistance函数+-所以我可以理解dlon和dlat,我想在你解释弧度部分之后我会理解错然后我试着理解let a(let就像变量是吗?)对不起我的无知.. ty
  • @idanhalf const 的名称是 pi,radius 是地球赤道的半径。函数弧度只是弧度度数的转换器。 let 类似于 var 但在 JS 中具有局部范围。
  • 哦,好的,谢谢,我试着把它们放在一起并编辑以防我有问题:) 非常感谢你的帮助。
  • @idanhalf 不客气 :) 如果您认为这对您有帮助,请将其标记为已接受向上/向下投票下方的灰色按钮,以向其他人展示此答案对您有所帮助。
【解决方案2】:

我的解决方案是使用Pythagorean Theorem 计算从您所在位置到城市的斜线长度,而长度较小的城市(如比较Math.sqrt(Math.pow(my_x - city1_x, 2)+Math.pow(my_y - city1_y, 2))Math.sqrt(Math.pow(my_x - city2_x, 2)+Math.pow(my_y - city2_y, 2)))就是答案

            function getLength(ax, ay, bx, by){
               return Math.sqrt(Math.pow(ax  - bx, 2)+Math.pow(ay  - by, 2));
            }
            function chooseCity(){
               let city1 = [32.81841, 34.9885];//Haifa
               let city2 = [32.083333, 34.7999968];//Tel-Aviv
               let mine = [32.777777, 34.999999];//your location
               if(getLength(city1[0], city1[1], mine[0], mine[2]) > getLength(city2[0], city2[1], mine[0], mine[2])){
                   // is the city2
                   console.log("city2")
                }else{
                   // is the city1
                   console.log("city1")
                }
            }
            chooseCity();

【讨论】:

  • 我明白你在那里做了什么,但它不适用于 2 个城市吗?如果每个城市等,则需要更多 if else..
  • @idan 一半呃?你的意思是你需要比较更多的城市?您可以像另一种解决方案一样使用distance() 函数,也可以使用数组逐个计算。如果你想要新版本,我可以更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
相关资源
最近更新 更多