我有一个点的纬度和经度。我想要关于该给定点的 500M 半径内的所有纬度和经度读数。有什么方法吗?可能吗?有什么算法吗?
问问题
438 次
2 回答
1
有许多公式可用于计算两个纬度/经度点之间的距离(由于高度变化,它不会准确,但非常接近),并根据与给定点的距离过滤样本点。
此处提供了可用内容(包括数学和源代码)的一个很好的概述:http ://www.movable-type.co.uk/scripts/latlong.html
浏览那里并选择最适合您需求的距离公式。
于 2014-02-26T05:34:29.117 回答
0
这是 StackOverflow 上的一个解决方案,用于查找 2 个位置之间的距离,作者:Usman Kurd
https://stackoverflow.com/a/14394403/2128327
所以稍加调整,我们就可以使用他的功能:
public double getKmDistance(GeoPoint StartP, GeoPoint EndP) {
int Radius=6371;//radius of earth in Km
double lat1 = StartP.getLatitudeE6()/1E6;
double lat2 = EndP.getLatitudeE6()/1E6;
double lon1 = StartP.getLongitudeE6()/1E6;
double lon2 = EndP.getLongitudeE6()/1E6;
double dLat = Math.toRadians(lat2-lat1);
double dLon = Math.toRadians(lon2-lon1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
double c = 2 * Math.asin(Math.sqrt(a));
double valueResult= Radius*c;
double km=valueResult/1;
DecimalFormat newFormat = new DecimalFormat("####");
kmInDec = Integer.valueOf(newFormat.format(km));
meter=valueResult%1000;
meterInDec= Integer.valueOf(newFormat.format(meter));
Log.i("Radius Value",""+valueResult+" KM "+kmInDec+" Meter "+meterInDec);
return kmInDec;
}
那么假设您有一个位置列表:
ArrayList<GeoPoint> geoPoints = new ArrayList<GeoPoint>();
我们有我们当前的位置:
GeoPoint currentLocation = new GeoPoint(..);
那么你可以这样做:
ArrayList<GeoPoint> within500Km = new ArrayList<GeoPoint>();
for (GeoPoint g : geoPoints)
if (getKmDistance(currentLocation, g) <= 500.0)
within500Km.add(g);
for(GeoPoint g : within500Km)
System.out.println("> "+g.getLatitudeE6()+" : "+g.getLongitudeE6()+" ");
于 2014-02-26T05:41:57.097 回答