【问题标题】:Clustering Google Maps Markers in iOS在 iOS 中对 Google 地图标记进行聚类
【发布时间】:2013-09-10 03:16:48
【问题描述】:

我有一个基于地图的应用程序,使用 Google Maps 的 iOS SDK。我需要在核心数据数据库中存储多达数千个项目,并在地图上用标记显示它们。出于性能和可用性的原因,我需要在用户缩小时对这些标记进行聚类,但我需要确保放置有代表性的标记,以便用户知道在哪里放大以查看更多细节。

我的核心数据模型中的每个条目都存储了纬度/经度双精度值。因此,我想到的对项目进行聚类的方法是保留一个单独的实体,在其中剥离地理坐标中不太重要的部分并在其中存储一个计数。

因此,每当将具有 lat/lon {44.9382719, -130.20293849} 的项目插入数据库时​​,另一个具有 lat/lon {44.9, -130.2} 的“集群”对象的计数属性就会增加。这个想法是,在低缩放(即缩小)时,我只会查询集群对象并将它们放在地图上而不是实际项目上。

我的问题是:根据NSManagedObject reference,您不应该在awakeFromInsert 中获取东西,那么我怎样才能确保插入一种托管对象会更新相应托管对象的值另一种?

【问题讨论】:

标签: ios objective-c google-maps core-data


【解决方案1】:

我已经在 iOS 版 Google Maps 中搜索 Clustering Markers 库三天了,最后我找到了这个 https://github.com/googlemaps/google-maps-ios-utils,它运行良好,非常易于使用和理解。

【讨论】:

  • 链接上的代码有一些四叉树的代码,与谷歌地图无关。能详细说说怎么用吗?
  • 看来github.com/googlemaps/google-maps-ios-utils 的作者已经从它的库中删除了一些文件......虽然你可以得到它以前的文件,当我从它下载时,它包含聚类算法和 iOS 示例项目,来自以下链接goo.gl/R0wgeh
  • 感谢@NiteshBorad ...我已经让这个库成功地为我工作。但是我想知道是否有办法让标记对象进入集群?例如如果我点击一个集群,我想在其中显示一个标记列表。有可能吗?
  • @Sha:是的,你可以这样做。在集群位置坐标添加自定义 GSMMarker(以便集群可以与默认标记区分开来)。使您的视图控制器代表 GSMMapView 并在您的视图控制器中实现 GMSMapViewDelegate 协议的方法“-mapView:didTapMarker:”。现在,当用户单击我们的自定义集群标记时,将调用此方法。通话时,缩小地图视图,将显示地图中的正常位置点,您可以在其中添加默认 GSMMarker。
【解决方案2】:

看看routeMe,这是默认的

/** Whether the annotation should be clustered when map view clustering is enabled. Defaults toYES. */ @property (nonatomic, assign) BOOL clusteringEnabled;

【讨论】:

  • 嗯...我想知道为什么所有MapBox SDK 课程都以“RM”开头。现在它是有道理的。我最终在那个项目上实现了 MapBox,正如你所指出的,它提供了自己的集群。但它的地图质量与谷歌地图相差甚远,而且似乎没有很好的方法来聚类标记。我确实为 Google 地图手动编写了聚类代码,但动画效果不佳。
  • 您有为 Google Maps SDK 编写的集群代码吗?我处于类似的位置。如果你有一些开源的东西,我也许可以帮忙做动画。把时间花在这上面比自己写更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 2013-03-27
  • 2013-06-27
  • 2013-12-09
  • 2021-08-10
  • 2013-11-26
相关资源
最近更新 更多