我试图从1个坐标(纬度,经度)中获取javascript中的边界框坐标,然后我可以将其用作OSM Nominatin API中的视图框。
对于红点,如何获得地球上任何地区/国家的绿色点 ? (原始差异为0.15):
for (x,y) will be: (x-2,y+2), (x+2,y-2)?
function get_bounce(lat, lng) { // y,x
// x-0.15,y+0.15
// x,y
// x+0.15,y-0.15
var lng1 = lng - 0.15;
var lat1 = lat + 0.15;
var lng2 = lng + 0.15;
var lat2 = lat - 0.15;
return [lat1,lng1,lat2,lng2];
}
提前致谢!
答案 0 :(得分:-1)
度经度距离1的变化与评论中所说的不同,具体取决于您所处的纬度。赤道的经度较宽,而极地的经度则较窄,不像纬度在全球范围内具有恒定的大小。要想象这一点,请参阅:
另一个帮助我的好参考是:
Calculate distance, bearing and more between Latitude/Longitude points
我有类似的问题。这是我想出的代码,以获得一个非常好的边界框。为此函数提供gps位置字符串(“x.xx,y.yy”)和“radius”(以km为单位),它为边界框生成北,南,东,西十进制坐标。这是Java,但应该很容易转换为另一种语言。
// Compute bounding Box coordinates for use with Geonames API.
class BoundingBox
{
public double north, south, east, west;
public BoundingBox(String location, float km)
{
//System.out.println(location + " : "+ km);
String[] parts = location.replaceAll("\\s","").split(","); //remove spaces and split on ,
double lat = Double.parseDouble(parts[0]);
double lng = Double.parseDouble(parts[1]);
double adjust = .008983112; // 1km in degrees at equator.
//adjust = 0.008983152770714983; // 1km in degrees at equator.
//System.out.println("deg: "+(1.0/40075.017)*360.0);
north = lat + ( km * adjust);
south = lat - ( km * adjust);
double lngRatio = 1/Math.cos(Math.toRadians(lat)); //ratio for lng size
//System.out.println("lngRatio: "+lngRatio);
east = lng + (km * adjust) * lngRatio;
west = lng - (km * adjust) * lngRatio;
}
}
上面的代码给出了一个相当不错的近似值,根据您的纬度可能会偏离一两英里。如果你想更准确,那么你可以看看这里的答案:
Geotools: bounding box for a buffer in wgs84 请参阅Eduardo对此问题的回答。这似乎是一个非常准确的解决方案。