【发布时间】:2015-12-28 11:11:50
【问题描述】:
我正在尝试找到与给定集群 1 最接近的集群(参见下面的示例)。为了可视化集群,我使用了 QGIS(X 轴是经度,Y 轴是纬度)。
首先,我计算了每个集群的质心。因此我得到了以下结果:
Cluster 1:
Lat : -83.5
Lon: -159.3
Cluster 2:
Lat: -80.5
Lon: -123.9
Cluster 3:
Lat: -83.4
Lon: 159.4
作为距离度量,我使用Haversine 公式:
/**
* Calculates Haversine distance between two points
* @param lat1
* @param lon1
* @param lat2
* @param lon2
* @return
*/
private static double haversine(double lat1, double lon1, double lat2, double lon2) {
double R = 6372.8;
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
double a = Math.pow(Math.sin(dLat / 2),2) + Math.pow(Math.sin(dLon / 2),2) * Math.cos(lat1) * Math.cos(lat2);
double c = 2 * Math.asin(Math.sqrt(a));
return R * c;
}
我得到了以下结果(可以通过运行haversine 函数得到类似的结果):
-
集群 1 和 2 之间的距离:628.37
-
集群 1 和 3 之间的距离:513.73
因此,尽管从图片中可以清楚地看出,集群 2 比集群 3 更接近集群 1,但公式表明集群 3 更接近。 在这种情况下,我应该更好地使用哪个公式?
【问题讨论】:
-
公式是对的,但你的图片不对
-
@Azat Nugusbayev:为什么可视化有问题?我用的是 QGIS(X 轴是经度,Y 轴是纬度)。