Java - 从位置集合中获取基于距离的位置
问题描述:
我有一组集合中的对象具有作为属性的经度和地位。现在我想要得到所有那些距离一定距离的物体,例如输入经度和纬度的50英里半径。我应该使用什么样的数据结构和搜索所有这些点的算法。Java - 从位置集合中获取基于距离的位置
答
借助下面的代码解决了我的问题。
package com.csc.banking.celeriti.cache.srv.utils;
public class GeoDistanceCalculator {
private static double distance(double lat1, double lon1, double lat2, double lon2, char unit) {
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
if (unit == 'K') {
dist = dist * 1.609344;
} else if (unit == 'N') {
dist = dist * 0.8684;
}
return (dist);
}
public static double distanceKms(double lat1, double lon1, double lat2, double lon2){
return distance(lat1, lon1, lat2, lon2, 'K');
}
public static double distanceNauticalMiles(double lat1, double lon1, double lat2, double lon2){
return distance(lat1, lon1, lat2, lon2, 'N');
}
public static double distanceMiles(double lat1, double lon1, double lat2, double lon2){
return distance(lat1, lon1, lat2, lon2, 'M');
}
private static double deg2rad(double deg) {
return (deg * Math.PI/180.0);
}
private static double rad2deg(double rad) {
return (rad * 180/Math.PI);
}
public static void main(String[] args) {
System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, 'M') + " Miles\n");
System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, 'K') + " Kilometers\n");
System.out.println(distance(32.9697, -96.80322, 29.46786, -98.53506, 'N') + " Nautical Miles\n");
System.out.println(distance(28.6207641, 77.36392920000003, 28.6314512, 77.21666720000007, 'K') + " Connaught Place Delhi to Noida 62\n");
}
}
没有任何gps特定算法,sqrt((x-a)^ 2 +(y-b)^ 2)呢? – 2014-10-30 11:43:53
我使用geodatasource.com(http://www.geodatasource.com/developers/java)中的方法来计算两个GPS位置之间的距离。我需要一个有效的搜索算法来给我列出我的集合中距离该距离范围内的点。我也打开了为我的java对象创建一个新的数据结构。 – 2014-10-30 12:00:50