集群的经度和纬度的GPS数据

问题描述:

我有400辆多万辆汽车GPS位置,如:集群的经度和纬度的GPS数据

[ 25.41452217, 37.94879532], 
[ 25.33231735, 37.93455887], 
[ 25.44327736, 37.96868896], 
... 

我需要空间聚类点< = 3米之间的距离。
我试过使用DBSCAN,但它似乎不适用于geo(longitude, latitude)

此外,我不知道群集的数量。

+1

请出示到目前为止,你已经尝试代码:[MCVE] – Adib

+0

DBSCAN适用于纬度,经度 - 只要选择适当的*距离功能*(并确保你知道它是否使用米,码,...) –

DBSCAN是一个合理的选择,但使用OPTICS和HDBSCAN *等分层聚类算法可能会获得更好的结果。

我做了一个博客帖子前段时间聚类23000000个分享Tweet地点:

http://www.vitavonni.de/blog/201410/2014102301-clustering-23-mio-tweet-locations.html

这里也是聚集GPS点的博客。她采用了非常相似的方法,并给出更详细信息:

https://doublebyteblog.wordpress.com/

从本质上说,OPTICS很适合这样的数据,你真的需要使用索引如R *树或封面树在ELKI。两者都与Haversine距离一起工作,速度非常快。

可以使用pairwise_distances从纬度/经度计算地理距离,然后通过指定metric ='precomputed'将距离矩阵传递到DBSCAN。

计算距离矩阵:

from sklearn.metrics.pairwise import pairwise_distances 
from sklearn.cluster import DBSCAN 
from geopy.distance import vincenty 

def distance_in_meters(x, y): 
    return vincenty((x[0], x[1]), (y[0], y[1])).m 

distance_matrix = pairwise_distances(sample, metric=distance_in_meters) 

要使用矩阵运行DBSCAN:

dbscan = DBSCAN(metric='precomputed', eps=3, min_samples=10) 
dbscan.fit(distance_matrix) 

希望这有助于。

Gengyu