城市和坐标表,然后使用我的坐标,看看哪个城市坐标离我更近

  • 本文关键字:坐标 城市 然后 javascript html
  • 更新时间 :
  • 英文 :


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

我如何连接它们?假设有两个城市,一个离我更近,另一个离得很远,我希望它能自动把我放在离我更亲近的城市里。例如,代码中可能有这样的东西:

<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我怎么能让它说我来自海法?谢谢

距离排序解决方案

  • 计算我使用的算法在回答银保监会的旧帐户中的距离
  • 从最短到最长的距离排序
  • 在表中显示

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;
<div id="valueInsert"></div>

我的解决方案是使用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();

最新更新