给定一个在地图上不同点包含可变数量注释([mapView annotations]
)的MKMapView
和MKMapRect
值MKMapRectWorld
,我如何确定地图上MKAnnotation
对象最集中的区域(可能是彼此最接近的5-15个注释)?
示例场景:
*咖啡查找器:确定地图上哪个区域的星巴克最多
*K9统计:确定地图上哪个区域的可卡犬最多
"区域"可以是一个设置的矩形大小,也可以由一块注释决定,我不一定在乎。谢谢你的帮助!
您会发现相关问题很有帮助。
另请参阅K-means_algorithm
K-means_algorithm
如果你有N个注释,并且想分解成K个部分,你可以用K-means-algorithm找到K个部分中每个部分的中心(这将满足某些标准。例如,最小化簇内平方和)。一旦你们有了中心,找出了中心和注释之间的距离,离中心最远,它将给出你们感兴趣的区域的半径。K-means_algorithm有几种变体,您可以根据性能和易实现性选择其中的一种。
编辑:我还没有实现以下,但认为肯定会给出一个解决方案
如果您对范围5-10表示满意,则可以有多种解决方案。所以我们会找到一个解决方案。
1-假设您有(N=100)个注释,并希望其中哪个(p=15)位于最密集的位置。
2-然后我们将把N个注释随机划分为K=N/p组(这里K=7)
3-使用K-均值算法,这样我们最终会有K个可以区分为单独实体的群。
4-这K个群将具有最小性质"在簇平方和内"。
5-若你们想节省计算时间,你们可以将最集中群的定义放宽为最小的"群内平方和",而不是由它们限定的区域。
6-从获得的K组中选择一个满足您标准的组。
7-如果想坚持到最小面积(最大浓度)的定义,那么你需要做大量的计算
a。首先确定给定组的边界注释,这本身就是一个巨大的问题。
b。计算每个多边形的面积,看看哪个最小。不复杂但计算要求高)
EDIT2
:
我尽我所能,终于想到这个问题属于专业数学网站。我在这里问了你的问题,从答案中,你可以在这里得到讨论这个问题和解决方案的论文。他们讨论的问题是给定N个点,找到凸包面积最小的K个点。