我的数据库中有一个地方列表,它们都有纬度/经度。
在我的应用程序中,我获得了用户位置,我想要获取距离他100米的所有地方。
要做到这一点,我在他的纬度和经度上加100米
我试着这样做:
double radius = 100; // 100 meters
double limitLatitudeNorth = latitude + radius;
double limitLatitudeSouth = latitude - radius;
double limitLongitudeWest = longitude - radius;
double limitLongitudeEast = longitude + radius;
StringBuffer query = "latitude < '" + limitLatitudeNorth + "' AND latitude > '" + limitLatitudeSouth + "' AND longitude < '" + limitLongitudeWest + "' AND longitude > '" + limitLongitudeEast + "'";
但当然,经度和经度都不是米,所以我不知道如何计算总和。
公式是什么?我听说这取决于全球的位置。比方说我在法国。
许多应用程序都这样做(即:LINE)我想我会很容易找到一个代码,但我没有:(
有什么想法吗?
答案 0 :(得分:0)
您可以在Location类中使用distanceTo方法。执行以下操作:
Location location = new Location();
location.setLatitude(latitude);
location.setLongitude(longitude);
Location locationFromDB = new Location();
locationFromDB.setLatitude(latitudeFromDB);
locationFromDB.setLongitude(longitudeFromDB);
float dist = location.distanceTo(locationFromDB);
if(dist<100f){
//do here your magic
}
答案 1 :(得分:0)
对于纬度上的距离(通过极点追踪一个大圆圈),则1分钟弧= 1海里= 1852米(近似)。因此1度= 111.12 km
对于经度变化,您需要将此因子乘以纬度的余弦值。因此,在赤道,距离的变化与纬度的变化相同,在极点(cos 90度= 0),相等经度的线都会收敛到一个点。