REMarkerClusterer 2.3.1

REMarkerClusterer 2.3.1

测试测试
语言语言 Obj-CObjective C
许可证 MIT
发布时间最新发布2014年12月

Roman Efimov 维护。



  • 作者
  • Roman Efimov

REMarkerClusterer 为大量标记创建并管理每个缩放级别的集群。

正如在 Pinsnap iPhone 应用程序中所见的那样。 REMarkerClusterer 受到 iPhone 上的 Apple 相册应用程序的启发,REMarkerClusterer 仿效它的行为,为分组和取消分组集群提供动画。

REMarkerClusterer Screenshot

工作原理

REMarkerClusterer 将根据标记与集群中心点的距离将标记分组到集群中。当一个标记被添加时,标记集群将在所有集群中找到一个位置,如果找不到,它将创建一个新的集群并包含标记。集群中的标记数量将显示在集群标记上。当地图视口改变时,REMarkerClusterer 将销毁视口中的集群并将它们重新分组到新的集群中。

要求

  • Xcode 4.6 或更高版本
  • Apple LLVM 编译器
  • iOS 5.0 或更高版本
  • ARC(如果你想在没有 ARC 的项目中使用,只需在项目的“构建阶段”标签中添加标记 -fobjc-arc

演示

在 Xcode 中构建并运行 REMarkerClustererExample 项目以查看 REMarkerClusterer 的实际效果。

安装

手动安装

REMarkerClusterer 需要 MapKitCoreLocation 框架,所以你需要首先将这些框架包含到你的项目中。

现在框架已经链接,你只需要将 REMarkerClusterer 文件夹中的文件拖放到你的项目中,并在将使用它的类的顶部添加 #include "REMarkerClusterer.h"

示例使用

// Add map view
//
self.mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
self.mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.mapView setRegion:MKCoordinateRegionMake(CLLocationCoordinate2DMake(37.786996, -97.440100), MKCoordinateSpanMake(30.03863, 30.03863)) animated:YES];
[self.view addSubview:self.mapView];

// Create clusterer, assign a map view and delegate (MKMapViewDelegate)
//
self.clusterer = [[REMarkerClusterer alloc] initWithMapView:self.mapView delegate:self];

// Set smaller grid size for an iPad
//
self.clusterer.gridSize = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ? 25 : 20;
self.clusterer.clusterTitle = @"%i items";

// Populate with sample data
//
NSDictionary *data = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Points" ofType:@"plist"]];

[data[@"Points"] enumerateObjectsUsingBlock:^(NSDictionary *dictionary, NSUInteger idx, BOOL *stop) {
    REMarker *marker = [[REMarker alloc] init];
    marker.markerId = [dictionary[@"id"] integerValue];
    marker.coordinate = CLLocationCoordinate2DMake([dictionary[@"latitude"] floatValue], [dictionary[@"longitude"] floatValue]);
    marker.title = [NSString stringWithFormat:@"One item <id: %i>", idx];
    marker.userInfo = @{ @"index": @(idx) };
    [self.clusterer addMarker:marker];
}];

// Create clusters (without animations on view load)
//
[self.clusterer clusterize:NO];

// Zoom to show all clusters/markers on the map
//
[self.clusterer zoomToAnnotationsBounds:self.clusterer.markers];

贡献者

Nicolas Yuste (@nicoyuste) Thomas Kollbach (@toto) Markus Emrich (@jaydee3)

联系方式

Roman Efimov

鸣谢

部分基于 Xiaoxi Wu 的 MarkerClusterer Javascript 库(http://gmaps-utility-library-dev.googlecode.com

许可证

REMarkerClusterer 遵循 MIT 许可证。

版权© 2011-2013 Roman Efimov。

特此授予任何人获取本软件及其相关文档文件(“软件”)副本的自由,并可不受限制地使用软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向提供软件的人授权其进行上述行为,但前提是遵守以下条件

上述版权声明和此许可声明应包含在软件的任何副本或主要部分中。

软件按“原样”提供,不包括任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任源于合同、侵权或其他,无论是与本软件有关还是与使用或操作软件有关。