在半径为公里的范围内查找地理坐标

5

我有一个包含大约300,000个向量的数据集,这些向量是根据纬度和经度随机分布在地球周围的。假设我现在位于北纬51.9167°,东经4.5000°附近,如何找到距离我100公里内的所有向量呢?最好使用简单的数学方法,如果需要可以使用Java或伪代码。


这个问题以前已经被问过了,以下是一些答案供您参考: - Addys
您可以使用Haversine公式来计算纬度和经度之间的距离。 - Rahul Tripathi
这是haversine公式的一个java实现 - Bohemian
当你说“数据集”时,你指的是列表/集合吗?还是其他什么东西? - Bohemian
你也可以参考这个链接:http://www.movable-type.co.uk/scripts/latlong.html - Rahul Tripathi
2个回答

3
假设您有一个包含纬度/经度信息的 Location 类,以及一个要处理的 Collection<Location>,您可以按照以下方式进行操作:
Collection<Location> locations; // filled somewhere
final Location here;

List<Location> within100km = locations.stream()
    .filter(l -> haversine(l.getLatitude(), l.getLongitude(),
      here.getLatitude(), here.getLongitude()) <= 100)
    .collect(Collectors.toList());

public static double haversine(
        double lat1, double lng1, double lat2, double lng2) {
    int r = 6371; // average radius of the earth in km
    double dLat = Math.toRadians(lat2 - lat1);
    double dLon = Math.toRadians(lng2 - lng1);
    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.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double d = r * c;
    return d;
}

0
发现了一些相同的方程式
从纬度/经度到n-向量
对于地球表面上的一个点φ,λ,其中纬度=φ,经度=λ,该点的n-向量定义为
             cosφ·cosλ   
v{x,y,z} =   cosφ·sinλ   
             sinφ   

请参考此页面


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接