【问题标题】:How to determine area of MKMapRect with greatest concentration of MKAnnotation objects?如何确定 MKMapRect 中 MKAnnotation 对象最集中的区域?
【发布时间】:2012-01-24 03:07:28
【问题描述】:

鉴于MKMapView 在地图上的各个点包含可变数量的注释 ([mapView annotations]) 和 MKMapRectMKMapRectWorld,我如何确定地图上最集中的区域在MKAnnotation 对象上(可能是彼此最接近的 5-15 个注释)?

示例场景:

* 咖啡查找器:确定地图上哪个区域的星巴克最多

* K9 统计数据:确定地图的哪个区域拥有最多可卡犬


“区域”可以是设置的矩形大小或由注释块确定,我不一定关心。感谢您的帮助!

【问题讨论】:

  • “浓度”在这里是一个棘手的词,因为您没有提到任何组中注释数量的下限。例如(理论上)两个star bucks 可能非常接近,连接它们的一个细长的小矩形将具有最高的集中度。如果你限制你想要的星巴克的上限和下限,这会很有帮助。
  • @chatur,我提供了一个示例数字范围,谢谢

标签: ios mapkit mkannotation mkmaprect


【解决方案1】:

您会发现related question 很有帮助。

也可以看看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-means 算法,最终我们将有 K 个可以区分为单独实体的组。

4- 这些 K 组将具有最小“簇内平方和”的属性。

5- 如果您想节省计算时间,您可以将最集中组的定义放宽为最小“簇内平方和”,而不是由它们限制的区域。

6- 从获得的 K 组中选择一个满足您的条件的组。

7- 如果要坚持最小面积(最大浓度)定义,那么您将需要进行大量计算

一个。首先确定给定组的边界注释,这本身就是一个大问题。

b.计算每个多边形的面积,看看哪个最少。不复杂但计算要求高)

EDIT2:

我尽我所能,最后认为这个问题属于专业数学网站。我问了你的问题here,从答案中,你可以得到讨论这个问题的论文和解决方案here。他们讨论的问题给定N个点,找出convex hull的面积最小的K个点。

【讨论】:

  • 当我只想要一个代表最集中的单个区域时,K-means 对多个集群来说不是更多吗?
  • 您在 EDIT2 下提供的资源看起来很有希望。感谢您的帮助。
猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多