使用固定数量的聚类在Python中聚类纬度经度点

时间:2015-07-01 06:43:06

标签: python gis geospatial latitude-longitude k-means

kmeans对于地理空间坐标无法正常工作 - 即使将距离函数更改为如所述here所述的半径也是如此。

我看了DBSCAN但没有 让我设置固定数量的集群。

  1. 是否有任何算法(如果可能,在python中)与kmeans具有相同的输入值?或
  2. 我可以轻松地将纬度,经度转换为欧几里得坐标(x,y,z),并完成here并对我的数据进行计算吗?
  3. 它不一定非常准确,但如果它会好的话会很好。

2 个答案:

答案 0 :(得分:3)

当您的地理数据跨越大面积时,仅使用纬度和经度会导致问题。特别是因为经度之间的距离较小。为了解释这一点,最好先将lon和lat转换为笛卡尔坐标。

如果您的地理数据跨越美国,例如您可以定义一个原点,从中计算距离作为连续美国的中心。我相信它位于北纬39度50分钟,经度98度35分钟。

将lat lon转换为CARTESIAN坐标 - 使用hasrsine计算距离,从数据集中的每个位置到定义的原点。我建议Latitude 39度50分钟,经度98度35分钟。

您可以在python中使用hasrsine来计算这些距离:

from haversine import haversine
origin = (39.50, 98.35)
paris = (48.8567, 2.3508)
haversine(origin, paris, miles=True)

现在你可以使用k-means对这些数据进行聚类,假设地球的哈尔辛模型足以满足你的需要。如果您正在进行数据分析而不是计划发射卫星,我认为这应该没问题。

答案 1 :(得分:2)

你试过kmeans吗?在相关问题中提出的问题似乎是接近180度的点。如果你的积分足够接近(例如在同一个城市或国家),那么kmeans可能对你有效。