如何转换纬度&;经度分为北、南、东、西。如果可能的话,用javascript?

如何转换纬度&;经度分为北、南、东、西。如果可能的话,用javascript?,javascript,Javascript,此API需要北、南、东、西参数 如果经度

此API需要北、南、东、西参数



如果
经度<0
,则
西
,否则


如果
纬度<0
那么
南部
,否则
北部

那么,这个api似乎使用了边界框。北、东、南、西是盒子的四角。与其他答案相反,仅仅输出坐标是行不通的。您需要所有边界坐标

因此,要将坐标转换为北、东等,我们应该加上或减去一公里(这已经足够近了)。这是在函数
kmInDegree(lat,long)
中计算的。根据找到的函数进行计算

因此,如果我们取阿尔及利亚的Beni Amrane(36.68395,3.6217802)并加上和减去正确的值,我们得到这个边界框:

如果我们将这些值传递给url,我们将得到以下输出

const-API='1〕http://api.geonames.org/citiesJSON?north=36.69395&south=36.67395&east=3.6324802&west=3.6104802&lang=de&username=demo';
//上述api调用的结果
{
“地理名称”:[
{
“液化天然气”:3.616667,
“大地水准面”:2507983,
“国家代码”:“DZ”,
“姓名”:“Aïn'Sara”,
“fclName”:“城市、村庄,…”,
“地名名称”:“Aïn'Sara”,
“fcodeName”:“居住地点”,
“维基百科”:“,
“lat”:36.683333,
“fcl”:“P”,
“人口”:0,
“fcode”:“PPL”
}
]
}
可以通过以下功能自动执行此过程:

函数getBox(横向、纵向){
//计算某一坐标处1km的偏移量
常数距离=公里指数(横向、纵向)
//计算边界并将其作为对象
设界限={
北:纬度+距离纬度,
南:拉特-拉特区,
东:长+距离长,
西:长距离
};
返回边界;
}
//看https://en.wikipedia.org/wiki/Latitude#Length_of_a_degree_of_latitude
函数kmInDegree(横向、纵向){
常数pi=Math.pi;
常数eSq=0.0066943999014;
常数a=6378137.0;//赤道半径(米)
lat=lat*pi/180;//转换为弧度
long=long*pi/180;//转换弧度
//我不会试图解释这些计算。我只知道维基百科上的例子是正确的(见上面的url)
常数latLength=(pi*a*(1-eSq))/(180*Math.pow((1-eSq*Math.pow(Math.sin(lat),2)),3/2));
const longLength=(pi*a*Math.cos(long))/(180*Math.sqrt((1-(eSq*Math.pow)(Math.sin(long),2 '));
//如果你想要一个更大的偏移量,比如说5km,然后把1000变成5000
返回{
板条:1000/板条长度,
长:1000/长
};
}
//仅供演示之用。
window.onload=函数(){
//从坐标中得到盒子
let box=getBox(36.68395,3.6217802);
//创建API URL
const API=`http:\/\/API.geonames.org/citiesJSON?北=${box.north}&south=${box.south}&east=${box.east}&west=${box.west}&lang=de&username=demo`;
控制台日志(API);

}
请注意,经度所覆盖的距离随纬度的不同而不同:两极的距离为零,赤道的距离约为11公里。看到了吗,这个方法会在两极附近得到一个更小的区域。一点三角学(请参阅该页来源中的“距离”函数)可能可以弥补这一点,因此“长方体”(/球面段,尤其是近极点)的面积(大致)与纬度无关。@phhu是的,我知道这一点,但我不认为这对该应用程序影响太大。稍后将添加它可能会更新和数学!这似乎没有回答这个问题。看看API,它需要一个边界框。所有北、南、东和西参数都是强制性的。
let latitude: = 36.6839559;
let longitude = 3.6217802;
const API = `http://api.geonames.org/citiesJSON?north=${north}south=${south}&east=${east}&west=${west}&lang=de&username=demo`;