我正在寻找一个GIS/几何算法:
在一个大面积(例如城市)随机分布了1000个点,如何找出所有有超过15个点的小区域?就像下面这张图片一样:
每个点都有自己的纬度和经度坐标。小区域的大小小于200米 x 200米。
不确定您的性能要求是什么。但是一个天真的实现方式是,对于每个点,将其与所有其他点的距离的倒数相加:
for i := 0 to 999 do
for j := 0 to 999 do
if i<>j then
Point[i].Score := Point[i].Score + ( 1 / Distance(Point[i], Point[j]) );
每个聚集区中心附近的点将具有最高分数。
O(n^2)
,对于任何大量的点都应该避免使用。对于1000个点,它会进行100万次计算。对于10000个点,它会进行1亿次计算! - Cosmin Prund