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

时间:2021-01-13 10:20:33

标签: javascript html

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

我如何连接它们?假设有 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 我怎样才能让它说我来自海法? 谢谢。

2 个答案:

答案 0 :(得分: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;
<div id="valueInsert"></div>

答案 1 :(得分:0)

我的解决方案是使用 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)))是答案< /p>

            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();