Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 城市和坐标表,然后使用我的坐标,看看哪个城市坐标离我更近_Javascript_Html - Fatal编程技术网

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

Javascript 城市和坐标表,然后使用我的坐标,看看哪个城市坐标离我更近,javascript,html,Javascript,Html,我想做一张城市表和城市坐标, 然后我有一个按钮,告诉我我的位置(经度和纬度) 我如何连接它们?假设有两个城市,一个离我比较近,另一个离我比较远,我希望它能自动把我放在离我比较近的城市里。 例如,代码中可能有类似的内容: <table> <tr> <td id="city">Haifa</td> <td id="coord">32.81841 34.9885</td> </tr&g

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

我如何连接它们?假设有两个城市,一个离我比较近,另一个离我比较远,我希望它能自动把我放在离我比较近的城市里。 例如,代码中可能有类似的内容:

<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.81841 34.9885
特拉维夫
32.083333 34.7999968
然后假设,我的位置是: 32.777777 34.999999 我怎样才能让它说我来自海法?
谢谢。

我的解决方案是使用
毕达哥拉斯定理
来计算从你的位置到城市和城市的斜线长度(比如比较
Math.sqrt(Math.pow(my_x-city1_x,2)+Math.pow(my_y-city1_y,2))
Math.sqrt(Math.pow(my_x-city2)+Math.pow(my_y-city2)
)答案是长度较小

            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();
距离排序解决方案
  • 计算我在jaircazarin旧帐户中使用的算法的距离
  • 从最短距离到最长距离排序
  • 在表格中显示它
constpix=3.141592653589793;
常数半径=6378.16;
函数弧度(x){
返回x*pix/180;
}
函数计算站(lat1、long1、lat2、long2){
设dlon=弧度(long2-long1);
设dlat=弧度(lat2-lat1);
设a=(Math.sin(dlat/2)*Math.sin(dlat/2))+Math.cos(弧度(lat1))*Math.cos(弧度(lat2))*(Math.sin(dlon/2)*Math.sin(dlon/2));
设angle=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
返回角*半径;
}
让yourLocationLat=32.7777;
让yourLocationLong=34.999999;
让位置=[{
“名称”:“特拉维夫”,
“lat”:32.083333,
“长”:34.7999968
}, {
“名称”:“海法”,
“lat”:32.81841,
“长”:34.9885
}, {
“名称”:“柏林”,
“lat”:52.520008,
“长”:13.404954
},{
“名称”:“阿拉斯加”,
“lat”:66.160507,
“长”:-153.369141
},{
“名称”:“墨西哥”,
“lat”:19.432608,
“长”:-99.133209
},{
“名称”:“耶路撒冷”,
“lat”:31.771959,
“长”:35.217018
}
]
让结果=[];
places.forEach((x)=>{
让resultDistance=calculateDistance(yourLocationLat,yourLocationLong,x.lat,x.long)
设obj={
“城市”:x.name,
“lat”:x.lat,
“长”:x.long,
“距离”:结果距离
}
结果:推送(obj);
})
//最短优先
结果.排序((a,b)=>{
返回a.distance-b.distance
})
//现在您已经得到了可以在表中显示的结果数据
document.getElementById(“valueInsert”).innerHTML=result[0]。城市

也许反向地理编码API可以帮助您确定您的坐标。这里还有一个问题,您可能会感兴趣@Alex我不想使用谷歌API,我也可以得到我所在位置的坐标,我只是不知道如何从我可以创建的城市列表中找到合适的位置我的位置是:32.777777 34.999999我如何才能让它显示我来自海法?我发表评论的目的是回答这个问题,因为反向地理编码是从城市名称中获取城市名称的时髦词汇coordinates@Alex我明白,我也调查过了,问题是要从谷歌获得api密钥,我需要把我的签证放在免费的位置,直到你到达某一点,但我不想冒这个险,制造事故,他们会向我收费的。现在,我想要的是刺激一种反向地理编码,通过制作一个包含城市和协调城市列表的表格,通过我自己的坐标找到最接近我的地方并将其链接在一起。希望你明白我的意思,如果不明白,我会更好地解释我自己。也许我们可以用毕达哥拉斯定理来计算斜线长度来选择城市?我知道你在那里做了什么,但这对两个城市不管用吗?而要想获得更多,每个城市都需要大量的if-else-if等…@idan-half-uh?你是说你需要比较更多的城市吗?您可以像使用另一个解决方案一样使用
distance()
函数,或者使用数组逐个计算。如果你想要新版本,我可以更新。嘿,亚历克斯,非常感谢你的回答,我不知道它是否对我有效,我没有尝试过,但我想先了解你做了什么,所以我的第一个问题是,如果你能向我解释乞讨的部分,它是干什么的常数pix=3.141592653589793;常数半径=6378.16;函数弧度(x){return x*pix/180;}````然后如果你能向我解释CalculatedInstance函数+-这样我就能理解dlon和dlat,我想我在解释弧度部分之后会理解,然后我会尝试理解let a(让它像变量是吗?),抱歉,我不知道。。ty@idanhalf常数的名称是π,半径是地球赤道的半径。函数弧度只是弧度中度数的一个转换器。让我们像var一样,但在JS中使用局部作用域。哦,好的,谢谢,我会尝试将其全部放在一起并进行编辑,以防我有一个问题:)非常感谢您的帮助。@IDANHElf you's welcome:)如果您认为这有帮助,请将其标记为已接受。向其他人显示此答案对您有帮助。