如何减少地图上的注释数量?

nev*_*ing 17 iphone algorithm cocoa-touch objective-c mkmapview

我正在编写一个包含大约900个注释的地图视图.在地图上有这么多注释会使性能受损,所以我想一次将它减少到大约300个.注释代表一个国家的商店,因此它们倾向于在主要城市周围聚集很多,然后在小城镇中以2或3个小组聚集.我想减少数字,以便2或3组保持不变,但城市中的数字变得稀疏(它们非常接近,因此它们没有提供有用的信息).

在图像中你可以看到有几个大团体(东京,名古屋和大阪),我想要减肥.但是对于自己或小组的引脚,我想确保它们不被过滤.放大后,我想显示丢失的针脚.

有没有人知道我可以使用的一些好的代码,以便消除那些靠近在一起的点,但更多分散的点是独自留下的?

替代文字http://img.skitch.com/20100204-jpde6wugc94nn692k7m36gmqf1.jpg

小智 6

一种方法是在放置新引脚之前,检查是否已将另一个引脚放置在新引脚的距离d内.如果有,请不要放置新引脚.您需要根据当前缩放级别改变d.

您可以通过仅考虑以新引脚为中心的边界框中的引脚来减少您检查的引脚数.盒子的侧面可以是dxd度(d根据缩放级别而变化).


esa*_*sad 6

如果可以选择商业第三方图书馆,请查看Superpin(许可证费用为199美元).它是一个iOS框架,内部使用四叉树进行注释存储并执行基于网格的聚类.该算法非常快,包含的示例应用程序显示了世界上的机场(超过30k +注释),并且它在3G iPhone上运行得非常顺畅.

您可能还想查看http://revolver.be/blog/mapkit-clustering-with-ios/,这是另一个现成的解决方案,对于非商业项目是免费的.

免责声明:我是Superpin开发人员之一


Nic*_*son 5

我能想到的两个选择:

  • 如果你有兴趣点(例如,城市),你可以简单地按照它们最接近的POI对所有引脚进行分组,缩放级别较低.
  • 您可以使用K-means聚类将引脚分组为簇,并使用中点引脚表示它们.