├── .gitignore ├── README.md ├── iOS_3D_ClusterAnnotation.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── iOS_3D_ClusterAnnotation.xccheckout └── iOS_3D_ClusterAnnotation ├── AppDelegate.h ├── AppDelegate.m ├── Base.lproj └── Main.storyboard ├── ClusterAnnotation ├── Model │ ├── ClusterAnnotation.h │ ├── ClusterAnnotation.m │ ├── CoordinateQuadTree.h │ ├── CoordinateQuadTree.m │ ├── QuadTree.h │ └── QuadTree.m └── View │ ├── ClusterAnnotationView.h │ └── ClusterAnnotationView.m ├── Configuration └── APIKey.h ├── Demo └── Controller │ ├── AnnotationClusterViewController.h │ ├── AnnotationClusterViewController.m │ ├── BaseMapViewController.h │ ├── BaseMapViewController.m │ ├── PoiDetailViewController.h │ └── PoiDetailViewController.m ├── Images.xcassets ├── AppIcon.appiconset │ ├── Contents.json │ ├── icon-29@2x.png │ ├── icon-40@2x.png │ └── icon-60@2x.png └── LaunchImage.launchimage │ └── Contents.json ├── Resources ├── ClusterAnnotation1.png ├── ClusterAnnotation2.png ├── icon-29@2x.png ├── icon-40@2x.png ├── icon-60@2x.png └── qrcode.png ├── en.lproj └── InfoPlist.strings ├── extern ├── AMapSearchKit.framework │ ├── AMapSearchKit │ ├── Headers │ ├── Resources │ └── Versions │ │ ├── 2.2.1.1656 │ │ ├── AMapSearchKit │ │ └── Headers │ │ │ ├── AMapCommonObj.h │ │ │ ├── AMapSearchAPI.h │ │ │ └── AMapSearchObj.h │ │ └── Current └── MAMapKit.framework │ ├── Headers │ ├── MAMapKit │ ├── Resources │ └── Versions │ ├── 2.2.1.1650.60159 │ ├── Headers │ │ ├── MAAnnotation.h │ │ ├── MAAnnotationView.h │ │ ├── MACircle.h │ │ ├── MACircleView.h │ │ ├── MAGeodesicPolyline.h │ │ ├── MAGeometry.h │ │ ├── MAGroundOverlay.h │ │ ├── MAGroundOverlayView.h │ │ ├── MAMapKit.h │ │ ├── MAMapServices.h │ │ ├── MAMapView.h │ │ ├── MAMultiPoint.h │ │ ├── MAOfflineCity.h │ │ ├── MAOfflineItem.h │ │ ├── MAOfflineItemCommonCity.h │ │ ├── MAOfflineItemMunicipality.h │ │ ├── MAOfflineItemNationWide.h │ │ ├── MAOfflineMap.h │ │ ├── MAOfflineProvince.h │ │ ├── MAOverlay.h │ │ ├── MAOverlayPathView.h │ │ ├── MAOverlayView.h │ │ ├── MAPinAnnotationView.h │ │ ├── MAPointAnnotation.h │ │ ├── MAPolygon.h │ │ ├── MAPolygonView.h │ │ ├── MAPolyline.h │ │ ├── MAPolylineView.h │ │ ├── MAShape.h │ │ ├── MATileOverlay.h │ │ ├── MATileOverlayView.h │ │ ├── MATouchPoi.h │ │ ├── MATypes.h │ │ └── MAUserLocation.h │ ├── MAMapKit │ └── Resources │ │ └── AMap.bundle │ │ ├── AMap3D.bundle │ │ ├── bktile.data │ │ ├── bktile_n.data │ │ ├── dash.data │ │ ├── iconr.data │ │ ├── iconr_n.data │ │ ├── lineround.data │ │ ├── roadarrow.data │ │ ├── style_l.data │ │ ├── style_nl.data │ │ ├── style_sl.data │ │ ├── tbl.data │ │ ├── tgl.data │ │ ├── trl.data │ │ └── tyl.data │ │ ├── images │ │ ├── greenPin.png │ │ ├── greenPin@2x.png │ │ ├── greenPin_lift.png │ │ ├── greenPin_lift@2x.png │ │ ├── lineDashTexture.png │ │ ├── lineTexture.png │ │ ├── pin_shadow.png │ │ ├── pin_shadow@2x.png │ │ ├── purplePin.png │ │ ├── purplePin@2x.png │ │ ├── purplePin_lift.png │ │ ├── purplePin_lift@2x.png │ │ ├── redPin.png │ │ ├── redPin@2x.png │ │ ├── redPin_lift.png │ │ ├── redPin_lift@2x.png │ │ ├── userlocation.png │ │ └── userlocation@2x.png │ │ ├── offline │ │ └── offlinePackage.plist │ │ └── public_key.der │ └── Current ├── iOS_3D_ClusterAnnotation-Info.plist ├── iOS_3D_ClusterAnnotation-Prefix.pch └── main.m /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.swp 3 | *~.nib 4 | 5 | build/ 6 | 7 | *.pbxuser 8 | *.perspective 9 | *.perspectivev3 10 | 11 | *.mode1v3 12 | *.mode2v3 13 | 14 | xcuserdata 15 | *.xccheckout 16 | 17 | iOS_3D_ClusterAnnotation/Configuration/APIKey.h 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | iOS_3D_ClusterAnnotation 2 | ======================== 3 | 4 | MAMapKit 点聚合 5 | 6 | ### 前述 7 | 8 | - [高德官方网站申请key](http://id.amap.com/?ref=http%3A%2F%2Fapi.amap.com%2Fkey%2F). 9 | - 阅读[参考手册](http://api.amap.com/Public/reference/iOS%20API%20v2_3D/). 10 | - 如果有任何疑问也可以发问题到[官方论坛](http://bbs.amap.com/forum.php?gid=1). 11 | 12 | ### 使用教程 13 | 14 | - 调用ClusterAnnotation文件夹下的代码能够实现poi点聚合,使用步骤如下: 15 | - 初始化coordinateQuadTree。 16 | ```objc 17 | self.coordinateQuadTree = [[CoordinateQuadTree alloc] init]; 18 | ``` 19 | - 获得poi数组pois后,创建coordinateQuadTree。 20 | * 项目Demo通过关键字搜索获得poi数组数据,具体见工程。此处从获得poi数组开始说明。 21 | * 创建四叉树coordinateQuadTree来建立poi的四叉树索引。 22 | * 创建过程较为费时,建议另开线程。创建四叉树完成后,计算当前mapView下需要显示的annotation。 23 | ```objc 24 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 25 | /* 建立四叉树. */ 26 | [self.coordinateQuadTree buildTreeWithPOIs:respons.pois]; 27 | 28 | dispatch_async(dispatch_get_main_queue(), ^{ 29 | /* 计算当前mapView区域内需要显示的annotation. */ 30 | NSLog(@"First time calculate annotations."); 31 | [self addAnnotationsToMapView:self.mapView]; 32 | }); 33 | }); 34 | ``` 35 | 36 | - 根据CoordinateQuadTree四叉树索引,计算当前zoomLevel下,mapView区域内的annotation。 37 | ```objc 38 | - (void)addAnnotationsToMapView:(MAMapView *)mapView 39 | { 40 | /* 判断是否已建树. */ 41 | if (self.coordinateQuadTree.root == nil) 42 | { 43 | return; 44 | } 45 | /* 根据当前zoomLevel和zoomScale 进行annotation聚合. */ 46 | double zoomScale = self.mapView.bounds.size.width / self.mapView.visibleMapRect.size.width; 47 | /* 基于先前建立的四叉树索引,计算当前需要显示的annotations. */ 48 | NSArray *annotations = [self.coordinateQuadTree clusteredAnnotationsWithinMapRect:mapView.visibleMapRect 49 | withZoomScale:zoomScale 50 | andZoomLevel:mapView.zoomLevel]; 51 | 52 | /* 更新annotations. */ 53 | [self updateMapViewAnnotationsWithAnnotations:annotations]; 54 | } 55 | ``` 56 | - 更新annotations。对比mapView里已有的annotations,吐故纳新。 57 | ```objc 58 | /* 更新annotation. */ 59 | - (void)updateMapViewAnnotationsWithAnnotations:(NSArray *)annotations 60 | { 61 | /* 用户滑动时,保留仍然可用的标注,去除屏幕外标注,添加新增区域的标注 */ 62 | NSMutableSet *before = [NSMutableSet setWithArray:self.mapView.annotations]; 63 | [before removeObject:[self.mapView userLocation]]; 64 | NSSet *after = [NSSet setWithArray:annotations]; 65 | 66 | /* 保留仍然位于屏幕内的annotation. */ 67 | NSMutableSet *toKeep = [NSMutableSet setWithSet:before]; 68 | [toKeep intersectSet:after]; 69 | 70 | /* 需要添加的annotation. */ 71 | NSMutableSet *toAdd = [NSMutableSet setWithSet:after]; 72 | [toAdd minusSet:toKeep]; 73 | 74 | /* 删除位于屏幕外的annotation. */ 75 | NSMutableSet *toRemove = [NSMutableSet setWithSet:before]; 76 | [toRemove minusSet:after]; 77 | 78 | /* 更新. */ 79 | dispatch_async(dispatch_get_main_queue(), ^{ 80 | [self.mapView addAnnotations:[toAdd allObjects]]; 81 | [self.mapView removeAnnotations:[toRemove allObjects]]; 82 | }); 83 | } 84 | ``` 85 | - 实现MapView的delegate方法,根据anntation生成对应的View。annotationView的位置由其代表的poi平均位置决定,大小由poi数目决定。 86 | ```objc 87 | -(MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id)annotation 88 | { 89 | if ([annotation isKindOfClass:[ClusterAnnotation class]]) 90 | { 91 | /* dequeue重用annotationView代码. */ 92 | /* ... */ 93 | 94 | /* 设置annotationView的属性. */ 95 | annotationView.annotation = annotation; 96 | annotationView.count = [(ClusterAnnotation *)annotation count]; 97 | 98 | /* 设置annotationView的callout属性和calloutView代码. */ 99 | /* ... */ 100 | return annotationView; 101 | } 102 | return nil; 103 | } 104 | ``` 105 | 106 | - 在mapView显示区域改变时,需要重算并更新annotations。 107 | ```obj 108 | - (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated 109 | { 110 | /* mapView区域变化时重算annotation. */ 111 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 112 | [self addAnnotationsToMapView:self.mapView]; 113 | }); 114 | } 115 | ``` 116 | 117 | 118 | ### 架构 119 | 120 | ##### Controllers 121 | - `` 122 | * `BaseMapViewController` 地图基类 123 | - `AnnotationClusterViewController` poi点聚合 124 | * `PoiDetailViewController` 显示poi详细信息列表 125 | 126 | ##### View 127 | 128 | * `MAAnnotationView` 129 | - `ClusterAnnotationView` 自定义的聚合annotationView 130 | 131 | ##### Models 132 | 133 | * `Conform to ` 134 | - `ClusterAnnotation` 记录annotation的信息,如其代表的poi数组、poi的个数、poi平均坐标,并提供两个annotation是否Equal的判断 135 | * `CoordinateQuadTree` 封装的四叉树类 136 | * `QuadTree` 四叉树基本算法 137 | 138 | ### 截图效果 139 | 140 | ![ClusterAnnotation2](https://raw.githubusercontent.com/cysgit/iOS_3D_ClusterAnnotation/master/iOS_3D_ClusterAnnotation/Resources/ClusterAnnotation2.png) 141 | ![ClusterAnnotation1](https://raw.githubusercontent.com/cysgit/iOS_3D_ClusterAnnotation/master/iOS_3D_ClusterAnnotation/Resources/ClusterAnnotation1.png) 142 | ### 在线安装Demo 143 | 144 | * `手机扫描如下二维码直接安装` 145 | 146 | ![qrcode](https://raw.githubusercontent.com/cysgit/iOS_3D_ClusterAnnotation/master/iOS_3D_ClusterAnnotation/Resources/qrcode.png) 147 | 148 | * `手机上打开地址:` 149 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | C81D4FEE196D53AF00099DAC /* ClusterAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = C81D4FE6196D53AF00099DAC /* ClusterAnnotation.m */; }; 11 | C81D4FEF196D53AF00099DAC /* CoordinateQuadTree.m in Sources */ = {isa = PBXBuildFile; fileRef = C81D4FE8196D53AF00099DAC /* CoordinateQuadTree.m */; }; 12 | C81D4FF0196D53AF00099DAC /* QuadTree.m in Sources */ = {isa = PBXBuildFile; fileRef = C81D4FEA196D53AF00099DAC /* QuadTree.m */; }; 13 | C81D4FF1196D53AF00099DAC /* ClusterAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = C81D4FED196D53AF00099DAC /* ClusterAnnotationView.m */; }; 14 | C81D4FFA196D53C500099DAC /* AnnotationClusterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C81D4FF5196D53C500099DAC /* AnnotationClusterViewController.m */; }; 15 | C81D4FFB196D53C500099DAC /* BaseMapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C81D4FF7196D53C500099DAC /* BaseMapViewController.m */; }; 16 | C81D4FFC196D53C500099DAC /* PoiDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C81D4FF9196D53C500099DAC /* PoiDetailViewController.m */; }; 17 | C84710B9196B96DC00ED0DD7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C84710B8196B96DC00ED0DD7 /* Foundation.framework */; }; 18 | C84710BB196B96DC00ED0DD7 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C84710BA196B96DC00ED0DD7 /* CoreGraphics.framework */; }; 19 | C84710BD196B96DC00ED0DD7 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C84710BC196B96DC00ED0DD7 /* UIKit.framework */; }; 20 | C84710C3196B96DC00ED0DD7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C84710C1196B96DC00ED0DD7 /* InfoPlist.strings */; }; 21 | C84710C5196B96DC00ED0DD7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C84710C4196B96DC00ED0DD7 /* main.m */; }; 22 | C84710C9196B96DD00ED0DD7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C84710C8196B96DD00ED0DD7 /* AppDelegate.m */; }; 23 | C84710CC196B96DD00ED0DD7 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C84710CA196B96DD00ED0DD7 /* Main.storyboard */; }; 24 | C84710D1196B96DD00ED0DD7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C84710D0196B96DD00ED0DD7 /* Images.xcassets */; }; 25 | C8471113196BC53900ED0DD7 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8471112196BC53900ED0DD7 /* CoreLocation.framework */; }; 26 | C8471115196BC54B00ED0DD7 /* MAMapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8471114196BC54B00ED0DD7 /* MAMapKit.framework */; }; 27 | C8471117196BC55E00ED0DD7 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8471116196BC55E00ED0DD7 /* CoreTelephony.framework */; }; 28 | C8471119196BC56800ED0DD7 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8471118196BC56800ED0DD7 /* SystemConfiguration.framework */; }; 29 | C847111B196BC57800ED0DD7 /* libstdc++.6.0.9.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C847111A196BC57800ED0DD7 /* libstdc++.6.0.9.dylib */; }; 30 | C847111D196BC58800ED0DD7 /* libz.1.2.5.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C847111C196BC58800ED0DD7 /* libz.1.2.5.dylib */; }; 31 | C8471136196BC77D00ED0DD7 /* AMapSearchKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8471135196BC77D00ED0DD7 /* AMapSearchKit.framework */; }; 32 | C8471148196BCA1300ED0DD7 /* AMap.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C8471147196BCA1300ED0DD7 /* AMap.bundle */; }; 33 | C8F1DB31196D1A2C007BC6EC /* icon-40@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C8F1DB2E196D1A2C007BC6EC /* icon-40@2x.png */; }; 34 | C8F1DB32196D1A2C007BC6EC /* icon-29@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C8F1DB2F196D1A2C007BC6EC /* icon-29@2x.png */; }; 35 | C8F1DB33196D1A2C007BC6EC /* icon-60@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C8F1DB30196D1A2C007BC6EC /* icon-60@2x.png */; }; 36 | /* End PBXBuildFile section */ 37 | 38 | /* Begin PBXFileReference section */ 39 | C81D4FE5196D53AF00099DAC /* ClusterAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClusterAnnotation.h; sourceTree = ""; }; 40 | C81D4FE6196D53AF00099DAC /* ClusterAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClusterAnnotation.m; sourceTree = ""; }; 41 | C81D4FE7196D53AF00099DAC /* CoordinateQuadTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoordinateQuadTree.h; sourceTree = ""; }; 42 | C81D4FE8196D53AF00099DAC /* CoordinateQuadTree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoordinateQuadTree.m; sourceTree = ""; }; 43 | C81D4FE9196D53AF00099DAC /* QuadTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuadTree.h; sourceTree = ""; }; 44 | C81D4FEA196D53AF00099DAC /* QuadTree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuadTree.m; sourceTree = ""; }; 45 | C81D4FEC196D53AF00099DAC /* ClusterAnnotationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClusterAnnotationView.h; sourceTree = ""; }; 46 | C81D4FED196D53AF00099DAC /* ClusterAnnotationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClusterAnnotationView.m; sourceTree = ""; }; 47 | C81D4FF4196D53C500099DAC /* AnnotationClusterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnnotationClusterViewController.h; sourceTree = ""; }; 48 | C81D4FF5196D53C500099DAC /* AnnotationClusterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnnotationClusterViewController.m; sourceTree = ""; }; 49 | C81D4FF6196D53C500099DAC /* BaseMapViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseMapViewController.h; sourceTree = ""; }; 50 | C81D4FF7196D53C500099DAC /* BaseMapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseMapViewController.m; sourceTree = ""; }; 51 | C81D4FF8196D53C500099DAC /* PoiDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PoiDetailViewController.h; sourceTree = ""; }; 52 | C81D4FF9196D53C500099DAC /* PoiDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PoiDetailViewController.m; sourceTree = ""; }; 53 | C81D5043196E3E4800099DAC /* APIKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIKey.h; sourceTree = ""; }; 54 | C84710B5196B96DC00ED0DD7 /* ClusterAnnotationDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ClusterAnnotationDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | C84710B8196B96DC00ED0DD7 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 56 | C84710BA196B96DC00ED0DD7 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 57 | C84710BC196B96DC00ED0DD7 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 58 | C84710C0196B96DC00ED0DD7 /* iOS_3D_ClusterAnnotation-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iOS_3D_ClusterAnnotation-Info.plist"; sourceTree = ""; }; 59 | C84710C2196B96DC00ED0DD7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 60 | C84710C4196B96DC00ED0DD7 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 61 | C84710C6196B96DC00ED0DD7 /* iOS_3D_ClusterAnnotation-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOS_3D_ClusterAnnotation-Prefix.pch"; sourceTree = ""; }; 62 | C84710C7196B96DD00ED0DD7 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 63 | C84710C8196B96DD00ED0DD7 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 64 | C84710CB196B96DD00ED0DD7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 65 | C84710D0196B96DD00ED0DD7 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 66 | C84710D7196B96DD00ED0DD7 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 67 | C8471112196BC53900ED0DD7 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; 68 | C8471114196BC54B00ED0DD7 /* MAMapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MAMapKit.framework; path = iOS_3D_ClusterAnnotation/extern/MAMapKit.framework; sourceTree = ""; }; 69 | C8471116196BC55E00ED0DD7 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; 70 | C8471118196BC56800ED0DD7 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; 71 | C847111A196BC57800ED0DD7 /* libstdc++.6.0.9.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.6.0.9.dylib"; path = "usr/lib/libstdc++.6.0.9.dylib"; sourceTree = SDKROOT; }; 72 | C847111C196BC58800ED0DD7 /* libz.1.2.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.2.5.dylib; path = usr/lib/libz.1.2.5.dylib; sourceTree = SDKROOT; }; 73 | C8471135196BC77D00ED0DD7 /* AMapSearchKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AMapSearchKit.framework; path = iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework; sourceTree = ""; }; 74 | C8471147196BCA1300ED0DD7 /* AMap.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = AMap.bundle; path = iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle; sourceTree = ""; }; 75 | C8F1DB2E196D1A2C007BC6EC /* icon-40@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-40@2x.png"; path = "Resources/icon-40@2x.png"; sourceTree = ""; }; 76 | C8F1DB2F196D1A2C007BC6EC /* icon-29@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-29@2x.png"; path = "Resources/icon-29@2x.png"; sourceTree = ""; }; 77 | C8F1DB30196D1A2C007BC6EC /* icon-60@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "icon-60@2x.png"; path = "Resources/icon-60@2x.png"; sourceTree = ""; }; 78 | /* End PBXFileReference section */ 79 | 80 | /* Begin PBXFrameworksBuildPhase section */ 81 | C84710B2196B96DC00ED0DD7 /* Frameworks */ = { 82 | isa = PBXFrameworksBuildPhase; 83 | buildActionMask = 2147483647; 84 | files = ( 85 | C847111D196BC58800ED0DD7 /* libz.1.2.5.dylib in Frameworks */, 86 | C847111B196BC57800ED0DD7 /* libstdc++.6.0.9.dylib in Frameworks */, 87 | C8471119196BC56800ED0DD7 /* SystemConfiguration.framework in Frameworks */, 88 | C8471117196BC55E00ED0DD7 /* CoreTelephony.framework in Frameworks */, 89 | C8471115196BC54B00ED0DD7 /* MAMapKit.framework in Frameworks */, 90 | C8471136196BC77D00ED0DD7 /* AMapSearchKit.framework in Frameworks */, 91 | C8471113196BC53900ED0DD7 /* CoreLocation.framework in Frameworks */, 92 | C84710BB196B96DC00ED0DD7 /* CoreGraphics.framework in Frameworks */, 93 | C84710BD196B96DC00ED0DD7 /* UIKit.framework in Frameworks */, 94 | C84710B9196B96DC00ED0DD7 /* Foundation.framework in Frameworks */, 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | /* End PBXFrameworksBuildPhase section */ 99 | 100 | /* Begin PBXGroup section */ 101 | C81D4FE3196D52EA00099DAC /* ClusterAnnotation */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | C81D4FE4196D53AF00099DAC /* Model */, 105 | C81D4FEB196D53AF00099DAC /* View */, 106 | ); 107 | name = ClusterAnnotation; 108 | sourceTree = ""; 109 | }; 110 | C81D4FE4196D53AF00099DAC /* Model */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | C81D4FE5196D53AF00099DAC /* ClusterAnnotation.h */, 114 | C81D4FE6196D53AF00099DAC /* ClusterAnnotation.m */, 115 | C81D4FE7196D53AF00099DAC /* CoordinateQuadTree.h */, 116 | C81D4FE8196D53AF00099DAC /* CoordinateQuadTree.m */, 117 | C81D4FE9196D53AF00099DAC /* QuadTree.h */, 118 | C81D4FEA196D53AF00099DAC /* QuadTree.m */, 119 | ); 120 | name = Model; 121 | path = ClusterAnnotation/Model; 122 | sourceTree = ""; 123 | }; 124 | C81D4FEB196D53AF00099DAC /* View */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | C81D4FEC196D53AF00099DAC /* ClusterAnnotationView.h */, 128 | C81D4FED196D53AF00099DAC /* ClusterAnnotationView.m */, 129 | ); 130 | name = View; 131 | path = ClusterAnnotation/View; 132 | sourceTree = ""; 133 | }; 134 | C81D4FF2196D53C500099DAC /* Demo */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | C81D4FF3196D53C500099DAC /* Controller */, 138 | ); 139 | path = Demo; 140 | sourceTree = ""; 141 | }; 142 | C81D4FF3196D53C500099DAC /* Controller */ = { 143 | isa = PBXGroup; 144 | children = ( 145 | C81D4FF4196D53C500099DAC /* AnnotationClusterViewController.h */, 146 | C81D4FF5196D53C500099DAC /* AnnotationClusterViewController.m */, 147 | C81D4FF6196D53C500099DAC /* BaseMapViewController.h */, 148 | C81D4FF7196D53C500099DAC /* BaseMapViewController.m */, 149 | C81D4FF8196D53C500099DAC /* PoiDetailViewController.h */, 150 | C81D4FF9196D53C500099DAC /* PoiDetailViewController.m */, 151 | ); 152 | path = Controller; 153 | sourceTree = ""; 154 | }; 155 | C84710AC196B96DC00ED0DD7 = { 156 | isa = PBXGroup; 157 | children = ( 158 | C8471147196BCA1300ED0DD7 /* AMap.bundle */, 159 | C84710BE196B96DC00ED0DD7 /* iOS_3D_ClusterAnnotation */, 160 | C84710B7196B96DC00ED0DD7 /* Frameworks */, 161 | C84710B6196B96DC00ED0DD7 /* Products */, 162 | ); 163 | sourceTree = ""; 164 | }; 165 | C84710B6196B96DC00ED0DD7 /* Products */ = { 166 | isa = PBXGroup; 167 | children = ( 168 | C84710B5196B96DC00ED0DD7 /* ClusterAnnotationDemo.app */, 169 | ); 170 | name = Products; 171 | sourceTree = ""; 172 | }; 173 | C84710B7196B96DC00ED0DD7 /* Frameworks */ = { 174 | isa = PBXGroup; 175 | children = ( 176 | C8471135196BC77D00ED0DD7 /* AMapSearchKit.framework */, 177 | C847111C196BC58800ED0DD7 /* libz.1.2.5.dylib */, 178 | C847111A196BC57800ED0DD7 /* libstdc++.6.0.9.dylib */, 179 | C8471118196BC56800ED0DD7 /* SystemConfiguration.framework */, 180 | C8471116196BC55E00ED0DD7 /* CoreTelephony.framework */, 181 | C8471114196BC54B00ED0DD7 /* MAMapKit.framework */, 182 | C8471112196BC53900ED0DD7 /* CoreLocation.framework */, 183 | C84710B8196B96DC00ED0DD7 /* Foundation.framework */, 184 | C84710BA196B96DC00ED0DD7 /* CoreGraphics.framework */, 185 | C84710BC196B96DC00ED0DD7 /* UIKit.framework */, 186 | C84710D7196B96DD00ED0DD7 /* XCTest.framework */, 187 | ); 188 | name = Frameworks; 189 | sourceTree = ""; 190 | }; 191 | C84710BE196B96DC00ED0DD7 /* iOS_3D_ClusterAnnotation */ = { 192 | isa = PBXGroup; 193 | children = ( 194 | C81D4FE3196D52EA00099DAC /* ClusterAnnotation */, 195 | C81D4FF2196D53C500099DAC /* Demo */, 196 | C8471123196BC70500ED0DD7 /* Configuration */, 197 | C84710C7196B96DD00ED0DD7 /* AppDelegate.h */, 198 | C84710C8196B96DD00ED0DD7 /* AppDelegate.m */, 199 | C84710CA196B96DD00ED0DD7 /* Main.storyboard */, 200 | C84710D0196B96DD00ED0DD7 /* Images.xcassets */, 201 | C84710BF196B96DC00ED0DD7 /* Supporting Files */, 202 | ); 203 | path = iOS_3D_ClusterAnnotation; 204 | sourceTree = ""; 205 | }; 206 | C84710BF196B96DC00ED0DD7 /* Supporting Files */ = { 207 | isa = PBXGroup; 208 | children = ( 209 | C8F1DB2E196D1A2C007BC6EC /* icon-40@2x.png */, 210 | C8F1DB2F196D1A2C007BC6EC /* icon-29@2x.png */, 211 | C8F1DB30196D1A2C007BC6EC /* icon-60@2x.png */, 212 | C84710C0196B96DC00ED0DD7 /* iOS_3D_ClusterAnnotation-Info.plist */, 213 | C84710C1196B96DC00ED0DD7 /* InfoPlist.strings */, 214 | C84710C4196B96DC00ED0DD7 /* main.m */, 215 | C84710C6196B96DC00ED0DD7 /* iOS_3D_ClusterAnnotation-Prefix.pch */, 216 | ); 217 | name = "Supporting Files"; 218 | sourceTree = ""; 219 | }; 220 | C8471123196BC70500ED0DD7 /* Configuration */ = { 221 | isa = PBXGroup; 222 | children = ( 223 | C81D5043196E3E4800099DAC /* APIKey.h */, 224 | ); 225 | path = Configuration; 226 | sourceTree = ""; 227 | }; 228 | /* End PBXGroup section */ 229 | 230 | /* Begin PBXNativeTarget section */ 231 | C84710B4196B96DC00ED0DD7 /* ClusterAnnotationDemo */ = { 232 | isa = PBXNativeTarget; 233 | buildConfigurationList = C84710E7196B96DD00ED0DD7 /* Build configuration list for PBXNativeTarget "ClusterAnnotationDemo" */; 234 | buildPhases = ( 235 | C84710B1196B96DC00ED0DD7 /* Sources */, 236 | C84710B2196B96DC00ED0DD7 /* Frameworks */, 237 | C84710B3196B96DC00ED0DD7 /* Resources */, 238 | ); 239 | buildRules = ( 240 | ); 241 | dependencies = ( 242 | ); 243 | name = ClusterAnnotationDemo; 244 | productName = iOS_3D_ClusterAnnotation; 245 | productReference = C84710B5196B96DC00ED0DD7 /* ClusterAnnotationDemo.app */; 246 | productType = "com.apple.product-type.application"; 247 | }; 248 | /* End PBXNativeTarget section */ 249 | 250 | /* Begin PBXProject section */ 251 | C84710AD196B96DC00ED0DD7 /* Project object */ = { 252 | isa = PBXProject; 253 | attributes = { 254 | LastUpgradeCheck = 0510; 255 | ORGANIZATIONNAME = "yi chen"; 256 | }; 257 | buildConfigurationList = C84710B0196B96DC00ED0DD7 /* Build configuration list for PBXProject "iOS_3D_ClusterAnnotation" */; 258 | compatibilityVersion = "Xcode 3.2"; 259 | developmentRegion = English; 260 | hasScannedForEncodings = 0; 261 | knownRegions = ( 262 | en, 263 | Base, 264 | ); 265 | mainGroup = C84710AC196B96DC00ED0DD7; 266 | productRefGroup = C84710B6196B96DC00ED0DD7 /* Products */; 267 | projectDirPath = ""; 268 | projectRoot = ""; 269 | targets = ( 270 | C84710B4196B96DC00ED0DD7 /* ClusterAnnotationDemo */, 271 | ); 272 | }; 273 | /* End PBXProject section */ 274 | 275 | /* Begin PBXResourcesBuildPhase section */ 276 | C84710B3196B96DC00ED0DD7 /* Resources */ = { 277 | isa = PBXResourcesBuildPhase; 278 | buildActionMask = 2147483647; 279 | files = ( 280 | C8F1DB32196D1A2C007BC6EC /* icon-29@2x.png in Resources */, 281 | C8471148196BCA1300ED0DD7 /* AMap.bundle in Resources */, 282 | C8F1DB33196D1A2C007BC6EC /* icon-60@2x.png in Resources */, 283 | C84710D1196B96DD00ED0DD7 /* Images.xcassets in Resources */, 284 | C84710C3196B96DC00ED0DD7 /* InfoPlist.strings in Resources */, 285 | C84710CC196B96DD00ED0DD7 /* Main.storyboard in Resources */, 286 | C8F1DB31196D1A2C007BC6EC /* icon-40@2x.png in Resources */, 287 | ); 288 | runOnlyForDeploymentPostprocessing = 0; 289 | }; 290 | /* End PBXResourcesBuildPhase section */ 291 | 292 | /* Begin PBXSourcesBuildPhase section */ 293 | C84710B1196B96DC00ED0DD7 /* Sources */ = { 294 | isa = PBXSourcesBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | C81D4FF0196D53AF00099DAC /* QuadTree.m in Sources */, 298 | C84710C9196B96DD00ED0DD7 /* AppDelegate.m in Sources */, 299 | C81D4FFB196D53C500099DAC /* BaseMapViewController.m in Sources */, 300 | C81D4FEF196D53AF00099DAC /* CoordinateQuadTree.m in Sources */, 301 | C81D4FFC196D53C500099DAC /* PoiDetailViewController.m in Sources */, 302 | C81D4FFA196D53C500099DAC /* AnnotationClusterViewController.m in Sources */, 303 | C81D4FF1196D53AF00099DAC /* ClusterAnnotationView.m in Sources */, 304 | C84710C5196B96DC00ED0DD7 /* main.m in Sources */, 305 | C81D4FEE196D53AF00099DAC /* ClusterAnnotation.m in Sources */, 306 | ); 307 | runOnlyForDeploymentPostprocessing = 0; 308 | }; 309 | /* End PBXSourcesBuildPhase section */ 310 | 311 | /* Begin PBXVariantGroup section */ 312 | C84710C1196B96DC00ED0DD7 /* InfoPlist.strings */ = { 313 | isa = PBXVariantGroup; 314 | children = ( 315 | C84710C2196B96DC00ED0DD7 /* en */, 316 | ); 317 | name = InfoPlist.strings; 318 | sourceTree = ""; 319 | }; 320 | C84710CA196B96DD00ED0DD7 /* Main.storyboard */ = { 321 | isa = PBXVariantGroup; 322 | children = ( 323 | C84710CB196B96DD00ED0DD7 /* Base */, 324 | ); 325 | name = Main.storyboard; 326 | sourceTree = ""; 327 | }; 328 | /* End PBXVariantGroup section */ 329 | 330 | /* Begin XCBuildConfiguration section */ 331 | C84710E5196B96DD00ED0DD7 /* Debug */ = { 332 | isa = XCBuildConfiguration; 333 | buildSettings = { 334 | ALWAYS_SEARCH_USER_PATHS = NO; 335 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 336 | CLANG_CXX_LIBRARY = "libc++"; 337 | CLANG_ENABLE_MODULES = YES; 338 | CLANG_ENABLE_OBJC_ARC = YES; 339 | CLANG_WARN_BOOL_CONVERSION = YES; 340 | CLANG_WARN_CONSTANT_CONVERSION = YES; 341 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 342 | CLANG_WARN_EMPTY_BODY = YES; 343 | CLANG_WARN_ENUM_CONVERSION = YES; 344 | CLANG_WARN_INT_CONVERSION = YES; 345 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 346 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 347 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 348 | COPY_PHASE_STRIP = NO; 349 | GCC_C_LANGUAGE_STANDARD = gnu99; 350 | GCC_DYNAMIC_NO_PIC = NO; 351 | GCC_OPTIMIZATION_LEVEL = 0; 352 | GCC_PREPROCESSOR_DEFINITIONS = ( 353 | "DEBUG=1", 354 | "$(inherited)", 355 | ); 356 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 357 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 358 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 359 | GCC_WARN_UNDECLARED_SELECTOR = YES; 360 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 361 | GCC_WARN_UNUSED_FUNCTION = YES; 362 | GCC_WARN_UNUSED_VARIABLE = YES; 363 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 364 | ONLY_ACTIVE_ARCH = YES; 365 | SDKROOT = iphoneos; 366 | }; 367 | name = Debug; 368 | }; 369 | C84710E6196B96DD00ED0DD7 /* Release */ = { 370 | isa = XCBuildConfiguration; 371 | buildSettings = { 372 | ALWAYS_SEARCH_USER_PATHS = NO; 373 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 374 | CLANG_CXX_LIBRARY = "libc++"; 375 | CLANG_ENABLE_MODULES = YES; 376 | CLANG_ENABLE_OBJC_ARC = YES; 377 | CLANG_WARN_BOOL_CONVERSION = YES; 378 | CLANG_WARN_CONSTANT_CONVERSION = YES; 379 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 380 | CLANG_WARN_EMPTY_BODY = YES; 381 | CLANG_WARN_ENUM_CONVERSION = YES; 382 | CLANG_WARN_INT_CONVERSION = YES; 383 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 384 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 385 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 386 | COPY_PHASE_STRIP = YES; 387 | ENABLE_NS_ASSERTIONS = NO; 388 | GCC_C_LANGUAGE_STANDARD = gnu99; 389 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 390 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 391 | GCC_WARN_UNDECLARED_SELECTOR = YES; 392 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 393 | GCC_WARN_UNUSED_FUNCTION = YES; 394 | GCC_WARN_UNUSED_VARIABLE = YES; 395 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 396 | SDKROOT = iphoneos; 397 | VALIDATE_PRODUCT = YES; 398 | }; 399 | name = Release; 400 | }; 401 | C84710E8196B96DD00ED0DD7 /* Debug */ = { 402 | isa = XCBuildConfiguration; 403 | buildSettings = { 404 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 405 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 406 | CODE_SIGN_IDENTITY = "iPhone Developer: song xiaojian (4D2LR3BAF2)"; 407 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: song xiaojian (4D2LR3BAF2)"; 408 | FRAMEWORK_SEARCH_PATHS = ( 409 | "$(inherited)", 410 | "$(PROJECT_DIR)/iOS_3D_ClusterAnnotation/extern", 411 | ); 412 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 413 | GCC_PREFIX_HEADER = "iOS_3D_ClusterAnnotation/iOS_3D_ClusterAnnotation-Prefix.pch"; 414 | INFOPLIST_FILE = "iOS_3D_ClusterAnnotation/iOS_3D_ClusterAnnotation-Info.plist"; 415 | PRODUCT_NAME = "$(TARGET_NAME)"; 416 | VALID_ARCHS = "armv7 armv7s"; 417 | WRAPPER_EXTENSION = app; 418 | }; 419 | name = Debug; 420 | }; 421 | C84710E9196B96DD00ED0DD7 /* Release */ = { 422 | isa = XCBuildConfiguration; 423 | buildSettings = { 424 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 425 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 426 | CODE_SIGN_IDENTITY = "iPhone Distribution: AutoNavi Software Co., Ltd."; 427 | FRAMEWORK_SEARCH_PATHS = ( 428 | "$(inherited)", 429 | "$(PROJECT_DIR)/iOS_3D_ClusterAnnotation/extern", 430 | ); 431 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 432 | GCC_PREFIX_HEADER = "iOS_3D_ClusterAnnotation/iOS_3D_ClusterAnnotation-Prefix.pch"; 433 | INFOPLIST_FILE = "iOS_3D_ClusterAnnotation/iOS_3D_ClusterAnnotation-Info.plist"; 434 | PRODUCT_NAME = "$(TARGET_NAME)"; 435 | VALID_ARCHS = "armv7 armv7s"; 436 | WRAPPER_EXTENSION = app; 437 | }; 438 | name = Release; 439 | }; 440 | /* End XCBuildConfiguration section */ 441 | 442 | /* Begin XCConfigurationList section */ 443 | C84710B0196B96DC00ED0DD7 /* Build configuration list for PBXProject "iOS_3D_ClusterAnnotation" */ = { 444 | isa = XCConfigurationList; 445 | buildConfigurations = ( 446 | C84710E5196B96DD00ED0DD7 /* Debug */, 447 | C84710E6196B96DD00ED0DD7 /* Release */, 448 | ); 449 | defaultConfigurationIsVisible = 0; 450 | defaultConfigurationName = Release; 451 | }; 452 | C84710E7196B96DD00ED0DD7 /* Build configuration list for PBXNativeTarget "ClusterAnnotationDemo" */ = { 453 | isa = XCConfigurationList; 454 | buildConfigurations = ( 455 | C84710E8196B96DD00ED0DD7 /* Debug */, 456 | C84710E9196B96DD00ED0DD7 /* Release */, 457 | ); 458 | defaultConfigurationIsVisible = 0; 459 | defaultConfigurationName = Release; 460 | }; 461 | /* End XCConfigurationList section */ 462 | }; 463 | rootObject = C84710AD196B96DC00ED0DD7 /* Project object */; 464 | } 465 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation.xcodeproj/project.xcworkspace/xcshareddata/iOS_3D_ClusterAnnotation.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | A6742916-E2D7-4B7A-8576-212466835A84 9 | IDESourceControlProjectName 10 | iOS_3D_ClusterAnnotation 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 966E6682-869E-4CFD-884B-9CCD06D0EBFB 14 | https://github.com/cysgit/iOS_3D_ClusterAnnotation.git 15 | 16 | IDESourceControlProjectPath 17 | iOS_3D_ClusterAnnotation.xcodeproj/project.xcworkspace 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | 966E6682-869E-4CFD-884B-9CCD06D0EBFB 21 | ../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/cysgit/iOS_3D_ClusterAnnotation.git 25 | IDESourceControlProjectVersion 26 | 110 27 | IDESourceControlProjectWCCIdentifier 28 | 966E6682-869E-4CFD-884B-9CCD06D0EBFB 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | 966E6682-869E-4CFD-884B-9CCD06D0EBFB 36 | IDESourceControlWCCName 37 | iOS_3D_ClusterAnnotation 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // iOS_3D_ClusterAnnotation 4 | // 5 | // Created by yi chen on 14-7-8. 6 | // Copyright (c) 2014年 yi chen. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // iOS_3D_ClusterAnnotation 4 | // 5 | // Created by yi chen on 14-7-8. 6 | // Copyright (c) 2014年 yi chen. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "APIKey.h" 11 | #import 12 | #import "AnnotationClusterViewController.h" 13 | 14 | @implementation AppDelegate 15 | 16 | - (void)configureAPIKey 17 | { 18 | if ([APIKey length] == 0) 19 | { 20 | NSString *name = [NSString stringWithFormat:@"\nSDKVersion:%@\nFILE:%s\nLINE:%d\nMETHOD:%s", [MAMapServices sharedServices].SDKVersion, __FILE__, __LINE__, __func__]; 21 | NSString *reason = [NSString stringWithFormat:@"请首先配置APIKey.h中的APIKey, 申请APIKey参考见 http://api.amap.com"]; 22 | 23 | @throw [NSException exceptionWithName:name 24 | reason:reason 25 | userInfo:nil]; 26 | } 27 | 28 | [MAMapServices sharedServices].apiKey = (NSString *)APIKey; 29 | } 30 | 31 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 32 | { 33 | // Override point for customization after application launch. 34 | [self configureAPIKey]; 35 | 36 | AnnotationClusterViewController *mainViewController = [[AnnotationClusterViewController alloc] init]; 37 | 38 | self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:mainViewController]; 39 | 40 | self.window.backgroundColor = [UIColor whiteColor]; 41 | [self.window makeKeyAndVisible]; 42 | 43 | return YES; 44 | } 45 | 46 | - (void)applicationWillResignActive:(UIApplication *)application 47 | { 48 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 49 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 50 | } 51 | 52 | - (void)applicationDidEnterBackground:(UIApplication *)application 53 | { 54 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 55 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 56 | } 57 | 58 | - (void)applicationWillEnterForeground:(UIApplication *)application 59 | { 60 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 61 | } 62 | 63 | - (void)applicationDidBecomeActive:(UIApplication *)application 64 | { 65 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 66 | } 67 | 68 | - (void)applicationWillTerminate:(UIApplication *)application 69 | { 70 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 71 | } 72 | 73 | @end 74 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/ClusterAnnotation/Model/ClusterAnnotation.h: -------------------------------------------------------------------------------- 1 | // 2 | // ClusterAnnotation.h 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | @interface ClusterAnnotation : NSObject 14 | 15 | @property (assign, nonatomic) CLLocationCoordinate2D coordinate; //poi的平均位置 16 | @property (assign, nonatomic) NSInteger count; 17 | @property (nonatomic, strong) NSMutableArray *pois; 18 | @property (nonatomic, strong) NSString *title; 19 | @property (nonatomic, strong) NSString *subtitle; 20 | 21 | 22 | - (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate count:(NSInteger)count; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/ClusterAnnotation/Model/ClusterAnnotation.m: -------------------------------------------------------------------------------- 1 | // 2 | // ClusterAnnotation.m 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import "ClusterAnnotation.h" 10 | 11 | @implementation ClusterAnnotation 12 | 13 | #pragma mark - compare 14 | 15 | - (NSUInteger)hash 16 | { 17 | NSString *toHash = [NSString stringWithFormat:@"%.5F%.5F%d", self.coordinate.latitude, self.coordinate.longitude, self.count]; 18 | return [toHash hash]; 19 | } 20 | 21 | - (BOOL)isEqual:(id)object 22 | { 23 | return [self hash] == [object hash]; 24 | } 25 | 26 | #pragma mark - Life Cycle 27 | 28 | - (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate count:(NSInteger)count 29 | { 30 | self = [super init]; 31 | if (self) 32 | { 33 | _coordinate = coordinate; 34 | _count = count; 35 | _pois = [NSMutableArray arrayWithCapacity:count]; 36 | } 37 | return self; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/ClusterAnnotation/Model/CoordinateQuadTree.h: -------------------------------------------------------------------------------- 1 | // 2 | // CoordinateQuadTree.h 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "QuadTree.h" 12 | 13 | @interface CoordinateQuadTree : NSObject 14 | 15 | @property (nonatomic, assign) QuadTreeNode * root; 16 | 17 | - (void)buildTreeWithPOIs:(NSArray *)pois; 18 | - (void)clean; 19 | 20 | - (NSArray *)clusteredAnnotationsWithinMapRect:(MAMapRect)rect withZoomScale:(double)zoomScale andZoomLevel:(double)zoomLevel; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/ClusterAnnotation/Model/CoordinateQuadTree.m: -------------------------------------------------------------------------------- 1 | // 2 | // CoordinateQuadTree.m 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "CoordinateQuadTree.h" 12 | #import "ClusterAnnotation.h" 13 | 14 | QuadTreeNodeData QuadTreeNodeDataForAMapPOI(AMapPOI* poi) 15 | { 16 | return QuadTreeNodeDataMake(poi.location.latitude, poi.location.longitude, (__bridge_retained void *)(poi)); 17 | } 18 | 19 | BoundingBox BoundingBoxForMapRect(MAMapRect mapRect) 20 | { 21 | CLLocationCoordinate2D topLeft = MACoordinateForMapPoint(mapRect.origin); 22 | CLLocationCoordinate2D botRight = MACoordinateForMapPoint(MAMapPointMake(MAMapRectGetMaxX(mapRect), MAMapRectGetMaxY(mapRect))); 23 | 24 | CLLocationDegrees minLat = botRight.latitude; 25 | CLLocationDegrees maxLat = topLeft.latitude; 26 | 27 | CLLocationDegrees minLon = topLeft.longitude; 28 | CLLocationDegrees maxLon = botRight.longitude; 29 | 30 | return BoundingBoxMake(minLat, minLon, maxLat, maxLon); 31 | } 32 | 33 | float CellSizeForZoomLevel(double zoomLevel) 34 | { 35 | /*zoomLevel越大,cellSize越小. */ 36 | if (zoomLevel < 13.0) 37 | { 38 | return 64; 39 | } 40 | else if (zoomLevel <15.0) 41 | { 42 | return 32; 43 | } 44 | else if (zoomLevel <18.0) 45 | { 46 | return 16; 47 | } 48 | else if (zoomLevel < 20.0) 49 | { 50 | return 8; 51 | } 52 | 53 | return 64; 54 | } 55 | 56 | BoundingBox quadTreeNodeDataArrayForPOIs(QuadTreeNodeData *dataArray, NSArray * pois) 57 | { 58 | CLLocationDegrees minX = ((AMapPOI *)pois[0]).location.latitude; 59 | CLLocationDegrees maxX = ((AMapPOI *)pois[0]).location.latitude; 60 | 61 | CLLocationDegrees minY = ((AMapPOI *)pois[0]).location.longitude; 62 | CLLocationDegrees maxY = ((AMapPOI *)pois[0]).location.longitude; 63 | 64 | for (NSInteger i = 0; i < [pois count]; i++) 65 | { 66 | dataArray[i] = QuadTreeNodeDataForAMapPOI(pois[i]); 67 | 68 | if (dataArray[i].x < minX) 69 | { 70 | minX = dataArray[i].x; 71 | } 72 | 73 | if (dataArray[i].x > maxX) 74 | { 75 | maxX = dataArray[i].x; 76 | } 77 | 78 | if (dataArray[i].y < minY) 79 | { 80 | minY = dataArray[i].y; 81 | } 82 | 83 | if (dataArray[i].y > maxY) 84 | { 85 | maxY = dataArray[i].y; 86 | } 87 | } 88 | 89 | return BoundingBoxMake(minX, minY, maxX, maxY); 90 | } 91 | 92 | #pragma mark - 93 | 94 | @implementation CoordinateQuadTree 95 | 96 | #pragma mark Utility 97 | 98 | - (NSArray *)clusteredAnnotationsWithinMapRect:(MAMapRect)rect withZoomScale:(double)zoomScale andZoomLevel:(double)zoomLevel 99 | { 100 | double CellSize = CellSizeForZoomLevel(zoomLevel); 101 | double scaleFactor = zoomScale / CellSize; 102 | 103 | NSInteger minX = floor(MAMapRectGetMinX(rect) * scaleFactor); 104 | NSInteger maxX = floor(MAMapRectGetMaxX(rect) * scaleFactor); 105 | NSInteger minY = floor(MAMapRectGetMinY(rect) * scaleFactor); 106 | NSInteger maxY = floor(MAMapRectGetMaxY(rect) * scaleFactor); 107 | 108 | NSMutableArray *clusteredAnnotations = [[NSMutableArray alloc] init]; 109 | for (NSInteger x = minX; x <= maxX; x++) 110 | { 111 | for (NSInteger y = minY; y <= maxY; y++) 112 | { 113 | MAMapRect mapRect = MAMapRectMake(x / scaleFactor, y / scaleFactor, 1.0 / scaleFactor, 1.0 / scaleFactor); 114 | 115 | __block double totalX = 0; 116 | __block double totalY = 0; 117 | __block int count = 0; 118 | 119 | NSMutableArray *pois = [[NSMutableArray alloc] init]; 120 | 121 | /* 查询区域内数据的个数. */ 122 | QuadTreeGatherDataInRange(self.root, BoundingBoxForMapRect(mapRect), ^(QuadTreeNodeData data) 123 | { 124 | totalX += data.x; 125 | totalY += data.y; 126 | count++; 127 | 128 | [pois addObject:(__bridge AMapPOI *)data.data]; 129 | 130 | }); 131 | 132 | /* 若区域内仅有一个数据. */ 133 | if (count == 1) 134 | { 135 | CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(totalX, totalY); 136 | ClusterAnnotation *annotation = [[ClusterAnnotation alloc] initWithCoordinate:coordinate count:count]; 137 | annotation.pois = pois; 138 | AMapPOI *poi = [pois lastObject]; 139 | annotation.title = poi.name; 140 | annotation.subtitle = poi.address; 141 | [clusteredAnnotations addObject:annotation]; 142 | } 143 | 144 | /* 若区域内有多个数据 按数据的中心位置画点. */ 145 | if (count > 1) 146 | { 147 | CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(totalX / count, totalY / count); 148 | ClusterAnnotation *annotation = [[ClusterAnnotation alloc] initWithCoordinate:coordinate count:count]; 149 | annotation.pois = pois; 150 | annotation.title = [NSString stringWithFormat:@"%d results here.", [pois count]]; 151 | [clusteredAnnotations addObject:annotation]; 152 | } 153 | } 154 | } 155 | 156 | return [NSArray arrayWithArray:clusteredAnnotations]; 157 | } 158 | 159 | #pragma mark Initilization 160 | 161 | - (void)buildTreeWithPOIs:(NSArray *)pois 162 | { 163 | QuadTreeNodeData *dataArray = malloc(sizeof(QuadTreeNodeData) * [pois count]); 164 | 165 | BoundingBox maxBounding = quadTreeNodeDataArrayForPOIs(dataArray, pois); 166 | 167 | /*若已有四叉树,清空.*/ 168 | [self clean]; 169 | 170 | NSLog(@"build tree."); 171 | /*建立四叉树索引. */ 172 | self.root = QuadTreeBuildWithData(dataArray, [pois count], maxBounding, 4); 173 | } 174 | 175 | #pragma mark Life Cycle 176 | 177 | - (void)clean 178 | { 179 | if (self.root) 180 | { 181 | NSLog(@"free tree."); 182 | FreeQuadTreeNode(self.root); 183 | } 184 | 185 | } 186 | 187 | @end 188 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/ClusterAnnotation/Model/QuadTree.h: -------------------------------------------------------------------------------- 1 | // 2 | // QuadTree.h 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef struct QuadTreeNodeData 12 | { 13 | double x; 14 | double y; 15 | void * data; 16 | } QuadTreeNodeData; 17 | QuadTreeNodeData QuadTreeNodeDataMake(double x, double y, void* data); 18 | 19 | typedef struct BoundingBox 20 | { 21 | double x0; double y0; 22 | double xm; double ym; 23 | } BoundingBox; 24 | BoundingBox BoundingBoxMake(double x0, double y0, double xm, double ym); 25 | 26 | typedef struct QuadTreeNode 27 | { 28 | struct QuadTreeNode * northEast; 29 | struct QuadTreeNode * northWest; 30 | struct QuadTreeNode * southEast; 31 | struct QuadTreeNode * southWest; 32 | 33 | BoundingBox boundingBox; 34 | int bucketCapacity; 35 | QuadTreeNodeData * points; 36 | int pointsCount; 37 | } QuadTreeNode; 38 | QuadTreeNode* QuadTreeNodeMake(BoundingBox boundingBox, int bucketCapacity); 39 | 40 | /*! 41 | 建立四叉树 42 | @param data 用于建树的节点数据指针 43 | @param count 节点数据的个数 44 | @param boundingBox 四叉树覆盖的范围 45 | @param capacity 单节点能容纳的节点数据个数 46 | @return 四叉树的根节点 47 | */ 48 | QuadTreeNode* QuadTreeBuildWithData(QuadTreeNodeData *data, int count, BoundingBox boundingBox, int capacity); 49 | 50 | /*! 51 | 在四叉树中插入节点数据 52 | @param node 插入的节点位置 53 | @param data 需要插入的节点数据 54 | @return 成功插入返回true,否则false 55 | */ 56 | bool QuadTreeNodeInsertData(QuadTreeNode* node, QuadTreeNodeData data); 57 | 58 | /*! 59 | 拆分节点 60 | @param node 输入需拆分的节点 61 | */ 62 | void QuadTreeNodeSubdivide(QuadTreeNode* node); 63 | 64 | /*! 65 | 判断节点数据是否在box范围内 66 | @param box box范围 67 | @param data 节点数据 68 | @return 若data在box内,返回true,否则false 69 | */ 70 | bool BoundingBoxContainsData(BoundingBox box, QuadTreeNodeData data); 71 | 72 | /*! 73 | 判断两box是否相交 74 | */ 75 | bool BoundingBoxIntersectsBoundingBox(BoundingBox b1, BoundingBox b2); 76 | 77 | typedef void(^DataReturnBlock)(QuadTreeNodeData data); 78 | void QuadTreeGatherDataInRange(QuadTreeNode* node, BoundingBox range, DataReturnBlock block); 79 | 80 | /*! 81 | 清空四叉树 82 | @param node 四叉数根节点 83 | */ 84 | void FreeQuadTreeNode(QuadTreeNode* node); 85 | 86 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/ClusterAnnotation/Model/QuadTree.m: -------------------------------------------------------------------------------- 1 | // 2 | // QuadTree.m 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import "QuadTree.h" 10 | 11 | #pragma mark - Constructors 12 | 13 | QuadTreeNodeData QuadTreeNodeDataMake(double x, double y, void* data) 14 | { 15 | QuadTreeNodeData d; d.x = x; d.y = y; d.data = data; 16 | return d; 17 | } 18 | 19 | BoundingBox BoundingBoxMake(double x0, double y0, double xm, double ym) 20 | { 21 | BoundingBox bb; bb.x0 = x0; bb.y0 = y0; bb.xm = xm; bb.ym = ym; 22 | return bb; 23 | } 24 | 25 | QuadTreeNode* QuadTreeNodeMake(BoundingBox boundary, int bucketCapacity) 26 | { 27 | QuadTreeNode* node = malloc(sizeof(QuadTreeNode)); 28 | node->northWest = NULL; 29 | node->northEast = NULL; 30 | node->southWest = NULL; 31 | node->southEast = NULL; 32 | 33 | node->boundingBox = boundary; 34 | node->bucketCapacity = bucketCapacity; 35 | node->pointsCount = 0; 36 | node->points = malloc(sizeof(QuadTreeNodeData) * bucketCapacity); 37 | 38 | return node; 39 | } 40 | 41 | #pragma mark - Bounding Box Functions 42 | 43 | bool BoundingBoxContainsData(BoundingBox box, QuadTreeNodeData data) 44 | { 45 | bool containsX = box.x0 <= data.x && data.x <= box.xm; 46 | bool containsY = box.y0 <= data.y && data.y <= box.ym; 47 | 48 | return containsX && containsY; 49 | } 50 | 51 | bool BoundingBoxIntersectsBoundingBox(BoundingBox b1, BoundingBox b2) 52 | { 53 | return (b1.x0 <= b2.xm && b1.xm >= b2.x0 && b1.y0 <= b2.ym && b1.ym >= b2.y0); 54 | } 55 | 56 | #pragma mark - Quad Tree Functions 57 | 58 | void QuadTreeNodeSubdivide(QuadTreeNode* node) 59 | { 60 | BoundingBox box = node->boundingBox; 61 | 62 | double xMid = (box.xm + box.x0) / 2.0; 63 | double yMid = (box.ym + box.y0) / 2.0; 64 | 65 | BoundingBox northWest = BoundingBoxMake(box.x0, box.y0, xMid, yMid); 66 | node->northWest = QuadTreeNodeMake(northWest, node->bucketCapacity); 67 | 68 | BoundingBox northEast = BoundingBoxMake(xMid, box.y0, box.xm, yMid); 69 | node->northEast = QuadTreeNodeMake(northEast, node->bucketCapacity); 70 | 71 | BoundingBox southWest = BoundingBoxMake(box.x0, yMid, xMid, box.ym); 72 | node->southWest = QuadTreeNodeMake(southWest, node->bucketCapacity); 73 | 74 | BoundingBox southEast = BoundingBoxMake(xMid, yMid, box.xm, box.ym); 75 | node->southEast = QuadTreeNodeMake(southEast, node->bucketCapacity); 76 | } 77 | 78 | bool QuadTreeNodeInsertData(QuadTreeNode* node, QuadTreeNodeData data) 79 | { 80 | if (!BoundingBoxContainsData(node->boundingBox, data)) 81 | { 82 | return false; 83 | } 84 | 85 | if (node->pointsCount < node->bucketCapacity) 86 | { 87 | node->points[node->pointsCount++] = data; 88 | return true; 89 | } 90 | 91 | /* 若节点容量已满,且该节点为叶子节点,则向下扩展. */ 92 | if (node->northWest == NULL) 93 | { 94 | QuadTreeNodeSubdivide(node); 95 | } 96 | 97 | if (QuadTreeNodeInsertData(node->northWest, data)) return true; 98 | if (QuadTreeNodeInsertData(node->northEast, data)) return true; 99 | if (QuadTreeNodeInsertData(node->southWest, data)) return true; 100 | if (QuadTreeNodeInsertData(node->southEast, data)) return true; 101 | 102 | return false; 103 | } 104 | 105 | QuadTreeNode* QuadTreeBuildWithData(QuadTreeNodeData *data, int count, BoundingBox boundingBox, int capacity) 106 | { 107 | 108 | QuadTreeNode* root = QuadTreeNodeMake(boundingBox, capacity); 109 | for (int i = 0; i < count; i++) 110 | { 111 | QuadTreeNodeInsertData(root, data[i]); 112 | } 113 | 114 | return root; 115 | } 116 | 117 | void QuadTreeGatherDataInRange(QuadTreeNode* node, BoundingBox range, DataReturnBlock block) 118 | { 119 | /* 若节点的覆盖范围与range不相交,则返回. */ 120 | if (!BoundingBoxIntersectsBoundingBox(node->boundingBox, range)) 121 | { 122 | return; 123 | } 124 | 125 | 126 | for (int i = 0; i < node->pointsCount; i++) 127 | { 128 | /* 若节点数据在range内,则调用block记录. */ 129 | if (BoundingBoxContainsData(range, node->points[i])) 130 | { 131 | block(node->points[i]); 132 | } 133 | } 134 | 135 | /* 若已是叶子节点,返回. */ 136 | if (node->northWest == NULL) 137 | { 138 | return; 139 | } 140 | 141 | /* 不是叶子节点,继续向下查找. */ 142 | QuadTreeGatherDataInRange(node->northWest, range, block); 143 | QuadTreeGatherDataInRange(node->northEast, range, block); 144 | QuadTreeGatherDataInRange(node->southWest, range, block); 145 | QuadTreeGatherDataInRange(node->southEast, range, block); 146 | 147 | } 148 | 149 | void FreeQuadTreeNode(QuadTreeNode* node) 150 | { 151 | if (node->northWest != NULL) FreeQuadTreeNode(node->northWest); 152 | if (node->northEast != NULL) FreeQuadTreeNode(node->northEast); 153 | if (node->southWest != NULL) FreeQuadTreeNode(node->southWest); 154 | if (node->southEast != NULL) FreeQuadTreeNode(node->southEast); 155 | 156 | for (int i=0; i < node->pointsCount; i++) 157 | { 158 | free(node->points[i].data); 159 | } 160 | free(node->points); 161 | free(node); 162 | } -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/ClusterAnnotation/View/ClusterAnnotationView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ClusterAnnotationView.h 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | 13 | @interface ClusterAnnotationView : MAAnnotationView 14 | 15 | @property (nonatomic, assign) NSUInteger count; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/ClusterAnnotation/View/ClusterAnnotationView.m: -------------------------------------------------------------------------------- 1 | // 2 | // ClusterAnnotationView.m 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import "ClusterAnnotationView.h" 10 | #import "ClusterAnnotation.h" 11 | 12 | #define kCalloutWidthOnPOICount(count) count==1? 250.0 :250.0 13 | #define kCalloutHeightOnPOICount(count) count==1? 55.0 :130.0 14 | 15 | 16 | static CGFloat const ScaleFactorAlpha = 0.3; 17 | static CGFloat const ScaleFactorBeta = 0.4; 18 | 19 | /* 返回rect的中心. */ 20 | CGPoint RectCenter(CGRect rect) 21 | { 22 | return CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); 23 | } 24 | 25 | /* 返回中心为center,尺寸为rect.size的rect. */ 26 | CGRect CenterRect(CGRect rect, CGPoint center) 27 | { 28 | CGRect r = CGRectMake(center.x - rect.size.width/2.0, 29 | center.y - rect.size.height/2.0, 30 | rect.size.width, 31 | rect.size.height); 32 | return r; 33 | } 34 | 35 | /* 根据count计算annotation的scale. */ 36 | CGFloat ScaledValueForValue(CGFloat value) 37 | { 38 | return 1.0 / (1.0 + expf(-1 * ScaleFactorAlpha * powf(value, ScaleFactorBeta))); 39 | } 40 | 41 | #pragma mark - 42 | 43 | @interface ClusterAnnotationView () 44 | 45 | @property (nonatomic, strong) UILabel *countLabel; 46 | 47 | @property (nonatomic, strong) ClusterAnnotation * annotation; 48 | 49 | @end 50 | 51 | @implementation ClusterAnnotationView 52 | 53 | #pragma mark Initialization 54 | 55 | - (id)initWithAnnotation:(id)annotation reuseIdentifier:(NSString *)reuseIdentifier 56 | { 57 | self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]; 58 | if (self) 59 | { 60 | self.backgroundColor = [UIColor clearColor]; 61 | [self setupLabel]; 62 | [self setCount:1]; 63 | } 64 | 65 | return self; 66 | } 67 | 68 | #pragma mark Utility 69 | 70 | - (void)setupLabel 71 | { 72 | _countLabel = [[UILabel alloc] initWithFrame:self.frame]; 73 | _countLabel.backgroundColor = [UIColor clearColor]; 74 | _countLabel.textColor = [UIColor whiteColor]; 75 | _countLabel.textAlignment = NSTextAlignmentCenter; 76 | _countLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.75]; 77 | _countLabel.shadowOffset = CGSizeMake(0, -1); 78 | _countLabel.adjustsFontSizeToFitWidth = YES; 79 | _countLabel.numberOfLines = 1; 80 | _countLabel.font = [UIFont boldSystemFontOfSize:12]; 81 | _countLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters; 82 | [self addSubview:_countLabel]; 83 | } 84 | 85 | - (void)setCount:(NSUInteger)count 86 | { 87 | _count = count; 88 | 89 | /* 按count数目设置view的大小. */ 90 | CGRect newBounds = CGRectMake(0, 0, roundf(44 * ScaledValueForValue(count)), roundf(44 * ScaledValueForValue(count))); 91 | self.frame = CenterRect(newBounds, self.center); 92 | 93 | CGRect newLabelBounds = CGRectMake(0, 0, newBounds.size.width / 1.3, newBounds.size.height / 1.3); 94 | self.countLabel.frame = CenterRect(newLabelBounds, RectCenter(newBounds)); 95 | self.countLabel.text = [@(_count) stringValue]; 96 | 97 | [self setNeedsDisplay]; 98 | } 99 | 100 | #pragma mark draw rect 101 | 102 | - (void)drawRect:(CGRect)rect 103 | { 104 | CGContextRef context = UIGraphicsGetCurrentContext(); 105 | 106 | CGContextSetAllowsAntialiasing(context, true); 107 | 108 | UIColor *outerCircleStrokeColor = [UIColor colorWithWhite:0 alpha:0.25]; 109 | UIColor *innerCircleStrokeColor = [UIColor whiteColor]; 110 | UIColor *innerCircleFillColor = [UIColor colorWithRed:(255.0 / 255.0) green:(95 / 255.0) blue:(42 / 255.0) alpha:1.0]; 111 | 112 | CGRect circleFrame = CGRectInset(rect, 4, 4); 113 | 114 | [outerCircleStrokeColor setStroke]; 115 | CGContextSetLineWidth(context, 5.0); 116 | CGContextStrokeEllipseInRect(context, circleFrame); 117 | 118 | [innerCircleStrokeColor setStroke]; 119 | CGContextSetLineWidth(context, 4); 120 | CGContextStrokeEllipseInRect(context, circleFrame); 121 | 122 | [innerCircleFillColor setFill]; 123 | CGContextFillEllipseInRect(context, circleFrame); 124 | } 125 | 126 | @end 127 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Configuration/APIKey.h: -------------------------------------------------------------------------------- 1 | // 2 | // APIKey.h 3 | // SearchV3Demo 4 | // 5 | // Created by songjian on 13-8-14. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #ifndef SearchV3Demo_APIKey_h 10 | #define SearchV3Demo_APIKey_h 11 | 12 | /* 使用高德SearchV3, 请首先注册APIKey, 注册APIKey请参考 http://api.amap.com 13 | */ 14 | const static NSString *APIKey = @""; 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Demo/Controller/AnnotationClusterViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AnnotationClusterViewController.h 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import "BaseMapViewController.h" 10 | 11 | @interface AnnotationClusterViewController : BaseMapViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Demo/Controller/AnnotationClusterViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AnnotationClusterViewController.m 3 | // officialDemo2D 4 | // 5 | // Created by yi chen on 14-5-15. 6 | // Copyright (c) 2014年 AutoNavi. All rights reserved. 7 | // 8 | 9 | #import "AnnotationClusterViewController.h" 10 | #import "PoiDetailViewController.h" 11 | #import "CoordinateQuadTree.h" 12 | #import "ClusterAnnotation.h" 13 | #import "ClusterAnnotationView.h" 14 | 15 | #define kCalloutViewMargin -8 16 | 17 | @interface AnnotationClusterViewController () 18 | 19 | @property (nonatomic, strong) CoordinateQuadTree* coordinateQuadTree; 20 | 21 | @end 22 | 23 | @implementation AnnotationClusterViewController 24 | 25 | #pragma mark - update Annotation 26 | 27 | /* 更新annotation. */ 28 | - (void)updateMapViewAnnotationsWithAnnotations:(NSArray *)annotations 29 | { 30 | /* 用户滑动时,保留仍然可用的标注,去除屏幕外标注,添加新增区域的标注 */ 31 | NSMutableSet *before = [NSMutableSet setWithArray:self.mapView.annotations]; 32 | [before removeObject:[self.mapView userLocation]]; 33 | NSSet *after = [NSSet setWithArray:annotations]; 34 | 35 | /* 保留仍然位于屏幕内的annotation. */ 36 | NSMutableSet *toKeep = [NSMutableSet setWithSet:before]; 37 | [toKeep intersectSet:after]; 38 | 39 | /* 需要添加的annotation. */ 40 | NSMutableSet *toAdd = [NSMutableSet setWithSet:after]; 41 | [toAdd minusSet:toKeep]; 42 | 43 | /* 删除位于屏幕外的annotation. */ 44 | NSMutableSet *toRemove = [NSMutableSet setWithSet:before]; 45 | [toRemove minusSet:after]; 46 | 47 | /* 更新. */ 48 | dispatch_async(dispatch_get_main_queue(), ^{ 49 | [self.mapView addAnnotations:[toAdd allObjects]]; 50 | [self.mapView removeAnnotations:[toRemove allObjects]]; 51 | }); 52 | } 53 | 54 | - (void)addAnnotationsToMapView:(MAMapView *)mapView 55 | { 56 | NSLog(@"calculate annotations."); 57 | if (self.coordinateQuadTree.root == nil) 58 | { 59 | NSLog(@"tree is not ready."); 60 | return; 61 | } 62 | 63 | /* 根据当前zoomLevel和zoomScale 进行annotation聚合. */ 64 | double zoomScale = self.mapView.bounds.size.width / self.mapView.visibleMapRect.size.width; 65 | 66 | NSArray *annotations = [self.coordinateQuadTree clusteredAnnotationsWithinMapRect:mapView.visibleMapRect 67 | withZoomScale:zoomScale 68 | andZoomLevel:mapView.zoomLevel]; 69 | /* 更新annotation. */ 70 | [self updateMapViewAnnotationsWithAnnotations:annotations]; 71 | } 72 | 73 | /* annotation弹出的动画. */ 74 | - (void)addBounceAnnimationToView:(UIView *)view 75 | { 76 | CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; 77 | 78 | bounceAnimation.values = @[@(0.05), @(1.1), @(0.9), @(1)]; 79 | bounceAnimation.duration = 0.6; 80 | 81 | NSMutableArray *timingFunctions = [[NSMutableArray alloc] initWithCapacity:bounceAnimation.values.count]; 82 | for (NSUInteger i = 0; i < bounceAnimation.values.count; i++) 83 | { 84 | [timingFunctions addObject:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 85 | } 86 | [bounceAnimation setTimingFunctions:timingFunctions.copy]; 87 | 88 | bounceAnimation.removedOnCompletion = NO; 89 | 90 | [view.layer addAnimation:bounceAnimation forKey:@"bounce"]; 91 | } 92 | 93 | #pragma mark - MAMapViewDelegate 94 | 95 | - (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated 96 | { 97 | /* mapView区域变化时重算annotation. */ 98 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 99 | [self addAnnotationsToMapView:self.mapView]; 100 | }); 101 | 102 | } 103 | 104 | - (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 105 | { 106 | id annotation = view.annotation; 107 | 108 | if ([annotation isKindOfClass:[ClusterAnnotation class]]) 109 | { 110 | ClusterAnnotation *clusterAnnotation = (ClusterAnnotation*)annotation; 111 | 112 | PoiDetailViewController *detail = [[PoiDetailViewController alloc] init]; 113 | detail.poi = [clusterAnnotation.pois lastObject]; 114 | 115 | /* 进入POI详情页面. */ 116 | [self.navigationController pushViewController:detail animated:YES]; 117 | } 118 | } 119 | 120 | - (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id)annotation 121 | { 122 | if ([annotation isKindOfClass:[ClusterAnnotation class]]) 123 | { 124 | /* dequeue重用annotationView. */ 125 | static NSString *const AnnotatioViewReuseID = @"AnnotatioViewReuseID"; 126 | 127 | ClusterAnnotationView *annotationView = (ClusterAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotatioViewReuseID]; 128 | 129 | if (!annotationView) 130 | { 131 | annotationView = [[ClusterAnnotationView alloc] initWithAnnotation:annotation 132 | reuseIdentifier:AnnotatioViewReuseID]; 133 | } 134 | 135 | /* 设置annotationView的属性. */ 136 | annotationView.annotation = annotation; 137 | annotationView.count = [(ClusterAnnotation *)annotation count]; 138 | 139 | /* 设置annotationView的callout属性和calloutView. */ 140 | annotationView.canShowCallout = YES; 141 | if (annotationView.count == 1) 142 | { 143 | annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 144 | } 145 | 146 | return annotationView; 147 | } 148 | 149 | return nil; 150 | } 151 | 152 | - (void)mapView:(MAMapView *)mapView didAddAnnotationViews:(NSArray *)views 153 | { 154 | /* 为新添的annotationView添加弹出动画. */ 155 | for (UIView *view in views) 156 | { 157 | [self addBounceAnnimationToView:view]; 158 | } 159 | } 160 | 161 | #pragma mark - SearchPOI 162 | 163 | /* 搜索POI. */ 164 | - (void)searchPoiWithKeyword:(NSString *)keyword 165 | { 166 | AMapPlaceSearchRequest *request = [[AMapPlaceSearchRequest alloc] init]; 167 | 168 | request.searchType = AMapSearchType_PlaceKeyword; 169 | request.keywords = keyword; 170 | request.city = @[@"010"]; 171 | request.requireExtension = YES; 172 | 173 | [self.search AMapPlaceSearch:request]; 174 | } 175 | 176 | /* POI 搜索回调. */ 177 | - (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons 178 | { 179 | if (respons.pois.count == 0) 180 | { 181 | return; 182 | } 183 | 184 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 185 | /* 建立四叉树. */ 186 | [self.coordinateQuadTree buildTreeWithPOIs:respons.pois]; 187 | 188 | dispatch_async(dispatch_get_main_queue(), ^{ 189 | /* 建树完成,计算当前mapView区域内需要显示的annotation. */ 190 | NSLog(@"First time calculate annotations."); 191 | [self addAnnotationsToMapView:self.mapView]; 192 | 193 | }); 194 | }); 195 | 196 | /* 如果只有一个结果,设置其为中心点. */ 197 | if (respons.pois.count == 1) 198 | { 199 | self.mapView.centerCoordinate = [respons.pois[0] coordinate]; 200 | } 201 | /* 如果有多个结果, 设置地图使所有的annotation都可见. */ 202 | else 203 | { 204 | [self.mapView showAnnotations:self.mapView.annotations animated:NO]; 205 | } 206 | } 207 | 208 | #pragma mark - Life Cycle 209 | 210 | - (id)init 211 | { 212 | if (self = [super init]) 213 | { 214 | self.coordinateQuadTree = [[CoordinateQuadTree alloc] init]; 215 | 216 | [self setTitle:@"Cluster Annotations"]; 217 | } 218 | 219 | return self; 220 | } 221 | 222 | 223 | - (void)viewDidLoad 224 | { 225 | [super viewDidLoad]; 226 | [self searchPoiWithKeyword:@"Apple"]; 227 | } 228 | 229 | - (void)viewDidUnload 230 | { 231 | [super viewDidUnload]; 232 | [self.coordinateQuadTree clean]; 233 | } 234 | 235 | @end 236 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Demo/Controller/BaseMapViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BaseMapViewController.h 3 | // SearchV3Demo 4 | // 5 | // Created by songjian on 13-8-14. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | @interface BaseMapViewController : UIViewController 14 | 15 | @property (nonatomic, strong) MAMapView *mapView; 16 | 17 | @property (nonatomic, strong) AMapSearchAPI *search; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Demo/Controller/BaseMapViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BaseMapViewController.m 3 | // SearchV3Demo 4 | // 5 | // Created by songjian on 13-8-14. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import "BaseMapViewController.h" 10 | 11 | @implementation BaseMapViewController 12 | @synthesize mapView = _mapView; 13 | @synthesize search = _search; 14 | 15 | #pragma mark - Utility 16 | 17 | - (void)clearMapView 18 | { 19 | self.mapView.showsUserLocation = NO; 20 | 21 | [self.mapView removeAnnotations:self.mapView.annotations]; 22 | 23 | self.mapView.delegate = nil; 24 | } 25 | 26 | - (void)clearSearch 27 | { 28 | self.search.delegate = nil; 29 | } 30 | 31 | #pragma mark - AMapSearchDelegate 32 | 33 | - (void)search:(id)searchRequest error:(NSString *)errInfo 34 | { 35 | NSLog(@"%s: searchRequest = %@, errInfo= %@", __func__, [searchRequest class], errInfo); 36 | } 37 | 38 | #pragma mark - Initialization 39 | 40 | - (void)initMapView 41 | { 42 | self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds]; 43 | 44 | self.mapView.frame = self.view.bounds; 45 | 46 | self.mapView.delegate = self; 47 | 48 | [self.view addSubview:self.mapView]; 49 | 50 | self.mapView.visibleMapRect = MAMapRectMake(220880104, 101476980, 272496, 466656); 51 | } 52 | 53 | - (void)initSearch 54 | { 55 | self.search = [[AMapSearchAPI alloc] initWithSearchKey:[MAMapServices sharedServices].apiKey Delegate:nil]; 56 | self.search.delegate = self; 57 | } 58 | 59 | - (void)initTitle:(NSString *)title 60 | { 61 | UILabel *titleLabel = [[UILabel alloc] init]; 62 | 63 | titleLabel.backgroundColor = [UIColor clearColor]; 64 | titleLabel.textColor = [UIColor blackColor]; 65 | titleLabel.text = title; 66 | [titleLabel sizeToFit]; 67 | 68 | self.navigationItem.titleView = titleLabel; 69 | } 70 | 71 | #pragma mark - Life Cycle 72 | 73 | - (void)viewDidLoad 74 | { 75 | [super viewDidLoad]; 76 | 77 | [self initTitle:self.title]; 78 | 79 | [self initMapView]; 80 | 81 | [self initSearch]; 82 | } 83 | 84 | @end 85 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Demo/Controller/PoiDetailViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PoiDetailViewController.h 3 | // SearchV3Demo 4 | // 5 | // Created by songjian on 13-8-16. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface PoiDetailViewController : UIViewController 13 | 14 | @property (nonatomic, strong) AMapPOI *poi; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Demo/Controller/PoiDetailViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // PoiDetailViewController.m 3 | // SearchV3Demo 4 | // 5 | // Created by songjian on 13-8-16. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import "PoiDetailViewController.h" 10 | 11 | #define TemporaryNotOpened @"暂未开通" 12 | 13 | @interface PoiDetailViewController () 14 | 15 | @property (nonatomic, strong) UITableView *tableView; 16 | 17 | @end 18 | 19 | @implementation PoiDetailViewController 20 | @synthesize poi = _poi; 21 | @synthesize tableView = _tableView; 22 | 23 | #pragma mark - Utility 24 | 25 | - (NSString *)titleForIndexPath:(NSIndexPath *)indexPath 26 | { 27 | NSString *title = nil; 28 | 29 | if (indexPath.section == 0) 30 | { 31 | switch (indexPath.row) 32 | { 33 | case 0 : title = @"POI全局唯一ID"; break; 34 | case 1 : title = @"名称"; break; 35 | case 2 : title = @"兴趣点类型"; break; 36 | case 3 : title = @"经纬度"; break; 37 | case 4 : title = @"地址"; break; 38 | case 5 : title = @"电话"; break; 39 | default: title = @"距中心点距离"; break; 40 | } 41 | } 42 | else 43 | { 44 | switch (indexPath.row) 45 | { 46 | case 0 : title = @"邮编"; break; 47 | case 1 : title = @"网址"; break; 48 | case 2 : title = @"电子邮件"; break; 49 | case 3 : title = @"省(省编码)"; break; 50 | case 4 : title = @"市(市编码)"; break; 51 | case 5 : title = @"区域(区域编码)"; break; 52 | case 6 : title = @"地理格ID"; break; 53 | case 7 : title = @"导航点ID"; break; 54 | case 8 : title = @"入口经纬度"; break; 55 | case 9 : title = @"出口经纬度"; break; 56 | case 10 : title = @"权重"; break; 57 | case 11 : title = @"匹配"; break; 58 | case 12 : title = @"推荐标识"; break; 59 | case 13 : title = @"时间戳"; break; 60 | case 14 : title = @"方向"; break; 61 | case 15 : title = @"是否有室内地图"; break; 62 | case 16 : title = @"室内地图来源"; break; 63 | 64 | default : break; 65 | } 66 | } 67 | 68 | return title; 69 | } 70 | 71 | - (NSString *)subTitleForIndexPath:(NSIndexPath *)indexPath 72 | { 73 | NSString *subTitle = nil; 74 | 75 | if (indexPath.section == 0) 76 | { 77 | switch (indexPath.row) 78 | { 79 | case 0 : subTitle = self.poi.uid; break; 80 | case 1 : subTitle = self.poi.name; break; 81 | case 2 : subTitle = self.poi.type; break; 82 | case 3 : subTitle = [self.poi.location description]; break; 83 | case 4 : subTitle = self.poi.address; break; 84 | case 5 : subTitle = self.poi.tel; break; 85 | default: subTitle = [NSString stringWithFormat:@"%d(米)", self.poi.distance]; break; 86 | 87 | } 88 | } 89 | else 90 | { 91 | switch (indexPath.row) 92 | { 93 | case 0 : subTitle = self.poi.postcode; break; 94 | case 1 : subTitle = self.poi.website; break; 95 | case 2 : subTitle = self.poi.email; break; 96 | case 3 : subTitle = [NSString stringWithFormat:@"%@(%@)", self.poi.province, self.poi.pcode]; break; 97 | case 4 : subTitle = [NSString stringWithFormat:@"%@(%@)", self.poi.city, self.poi.citycode]; break; 98 | case 5 : subTitle = [NSString stringWithFormat:@"%@(%@)", self.poi.district, self.poi.adcode]; break; 99 | case 6 : subTitle = TemporaryNotOpened; break; 100 | case 7 : subTitle = TemporaryNotOpened; break; 101 | case 8 : subTitle = [self.poi.enterLocation description]; break; 102 | case 9 : subTitle = [self.poi.exitLocation description]; break; 103 | case 10 : subTitle = TemporaryNotOpened; break; 104 | case 11 : subTitle = TemporaryNotOpened; break; 105 | case 12 : subTitle = TemporaryNotOpened; break; 106 | case 13 : subTitle = TemporaryNotOpened; break; 107 | case 14 : subTitle = self.poi.direction; break; 108 | case 15 : subTitle = [NSString stringWithFormat:@"%d", self.poi.hasIndoorMap]; break; 109 | case 16 : subTitle = self.poi.indoorMapProvider; break; 110 | default : break; 111 | } 112 | } 113 | 114 | return subTitle; 115 | } 116 | 117 | #pragma mark - UITableViewDataSource 118 | 119 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 120 | { 121 | return 1; 122 | } 123 | 124 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 125 | { 126 | return section == 0 ? 7 : 17; 127 | } 128 | 129 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 130 | { 131 | static NSString *poiDetailCellIdentifier = @"poiDetailCellIdentifier"; 132 | 133 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:poiDetailCellIdentifier]; 134 | 135 | if (cell == nil) 136 | { 137 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:poiDetailCellIdentifier]; 138 | } 139 | 140 | cell.textLabel.text = [self titleForIndexPath:indexPath]; 141 | cell.detailTextLabel.text = [self subTitleForIndexPath:indexPath]; 142 | cell.accessoryType = UITableViewCellAccessoryNone; 143 | cell.selectionStyle = UITableViewCellSelectionStyleNone; 144 | 145 | return cell; 146 | } 147 | 148 | #pragma mark - Initialization 149 | 150 | - (void)initTableView 151 | { 152 | self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; 153 | self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 154 | self.tableView.delegate = self; 155 | self.tableView.dataSource = self; 156 | 157 | [self.view addSubview:self.tableView]; 158 | } 159 | 160 | - (void)initTitle:(NSString *)title 161 | { 162 | UILabel *titleLabel = [[UILabel alloc] init]; 163 | 164 | titleLabel.backgroundColor = [UIColor clearColor]; 165 | titleLabel.textColor = [UIColor blackColor]; 166 | titleLabel.text = title; 167 | [titleLabel sizeToFit]; 168 | 169 | self.navigationItem.titleView = titleLabel; 170 | } 171 | 172 | #pragma mark - Life Cycle 173 | 174 | - (void)viewDidLoad 175 | { 176 | [super viewDidLoad]; 177 | 178 | [self initTitle:@"POI信息 (AMapPOI)"]; 179 | 180 | [self initTableView]; 181 | } 182 | 183 | @end 184 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "icon-29@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "40x40", 11 | "idiom" : "iphone", 12 | "filename" : "icon-40@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "60x60", 17 | "idiom" : "iphone", 18 | "filename" : "icon-60@2x.png", 19 | "scale" : "2x" 20 | } 21 | ], 22 | "info" : { 23 | "version" : 1, 24 | "author" : "xcode" 25 | } 26 | } -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Images.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Images.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Images.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Images.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Images.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Images.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Resources/ClusterAnnotation1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Resources/ClusterAnnotation1.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Resources/ClusterAnnotation2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Resources/ClusterAnnotation2.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Resources/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Resources/icon-29@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Resources/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Resources/icon-40@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Resources/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Resources/icon-60@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/Resources/qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/Resources/qrcode.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/AMapSearchKit: -------------------------------------------------------------------------------- 1 | Versions/Current/AMapSearchKit -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/Versions/2.2.1.1656/AMapSearchKit: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/Versions/2.2.1.1656/AMapSearchKit -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/Versions/2.2.1.1656/Headers/AMapCommonObj.h: -------------------------------------------------------------------------------- 1 | // 2 | // AMapCommonObj.h 3 | // searchKitV3 4 | // 5 | // Created by yin cai on 13-7-3. 6 | // Copyright (c) 2013年 Autonavi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | #pragma mark - #基础数据类型 13 | 14 | /*! 15 | @brief 经纬度 16 | */ 17 | @interface AMapGeoPoint : NSObject 18 | 19 | @property (nonatomic, assign) CGFloat latitude; 20 | @property (nonatomic, assign) CGFloat longitude; 21 | 22 | + (AMapGeoPoint *)locationWithLatitude:(CGFloat)lat longitude:(CGFloat)lon; 23 | 24 | @end 25 | 26 | /*! 27 | @brief 多边形 矩形:左下-右上两个顶点,其他情况需要首尾坐标相同,当做闭合图形处理 28 | */ 29 | @interface AMapGeoPolygon : NSObject 30 | 31 | @property (nonatomic, strong) NSArray *points;// 坐标集:AMapGeoPoint数组 32 | 33 | + (AMapGeoPolygon *)polygonWithPoints:(NSArray *)points; 34 | 35 | @end 36 | 37 | /*! 38 | @brief 城市区域 39 | */ 40 | @interface AMapDistrict : NSObject 41 | 42 | @property (nonatomic, strong) NSString *name; // 区域名称 43 | @property (nonatomic, strong) NSString *adcode; // 区域代码 44 | 45 | + (AMapDistrict *)districtWithName:(NSString *)name adcode:(NSString *)adcode; 46 | 47 | @end 48 | 49 | /*! 50 | @brief 城市 51 | */ 52 | @interface AMapCity : NSObject 53 | 54 | @property (nonatomic, strong) NSString *city; // 城市名称 55 | @property (nonatomic, strong) NSString *citycode; // 城市编码 56 | @property (nonatomic, strong) NSString *adcode; // 城市区域编码 57 | @property (nonatomic, assign) NSInteger num; // 此区域的建议结果数目, AMapSuggestion 中使用 58 | @property (nonatomic, strong) NSArray *districts; // 途径区域 AMapDistrict 数组,AMepStep中使用 59 | 60 | @end 61 | 62 | /*! 63 | @brief 查询建议 64 | */ 65 | @interface AMapSuggestion : NSObject 66 | 67 | @property (nonatomic, strong) NSArray *keywords; //NSString数组 68 | @property (nonatomic, strong) NSArray *cities; //AMapCity数组 69 | 70 | @end 71 | 72 | /*! 73 | @brief 手机应用网址 74 | */ 75 | @interface AMapAppUrl : NSObject 76 | 77 | @property (nonatomic, strong) NSString *android; // android url 78 | @property (nonatomic, strong) NSString *ios; // ios url 79 | @property (nonatomic, strong) NSString *wp; // winphone url 80 | 81 | + (AMapAppUrl *)appUrlWithAndroid:(NSString *)android ios:(NSString *)ios wp:(NSString *)wp; 82 | 83 | @end 84 | 85 | /*! 86 | @brief 图片信息 87 | */ 88 | @interface AMapPhoto : NSObject 89 | 90 | @property (nonatomic, strong) NSString *title; // 标题 91 | @property (nonatomic, strong) NSString *url; // URL地址 92 | @property (nonatomic, strong) NSString *provider; // 来源 93 | 94 | + (AMapPhoto *)photoWithTitle:(NSString *)title url:(NSString *)url provider:(NSString *)provider; 95 | 96 | @end 97 | 98 | #pragma mark - #市场动态信息 99 | 100 | /*! 101 | @brief 团购信息 102 | */ 103 | @interface AMapGroupBuy : NSObject 104 | 105 | @property (nonatomic, strong) NSString *typeCode; // 团购分类代码 106 | @property (nonatomic, strong) NSString *type; // 团购分类 107 | @property (nonatomic, strong) NSString *detail; // 团购详情 108 | @property (nonatomic, strong) NSString *startTime; // 团购开始时间 109 | @property (nonatomic, strong) NSString *endTime; // 团购结束时间 110 | @property (nonatomic, assign) NSInteger num; // 团购总量 111 | @property (nonatomic, assign) NSInteger soldNum; // 已卖出数量 112 | @property (nonatomic, assign) CGFloat originalPrice; // 原价 113 | @property (nonatomic, assign) CGFloat groupbuyPrice; // 团购价 114 | @property (nonatomic, assign) CGFloat discount; // 折扣 115 | @property (nonatomic, strong) NSString *ticketAddress; // 取票地址 116 | @property (nonatomic, strong) NSString *ticketTel; // 取票电话 117 | @property (nonatomic, strong) NSArray *photos; //图片信息 : AMapPhoto数组 118 | @property (nonatomic, strong) NSString *url; // 来源URL 119 | @property (nonatomic, strong) NSString *provider; // 来源标识 120 | 121 | @end 122 | 123 | /*! 124 | @brief 打折信息 125 | */ 126 | @interface AMapDiscount : NSObject 127 | 128 | @property (nonatomic, strong) NSString *title; // 标题 129 | @property (nonatomic, strong) NSString *detail; // 优惠详情 130 | @property (nonatomic, strong) NSString *startTime; // 开始时间 131 | @property (nonatomic, strong) NSString *endTime; // 结束时间 132 | @property (nonatomic, assign) NSInteger soldNum; // 已卖出数量 133 | @property (nonatomic, strong) NSArray *photos; //图片信息 : AMapPhoto数组 134 | @property (nonatomic, strong) NSString *url; // 来源URL 135 | @property (nonatomic, strong) NSString *provider; // 来源标识 136 | 137 | @end 138 | 139 | /*! 140 | @brief 动态市场信息 141 | */ 142 | @interface AMapRichContent : NSObject 143 | 144 | @property (nonatomic, strong) NSArray *groupbuys; //团购信息 : AMapGroupBuy数组 145 | @property (nonatomic, strong) NSArray *discounts; //优惠信息 : AMapDiscount数组 146 | 147 | @end 148 | 149 | #pragma mark - #行业深度信息 150 | 151 | /*! 152 | @brief 电影行业的场次信息 153 | */ 154 | @interface AMapTicket : NSObject 155 | 156 | @property (nonatomic, strong) NSString *startTime; // 放映时间 157 | @property (nonatomic, strong) NSString *screen; // 屏幕信息 158 | @property (nonatomic, strong) NSString *lang; // 语言 159 | @property (nonatomic, assign) CGFloat price; // 价格 160 | @property (nonatomic, assign) BOOL seatOrdering; // 是否可选座 161 | @property (nonatomic, strong) NSString *orderingUrlWap; // 手机端选座网址 162 | @property (nonatomic, strong) NSString *orderingUrlWeb; // 网页版选座网址 163 | 164 | @end 165 | 166 | /*! 167 | @brief 电影行业的动态信息 168 | */ 169 | @interface AMapMovie : NSObject 170 | 171 | @property (nonatomic, strong) NSString *name; // 影片名称 172 | @property (nonatomic, strong) NSString *uid; // 影片id 173 | @property (nonatomic, strong) NSString *actors; // 演员 174 | @property (nonatomic, strong) NSString *director; // 导演 175 | @property (nonatomic, strong) NSString *type; // 类型 176 | @property (nonatomic, assign) NSInteger length; // 片长 177 | @property (nonatomic, strong) NSArray *tickets; // 场次列表 AMapTicket 数组 178 | 179 | @end 180 | 181 | /*! 182 | @brief 酒店行业的房型详细信息 183 | */ 184 | @interface AMapRoom : NSObject 185 | 186 | @property (nonatomic, strong) NSString *uid; // 客房id 187 | @property (nonatomic, strong) NSString *type; // 房型类别 188 | @property (nonatomic, strong) NSString *name; // 房型名称 189 | @property (nonatomic, assign) CGFloat price; // 房价 190 | @property (nonatomic, strong) NSString *breakfast; // 早餐供应 191 | @property (nonatomic, strong) NSString *network; // 提供网络 192 | @property (nonatomic, assign) BOOL guarantee; // 是否需要预订担保 193 | @property (nonatomic, strong) NSString *tel; // 预订电话 194 | @property (nonatomic, strong) NSString *orderingUrlWap; // 手机端预定网址 195 | @property (nonatomic, strong) NSString *orderingUrlWeb; // 网页版预定网址 196 | @property (nonatomic, strong) NSString *provider; // 房型价格来源 197 | 198 | @end 199 | 200 | /*! 201 | @brief 餐饮行业深度信息 202 | */ 203 | @interface AMapDiningDeepContent : NSObject 204 | 205 | @property (nonatomic, strong) NSString *cuisines; // 菜系 206 | @property (nonatomic, strong) NSString *tag; // 标签 207 | @property (nonatomic, assign) CGFloat cpRating; // 单数据源的评分 208 | @property (nonatomic, assign) CGFloat tasteRating; // 口味评分 209 | @property (nonatomic, assign) CGFloat environmentRating; // 环境评分 210 | @property (nonatomic, assign) CGFloat serviceRating; // 服务评分 211 | @property (nonatomic, assign) CGFloat cost; // 人均消费 212 | @property (nonatomic, strong) NSString *recommend; // 特色菜推荐 213 | @property (nonatomic, strong) NSString *atmosphere; // 氛围 214 | @property (nonatomic, strong) NSString *addition; // 餐厅特色 215 | @property (nonatomic, strong) AMapAppUrl *appUrl; // 手机应用订餐网址 216 | @property (nonatomic, strong) NSString *orderingUrlWap; // 手机端订餐网址 217 | @property (nonatomic, strong) NSString *orderingUrlWeb; // 网页版订餐网址 218 | @property (nonatomic, strong) NSString *opentimeGDF; // 规范格式的营业时间 219 | @property (nonatomic, strong) NSString *opentime; // 非规范格式的营业时间 220 | 221 | @end 222 | 223 | /*! 224 | @brief 酒店行业深度信息 225 | */ 226 | @interface AMapHotelDeepContent : NSObject 227 | 228 | @property (nonatomic, assign) NSInteger star; // 星级 229 | @property (nonatomic, assign) CGFloat lowestPrice; // 最低价 230 | @property (nonatomic, assign) CGFloat faciRating; // 设施评分 231 | @property (nonatomic, assign) CGFloat healthRating; // 卫生评分 232 | @property (nonatomic, assign) CGFloat environmentRating; // 环境评分 233 | @property (nonatomic, assign) CGFloat serviceRating; // 服务评分 234 | @property (nonatomic, strong) NSString *traffic; // 交通提示 235 | @property (nonatomic, strong) NSString *addition; // 特色服务 236 | 237 | @property (nonatomic, strong) NSArray *rooms; //房型信息 AMapRoom 数组 238 | 239 | @end 240 | 241 | /*! 242 | @brief 景点行业深度信息 243 | */ 244 | @interface AMapScenicDeepContent : NSObject 245 | 246 | @property (nonatomic, strong) NSString *level; // 景区国标级别 247 | @property (nonatomic, assign) CGFloat price; // 门票价格 248 | @property (nonatomic, strong) NSString *season; // 适合游玩的月份,多个月份用"|"隔开 249 | @property (nonatomic, strong) NSString *recommend; // 推荐景点 ,多个景点用"|"隔开 250 | @property (nonatomic, strong) NSString *theme; // 景区主题 251 | @property (nonatomic, strong) NSString *orderingUrlWap; // 手机端购票网址 252 | @property (nonatomic, strong) NSString *orderingUrlWeb; // 网页版购票网址 253 | @property (nonatomic, strong) NSString *opentimeGDF; // 规范格式的营业时间 254 | @property (nonatomic, strong) NSString *opentime; // 非规范格式的营业时间 255 | 256 | @end 257 | 258 | /*! 259 | @brief 电影行业的深度信息 260 | */ 261 | @interface AMapCinemaDeepContent : NSObject 262 | 263 | @property (nonatomic, assign) BOOL is3D; // 是否支持3D 264 | @property (nonatomic, strong) NSString *parking; // 停车场设施 265 | @property (nonatomic, strong) NSString *opentimeGDF; // 规范格式的营业时间 266 | @property (nonatomic, strong) NSString *opentime; // 非规范格式的营业时间 267 | 268 | @property (nonatomic, strong) NSArray *movies; //电影行业的动态信息列表 : AMapMovie数组 269 | 270 | @end 271 | 272 | /*! 273 | @brief 行业深度信息 274 | */ 275 | @interface AMapDeepContent : NSObject 276 | 277 | @property (nonatomic, strong) NSString *type; // 行业类型 278 | @property (nonatomic, strong) NSString *intro; // 简介 279 | @property (nonatomic, assign) CGFloat rating; // 综合评分 280 | @property (nonatomic, strong) NSString *provider; // 信息来源 281 | @property (nonatomic, strong) NSArray *photos; // 图片信息 282 | @property (nonatomic, strong) AMapDiningDeepContent *deepDining; // 餐饮行业的深度信息 283 | @property (nonatomic, strong) AMapHotelDeepContent *deepHotel; // 酒店行业的深度信息 284 | @property (nonatomic, strong) AMapScenicDeepContent *deepScenic; // 景点行业的深度信息 285 | @property (nonatomic, strong) AMapCinemaDeepContent *deepCinema; // 电影行业的深度信息 286 | 287 | @end 288 | 289 | /*! 290 | @brief 行业类型 291 | */ 292 | extern NSString* const AMapDeepContentTypeDining; 293 | extern NSString* const AMapDeepContentTypeHotel; 294 | extern NSString* const AMapDeepContentTypeScenic; 295 | extern NSString* const AMapDeepContentTypeCinema; 296 | 297 | #pragma mark - #POI查询扩展信息 298 | 299 | /*! 300 | @brief 行业扩展信息 301 | */ 302 | @interface AMapBizExtention : NSObject 303 | 304 | @property (nonatomic, assign) CGFloat rating; // 综合评分 305 | @property (nonatomic, assign) CGFloat cost; // 人均消费 306 | @property (nonatomic, assign) CGFloat lowestPriceForHotel; // 最低价格 307 | @property (nonatomic, assign) NSUInteger starForHotel; // 星级 308 | @property (nonatomic, assign) BOOL mealOrderingForDining; // 是否可订餐 309 | @property (nonatomic, assign) BOOL seatOrderingForCinema; // 是否可选座 310 | @property (nonatomic, assign) BOOL ticketOrderingForScenic; // 是否可订票 311 | @property (nonatomic, assign) BOOL hasGroupbuy; // 是否有团购 312 | @property (nonatomic, assign) BOOL hasDiscount; // 是否有优惠 313 | 314 | @end 315 | 316 | #pragma mark - #查询结果数据类型 317 | 318 | /*! 319 | @brief POI 320 | */ 321 | @interface AMapPOI : NSObject 322 | 323 | // basic: 324 | @property (nonatomic, strong) NSString *uid; // POI全局唯一ID 325 | @property (nonatomic, strong) NSString *name; // 名称 326 | @property (nonatomic, strong) NSString *type; // 兴趣点类型 327 | @property (nonatomic, strong) AMapGeoPoint *location; // 经纬度 328 | @property (nonatomic, strong) NSString *address; // 地址 329 | @property (nonatomic, strong) NSString *tel; // 电话 330 | @property (nonatomic, assign) NSInteger distance; // 距中心点距离 331 | 332 | // extensions: 333 | @property (nonatomic, strong) NSString *postcode; // 邮编 334 | @property (nonatomic, strong) NSString *website; // 网址 335 | @property (nonatomic, strong) NSString *email; // 电子邮件 336 | @property (nonatomic, strong) NSString *province; // 省 337 | @property (nonatomic, strong) NSString *pcode; // 省编码 338 | @property (nonatomic, strong) NSString *city; // 城市名称 339 | @property (nonatomic, strong) NSString *citycode; // 城市编码 340 | @property (nonatomic, strong) NSString *district; // 区域名称 341 | @property (nonatomic, strong) NSString *adcode; // 区域编码 342 | @property (nonatomic, strong) NSString *gridcode; // 地理格ID / *暂未开通 */ 343 | @property (nonatomic, strong) NSString *navipoiid; // 导航点ID/ *暂未开通 */ 344 | @property (nonatomic, strong) AMapGeoPoint *enterLocation; // 入口经纬度 345 | @property (nonatomic, strong) AMapGeoPoint *exitLocation; // 出口经纬度 346 | @property (nonatomic, assign) CGFloat weight; // 权重 / *暂未开通 */ 347 | @property (nonatomic, assign) CGFloat match; // 匹配 / *暂未开通 */ 348 | @property (nonatomic, assign) NSInteger recommend; // 推荐标识 / *暂未开通 */ 349 | @property (nonatomic, strong) NSString *timestamp; // 时间戳 / *暂未开通 */ 350 | @property (nonatomic, strong) NSString *direction; // 方向 351 | 352 | @property (nonatomic, assign) BOOL hasIndoorMap; // 是否有室内地图 353 | @property (nonatomic, strong) NSString *indoorMapProvider; // 室内地图来源 354 | 355 | /** 团购信息数目,推荐使用bizExtention中的hasGroupbuy代替。*/ 356 | @property (nonatomic, assign) NSInteger groupbuyNum __attribute__((deprecated("use 'hasGroupbuy' in deepContent instead"))); 357 | 358 | /** 优惠信息数目,推荐使用bizExtention中的hasDiscount代替。*/ 359 | @property (nonatomic, assign) NSInteger discountNum __attribute__((deprecated("use 'hasDiscount' in deepContent instead"))); 360 | 361 | @property (nonatomic, strong) AMapBizExtention *bizExtention; // 扩展信息 362 | @property (nonatomic, strong) AMapRichContent *richContent; // 动态市场信息 363 | @property (nonatomic, strong) AMapDeepContent *deepContent; // 行业深度信息 364 | 365 | @end 366 | 367 | /*! 368 | @brief 公交站 369 | */ 370 | @interface AMapBusStop : NSObject 371 | 372 | @property (nonatomic, strong) NSString *uid; // 公交站ID 373 | @property (nonatomic, strong) NSString *name; // 站名 374 | @property (nonatomic, assign) NSInteger sequence; // 公交站序号 375 | @property (nonatomic, strong) NSString *citycode; // 城市编码 376 | @property (nonatomic, strong) NSString *adcode; // 区域编码 377 | @property (nonatomic, strong) NSString *gridcode; // 地理格ID / *暂未开通 */ 378 | @property (nonatomic, strong) AMapGeoPoint *location; // 经纬度 379 | @property (nonatomic, strong) NSString *timestamp; // 时间戳 / *暂未开通 */ 380 | @property (nonatomic, strong) NSArray *buslines; // 途径此站的公交路线 AMapBusLine 数组 381 | 382 | @end 383 | 384 | /*! 385 | @brief 公交线路 386 | */ 387 | @interface AMapBusLine : NSObject 388 | 389 | // basic: 390 | @property (nonatomic, strong) NSString *uid; // 公交线路ID 391 | @property (nonatomic, strong) NSString *name; // 线路名称 392 | @property (nonatomic, strong) NSString *type; // 公交类型 393 | @property (nonatomic, strong) NSString *polyline; // 坐标串定义 394 | @property (nonatomic, strong) NSString *citycode; // 城市编码 395 | @property (nonatomic, strong) NSString *gridcode; // 地理格ID / *暂未开通 */ 396 | @property (nonatomic, strong) AMapBusStop *startStop; // 首发站 397 | @property (nonatomic, strong) AMapBusStop *endStop; // 终点站 398 | 399 | // extensions: 400 | @property (nonatomic, strong) NSString *startTime; // 首班车时间 401 | @property (nonatomic, strong) NSString *endTime; // 末班车时间 402 | @property (nonatomic, strong) NSString *company; // 所属公交公司 403 | @property (nonatomic, assign) float distance; // 全程里程(单位:千米) 404 | @property (nonatomic, assign) NSInteger duration; // 预计行驶时间(单位:秒) 405 | @property (nonatomic, assign) float basicPrice; // 起步价 406 | @property (nonatomic, assign) float totalPrice; // 全程票价 407 | @property (nonatomic, strong) NSArray *bounds; // 矩形区域左下、右上顶点坐标 AMapGeoPoint 数组 408 | @property (nonatomic, assign) NSInteger busStopsNum; // 途径公交站数 409 | @property (nonatomic, strong) NSArray *busStops; // 途经公交站 AMapBusStop数组 410 | @property (nonatomic, strong) AMapBusStop *departureStop; // 起程站 411 | @property (nonatomic, strong) AMapBusStop *arrivalStop; // 下车站 412 | 413 | @end 414 | 415 | /*! 416 | @brief 输入提示 417 | */ 418 | @interface AMapTip : NSObject 419 | 420 | @property (nonatomic, strong) NSString *name; // 名称 421 | @property (nonatomic, strong) NSString *adcode; // 区域编码 422 | @property (nonatomic, strong) NSString *district; // 所属区域 423 | 424 | + (AMapTip *)tipWithName:(NSString *)name adcode:(NSString *)adcode district:(NSString *)district; 425 | 426 | @end 427 | 428 | /*! 429 | @brief 地理编码 430 | */ 431 | @interface AMapGeocode : NSObject 432 | 433 | @property (nonatomic, strong) NSString *formattedAddress; // 格式化地址 434 | @property (nonatomic, strong) NSString *province; // 所在省 435 | @property (nonatomic, strong) NSString *city; // 城市名 436 | @property (nonatomic, strong) NSString *district; // 区域名称 437 | @property (nonatomic, strong) NSString *township; // 所在乡镇 438 | @property (nonatomic, strong) NSString *neighborhood; // 社区 439 | @property (nonatomic, strong) NSString *building; // 楼 440 | @property (nonatomic, strong) NSString *adcode; // 区域编码 441 | @property (nonatomic, strong) AMapGeoPoint *location; // 坐标点 442 | @property (nonatomic, strong) NSArray *level; // 匹配的等级 NSString 数组 443 | 444 | @end 445 | 446 | /*! 447 | @brief 道路 448 | */ 449 | @interface AMapRoad : NSObject 450 | 451 | @property (nonatomic, strong) NSString *uid; // 道路ID 452 | @property (nonatomic, strong) NSString *name; // 道路名称 453 | @property (nonatomic, assign) NSInteger distance; // 距离(单位:米) 454 | @property (nonatomic, strong) NSString *direction; // 方向 455 | @property (nonatomic, strong) AMapGeoPoint *location; // 坐标点 456 | @property (nonatomic, strong) NSString *citycode; // 城市编码 457 | @property (nonatomic, strong) NSString *width; // 道路宽度 458 | @property (nonatomic, strong) NSString *type; // 道路分类 459 | 460 | @end 461 | 462 | /*! 463 | @brief 道路交叉口 464 | */ 465 | @interface AMapRoadInter : NSObject 466 | 467 | @property (nonatomic, assign) NSInteger distance; // 距离(单位:米) 468 | @property (nonatomic, strong) NSString *direction; // 方向 469 | @property (nonatomic, strong) AMapGeoPoint *location; // 经纬度 470 | @property (nonatomic, strong) NSString *firstId; // 第一条道路ID 471 | @property (nonatomic, strong) NSString *firstName; // 第一条道路名称 472 | @property (nonatomic, strong) NSString *secondId; // 第二条道路ID 473 | @property (nonatomic, strong) NSString *secondName; // 第二条道路名称 474 | 475 | @end 476 | 477 | /*! 478 | @brief 门牌信息 479 | */ 480 | @interface AMapStreetNumber : NSObject 481 | 482 | @property (nonatomic, strong) NSString *street; // 街道名称 483 | @property (nonatomic, strong) NSString *number; // 门牌号 484 | @property (nonatomic, strong) AMapGeoPoint *location; // 坐标点 485 | @property (nonatomic, assign) NSInteger distance; // 距离(单位:米) 486 | @property (nonatomic, strong) NSString *direction; // 方向 487 | 488 | @end 489 | 490 | /*! 491 | @brief 地址组成要素 492 | */ 493 | @interface AMapAddressComponent : NSObject 494 | 495 | @property (nonatomic, strong) NSString *province; // 省 496 | @property (nonatomic, strong) NSString *city; // 市 497 | @property (nonatomic, strong) NSString *district; // 区 498 | @property (nonatomic, strong) NSString *township; // 乡镇 499 | @property (nonatomic, strong) NSString *neighborhood; // 社区 500 | @property (nonatomic, strong) NSString *building; // 建筑 501 | @property (nonatomic, strong) NSString *citycode; // 城市编码 502 | @property (nonatomic, strong) NSString *adcode; // 区域编码 503 | @property (nonatomic, strong) AMapStreetNumber *streetNumber; // 门牌信息 504 | 505 | @end 506 | 507 | /*! 508 | @brief 逆地理编码 509 | */ 510 | @interface AMapReGeocode : NSObject 511 | 512 | // basic: 513 | @property (nonatomic, strong) NSString *formattedAddress; // 格式化地址 514 | @property (nonatomic, strong) AMapAddressComponent *addressComponent; // 地址组成要素 515 | 516 | // extensions: 517 | @property (nonatomic, strong) NSArray *roads; // 道路信息 AMapRoad数组 518 | @property (nonatomic, strong) NSArray *roadinters; // 道路路口信息 AMapRoadInter 数组 519 | @property (nonatomic, strong) NSArray *pois; // 兴趣点信息 AMapPOI数组 520 | 521 | @end 522 | 523 | #pragma mark - #导航结果数据类型 524 | 525 | /*! 526 | @brief 实时路况信息 527 | */ 528 | @interface AMapTMC : NSObject 529 | 530 | @property (nonatomic, strong) NSString *lcode; // 路况信息对应的locationcode 531 | @property (nonatomic, assign) NSInteger distance; // 路段长度(单位:米) 532 | @property (nonatomic, assign) NSInteger status; // 路况状态:0-未知;1-畅通;2-缓行;3-拥堵 533 | 534 | + (AMapTMC *)TMCWithLCode:(NSString *)lcode distance:(NSInteger)distance status:(NSInteger)status; 535 | 536 | @end 537 | 538 | /*! 539 | @brief 导航路段 540 | */ 541 | @interface AMapStep : NSObject 542 | 543 | // basic: 544 | @property (nonatomic, strong) NSString *instruction; // 行走指示 545 | @property (nonatomic, strong) NSString *orientation; // 方向 546 | @property (nonatomic, strong) NSString *road; // 道路名称 547 | @property (nonatomic, assign) NSInteger distance; // 此路段长度(单位:米) 548 | @property (nonatomic, assign) NSInteger duration; // 此路段预计耗时(单位:秒) 549 | @property (nonatomic, strong) NSString *polyline; // 此路段坐标点串 550 | @property (nonatomic, strong) NSString *action; // 导航主要动作 551 | @property (nonatomic, strong) NSString *assistantAction; // 导航辅助动作 552 | @property (nonatomic, assign) CGFloat tolls; // 此段收费(单位:元) 553 | @property (nonatomic, assign) NSInteger tollDistance; // 收费路段长度(单位:米) 554 | @property (nonatomic, strong) NSString *tollRoad; // 主要收费路段 555 | 556 | // extensions: 557 | @property (nonatomic, strong) NSArray *tmcs; // 路况信息 AMapTMC 数组 558 | @property (nonatomic, strong) NSArray *cities; // 途径城市 AMapCity 数组 559 | 560 | @end 561 | 562 | /*! 563 | @brief 步行、驾车方案 564 | */ 565 | @interface AMapPath : NSObject 566 | 567 | @property (nonatomic, assign) NSInteger distance; // 起点和终点的距离 568 | @property (nonatomic, assign) NSInteger duration; // 预计耗时(单位:秒) 569 | @property (nonatomic, strong) NSString *strategy; // 导航策略 570 | @property (nonatomic, strong) NSArray *steps; // 导航路段 AMapStep数组 571 | @property (nonatomic, assign) CGFloat tolls; // 此方案费用(单位:元) 572 | @property (nonatomic, assign) NSInteger tollDistance; // 此方案收费路段长度(单位:米) 573 | 574 | @end 575 | 576 | /*! 577 | @brief 导航方案 578 | */ 579 | @interface AMapRoute : NSObject 580 | 581 | @property (nonatomic, strong) AMapGeoPoint *origin; // 起点坐标 582 | @property (nonatomic, strong) AMapGeoPoint *destination; // 终点坐标 583 | @property (nonatomic, assign) CGFloat taxiCost; // 出租车费用(单位:元) 584 | @property (nonatomic, strong) NSArray *paths; // 步行、驾车方案列表 AMapPath 数组 585 | @property (nonatomic, strong) NSArray *transits; // 公交换乘方案列表 AMapTransit 数组 586 | 587 | @end 588 | 589 | /*! 590 | @brief 步行导航信息 591 | */ 592 | @interface AMapWalking : NSObject 593 | 594 | @property (nonatomic, strong) AMapGeoPoint *origin; // 起点坐标 595 | @property (nonatomic, strong) AMapGeoPoint *destination; // 终点坐标 596 | @property (nonatomic, assign) NSInteger distance; // 起点和终点的步行距离 597 | @property (nonatomic, assign) NSInteger duration; // 步行预计时间 598 | @property (nonatomic, strong) NSArray *steps; // 步行路段 AMapStep数组 599 | 600 | @end 601 | 602 | /*! 603 | @brief 公交换乘路段 604 | */ 605 | @interface AMapSegment : NSObject 606 | 607 | @property (nonatomic, strong) AMapWalking *walking; // 此路段步行导航信息 608 | @property (nonatomic, strong) AMapBusLine *busline; // 此路段公交导航信息 609 | @property (nonatomic, strong) NSString *enterName; // 入口名称 610 | @property (nonatomic, strong) AMapGeoPoint *enterLocation; // 入口经纬度 611 | @property (nonatomic, strong) NSString *exitName; // 出口名称 612 | @property (nonatomic, strong) AMapGeoPoint *exitLocation; // 出口经纬度 613 | 614 | @end 615 | 616 | /*! 617 | @brief 公交方案 618 | */ 619 | @interface AMapTransit : NSObject 620 | 621 | @property (nonatomic, assign) CGFloat cost; // 此公交方案价格(单位:元) 622 | @property (nonatomic, assign) NSInteger duration; // 此换乘方案预期时间(单位:秒) 623 | @property (nonatomic, assign) BOOL nightflag; // 是否是夜班车 624 | @property (nonatomic, assign) NSInteger walkingDistance; // 此方案总步行距离(单位:米) 625 | @property (nonatomic, strong) NSArray *segments; // 换乘路段 AMapSegment数组 626 | 627 | @end 628 | 629 | 630 | 631 | 632 | 633 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/Versions/2.2.1.1656/Headers/AMapSearchAPI.h: -------------------------------------------------------------------------------- 1 | // 2 | // AMapSearchAPI.h 3 | // searchKitV3 4 | // 5 | // Created by yin cai on 13-7-4. 6 | // Copyright (c) 2013年 Autonavi. All rights reserved. 7 | // 8 | #import 9 | 10 | #import "AMapSearchObj.h" 11 | #import "AMapCommonObj.h" 12 | 13 | @protocol AMapSearchDelegate; 14 | 15 | #pragma mark - AMapSearchAPI Interface 16 | 17 | @interface AMapSearchAPI : NSObject 18 | 19 | /*! 20 | @brief 实现了AMapSearchDelegate协议的类指针 21 | */ 22 | @property (nonatomic, assign) id delegate; 23 | 24 | /*! 25 | @brief 查询超时时间 默认超时时间20秒 26 | */ 27 | @property (nonatomic, assign) NSInteger timeOut; 28 | 29 | /*! 30 | @brief AMapSearch类对象的初始化函数 31 | @param key 搜索模块鉴权Key(详情请访问 http://api.amap.com/ ) 32 | @param delegate 实现AMapSearchDelegate协议的对象id 33 | @return AMapSearch类对象id 34 | */ 35 | - (id)initWithSearchKey:(NSString *)key Delegate:(id)delegate; 36 | 37 | /*! 38 | @brief POI 查询接口函数,即根据 POI 参数选项进行 POI 查询。 39 | @param request 查询选项。具体属性字段请参考 AMapPlaceSearchRequest 类。 40 | */ 41 | - (void)AMapPlaceSearch:(AMapPlaceSearchRequest *)request; 42 | 43 | /*! 44 | @brief 导航 查询接口函数。 45 | @param request 查询选项。具体属性字段请参考 AMapNavigationSearchRequest 类。 46 | */ 47 | - (void)AMapNavigationSearch:(AMapNavigationSearchRequest *)request; 48 | 49 | /*! 50 | @brief 输入提示 查询接口函数。 51 | @param request 查询选项。具体属性字段请参考 AMapInputTipsSearchRequest 类。 52 | */ 53 | - (void)AMapInputTipsSearch:(AMapInputTipsSearchRequest *)request; 54 | 55 | /*! 56 | @brief 地址编码 查询接口函数。 57 | @param request 查询选项。具体属性字段请参考 AMapGeocodeSearchRequest 类。 58 | */ 59 | - (void)AMapGeocodeSearch:(AMapGeocodeSearchRequest *)request; 60 | 61 | /*! 62 | @brief 逆地址编码 查询接口函数。 63 | @param request 查询选项。具体属性字段请参考 AMapReGeocodeSearchRequest 类。 64 | */ 65 | - (void)AMapReGoecodeSearch:(AMapReGeocodeSearchRequest *)request; 66 | 67 | /*! 68 | @brief 公交线路 查询接口函数。 69 | @param request 查询选项。具体属性字段请参考 AMapBusLineSearchRequest 类。 70 | */ 71 | - (void)AMapBusLineSearch:(AMapBusLineSearchRequest *)request; 72 | 73 | /*! 74 | @brief 公交车站 查询接口函数。 75 | @param request 查询选项。具体属性字段请参考 AMapBusStopSearchRequest 类。 76 | */ 77 | - (void)AMapBusStopSearch:(AMapBusStopSearchRequest *)request; 78 | 79 | @end 80 | 81 | 82 | #pragma mark - AMapSearchDelegate 83 | 84 | /*! 85 | @brief AMapSearchDelegate协议类,从NSObject类继承。 86 | */ 87 | @protocol AMapSearchDelegate 88 | 89 | @optional 90 | 91 | /*! 92 | @brief 通知查询成功或失败的回调函数 93 | @param searchRequest 发起的查询 94 | @param errInfo 错误信息 95 | */ 96 | - (void)search:(id)searchRequest error:(NSString*)errInfo; 97 | 98 | /*! 99 | @brief POI 查询回调函数 100 | @param request 发起查询的查询选项(具体字段参考AMapPlaceSearchRequest类中的定义) 101 | @param response 查询结果(具体字段参考AMapPlaceSearchResponse类中的定义) 102 | */ 103 | - (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)response; 104 | 105 | /*! 106 | @brief 导航 查询回调函数 107 | @param request 发起查询的查询选项(具体字段参考AMapNavigationSearchRequest类中的定义) 108 | @param response 查询结果(具体字段参考AMapNavigationSearchResponse类中的定义) 109 | */ 110 | - (void)onNavigationSearchDone:(AMapNavigationSearchRequest *)request response:(AMapNavigationSearchResponse *)response; 111 | 112 | /*! 113 | @brief 输入提示 查询回调函数 114 | @param request 发起查询的查询选项(具体字段参考AMapInputTipsSearchRequest类中的定义) 115 | @param response 查询结果(具体字段参考AMapInputTipsSearchResponse类中的定义) 116 | */ 117 | - (void)onInputTipsSearchDone:(AMapInputTipsSearchRequest *)request response:(AMapInputTipsSearchResponse *)response; 118 | 119 | /*! 120 | @brief 地理编码 查询回调函数 121 | @param request 发起查询的查询选项(具体字段参考AMapGeocodeSearchRequest类中的定义) 122 | @param response 查询结果(具体字段参考AMapGeocodeSearchResponse类中的定义) 123 | */ 124 | - (void)onGeocodeSearchDone:(AMapGeocodeSearchRequest *)request response:(AMapGeocodeSearchResponse *)response; 125 | 126 | /*! 127 | @brief 逆地理编码 查询回调函数 128 | @param request 发起查询的查询选项(具体字段参考AMapReGeocodeSearchRequest类中的定义) 129 | @param response 查询结果(具体字段参考AMapReGeocodeSearchResponse类中的定义) 130 | */ 131 | - (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response; 132 | 133 | /*! 134 | @brief 公交线路 查询回调函数 135 | @param request 发起查询的查询选项(具体字段参考AMapBusLineSearchRequest类中的定义) 136 | @param response 查询结果(具体字段参考AMapBusLineSearchResponse类中的定义) 137 | */ 138 | - (void)onBusLineSearchDone:(AMapBusLineSearchRequest *)request response:(AMapBusLineSearchResponse *)response; 139 | 140 | /*! 141 | @brief 公交站 查询回调函数 142 | @param request 发起查询的查询选项(具体字段参考AMapBusStopSearchRequest类中的定义) 143 | @param response 查询结果(具体字段参考AMapBusStopSearchResponse类中的定义) 144 | */ 145 | - (void)onBusStopSearchDone:(AMapBusStopSearchRequest *)request response:(AMapBusStopSearchResponse *)response; 146 | 147 | @end 148 | 149 | 150 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/Versions/2.2.1.1656/Headers/AMapSearchObj.h: -------------------------------------------------------------------------------- 1 | // 2 | // AMapSearchObj.h 3 | // searchKitV3 4 | // 5 | // Created by yin cai on 13-7-2. 6 | // Copyright (c) 2013年 Autonavi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AMapCommonObj.h" 11 | 12 | typedef enum { 13 | AMapSearchType_PlaceID = 1, 14 | AMapSearchType_PlaceKeyword = 2, 15 | AMapSearchType_PlaceAround = 3, 16 | AMapSearchType_PlacePolygon = 4, 17 | AMapSearchType_Geocode = 5, 18 | AMapSearchType_ReGeocode = 6, 19 | AMapSearchType_StopKeyword = 8, 20 | AMapSearchType_InputTips = 9, 21 | AMapSearchType_RoadID = 11, 22 | AMapSearchType_LineID = 13, 23 | AMapSearchType_LineKeyword = 14, 24 | AMapSearchType_NaviDrive = 16, 25 | AMapSearchType_NaviWalking = 17, 26 | AMapSearchType_NaviBus = 20, 27 | 28 | }AMapSearchType; 29 | 30 | #pragma mark - AMapPlaceSearchRequest 31 | 32 | /*! 33 | @brief POI查询过滤参数 34 | */ 35 | typedef NS_OPTIONS(NSUInteger, AMapRequireFilter) 36 | { 37 | AMapRequireNone = 0, 38 | AMapRequireGroupbuy = 1 << 0, // 全行业 39 | AMapRequireDiscount = 1 << 1, // 全行业 40 | AMapRequireMealOrdering = 1 << 2, // 餐饮行业 41 | }; 42 | 43 | @interface AMapPlaceSearchFilter : NSObject 44 | 45 | @property (nonatomic, assign) NSUInteger starFilter; // 过滤酒店星级(酒店行业)。(只限1,2,3,4,5;0 为不过滤)。 46 | @property (nonatomic, copy) NSArray *costFilter; // 过滤平均消费范围(全行业)。NSNumber(double)数组,[min, max] 表示价格区间,上限max可为空。 47 | @property (nonatomic, assign) AMapRequireFilter requireFilter; // 查询结果过滤. 48 | 49 | @end 50 | 51 | /*! 52 | @brief POI搜索 53 | */ 54 | @interface AMapPlaceSearchRequest : NSObject 55 | 56 | @property (nonatomic, assign) AMapSearchType searchType; // 默认为keyword 57 | 58 | /** 是否返回扩展信息,默认为 NO,若设置了requireGroup/requireDiscount任意一个为YES,则该参数自动设置为YES。*/ 59 | @property (nonatomic, assign) BOOL requireExtension; 60 | 61 | /** 查询结果过滤选项,和types配合使用,得到的结果在POI的bizExtention属性中体现。设置requireExtension为YES生效. */ 62 | @property (nonatomic, copy) AMapPlaceSearchFilter *searchFilter; 63 | 64 | /** 是否过滤带团购信息的结果,默认为 NO; 推荐使用searchFilter中的requireFilter代替。*/ 65 | @property (nonatomic, assign) BOOL requireGroup __attribute__((deprecated("use 'requireFilter' in searchFilter instead"))); 66 | 67 | /** 是否过滤带优惠信息的结果,默认为 NO; 推荐使用searchFilter中的requireFilter代替。*/ 68 | @property (nonatomic, assign) BOOL requireDiscount __attribute__((deprecated("use 'requireFilter' in searchFilter instead"))); 69 | 70 | // ID查询参数 71 | @property (nonatomic, copy) NSString *uid; // POI全局唯一ID 72 | 73 | // 周边查询参数: 74 | @property (nonatomic, copy) AMapGeoPoint *location; // 中心点坐标 75 | @property (nonatomic, assign) NSInteger radius; // 查询半径,单位:米 [default = 3000] 76 | 77 | // 多边形查询参数 78 | @property (nonatomic, copy) AMapGeoPolygon *polygon; // 坐标串定义 79 | 80 | // 关键字查询参数 81 | @property (nonatomic, copy) NSString *keywords; // 查询关键字,多个关键字用“|”分割,“空格"表示与,“双引号”表示不可分割 82 | @property (nonatomic, strong) NSArray *types; // POI分类字符串数组 83 | @property (nonatomic, strong) NSArray *city; // 城市数组,可选值:cityname(中文或中文全拼)、citycode、adcode 84 | 85 | @property (nonatomic, assign) NSInteger sortrule; // 排序规则:0-混合排序;1-距离排序 [default = 0] 86 | @property (nonatomic, assign) NSInteger offset; // 每页记录数 [default = 20] 87 | @property (nonatomic, assign) NSInteger page; // 当前页数 [default = 1] 88 | @end 89 | 90 | @interface AMapPlaceSearchResponse : NSObject 91 | 92 | @property (nonatomic, assign) NSInteger count; // 返回的POI数目 93 | @property (nonatomic, strong) AMapSuggestion *suggestion; // 关键字建议列表和城市建议列表 94 | @property (nonatomic, strong) NSArray *pois; // POI对象数组 95 | 96 | @end 97 | 98 | #pragma mark - AMapGeocodeSearchRequest 99 | 100 | @interface AMapGeocodeSearchRequest : NSObject 101 | 102 | @property (nonatomic, assign) AMapSearchType searchType; 103 | @property (nonatomic, copy) NSString *address; //地址 104 | @property (nonatomic, strong) NSArray *city; // 城市,可选值:cityname(中文或中文全拼)、citycode、adcode NSString数组 105 | @end 106 | 107 | @interface AMapGeocodeSearchResponse : NSObject 108 | 109 | @property (nonatomic, assign) NSInteger count; // 返回数目 110 | @property (nonatomic, strong) NSArray* geocodes; // 地理编码结果 AMapGeocode数组 111 | @end 112 | 113 | #pragma mark - AMapReGeocodeSearchRequest 114 | 115 | @interface AMapReGeocodeSearchRequest : NSObject 116 | 117 | @property (nonatomic, assign) AMapSearchType searchType; 118 | @property (nonatomic, assign) BOOL requireExtension; // 是否返回扩展信息,默认为 NO 119 | @property (nonatomic, copy) AMapGeoPoint *location; // 中心点坐标 120 | @property (nonatomic, assign) NSInteger radius; //[default = 500]; // 查询半径,单位:米 121 | @property (nonatomic, copy) NSString *poiIdFilter; // 返回结果屏蔽此ID的POI 122 | 123 | @end 124 | 125 | @interface AMapReGeocodeSearchResponse : NSObject 126 | 127 | @property(nonatomic, strong) AMapReGeocode *regeocode; // 逆地理编码结果 128 | 129 | @end 130 | 131 | #pragma mark - AMapInputTipsSearchRequest 132 | 133 | @interface AMapInputTipsSearchRequest : NSObject 134 | 135 | @property (nonatomic, assign) AMapSearchType searchType; 136 | @property (nonatomic, copy) NSString *keywords; // 查询关键字,多个关键字用“|”分割,“空格"表示与,“双引号”表示不可分割 137 | @property (nonatomic, strong) NSArray *types; // POI分类 NSString数组 138 | @property (nonatomic, strong) NSArray *city; // 城市,可选值:cityname(中文或中文全拼)、citycode、adcode NSString数组 139 | 140 | @end 141 | 142 | @interface AMapInputTipsSearchResponse : NSObject 143 | 144 | @property (nonatomic, assign) NSInteger count; // 返回数目 145 | @property (nonatomic, strong) NSArray *tips; // 提示列表 AMapTip数组 146 | 147 | @end 148 | 149 | #pragma mark - AMapBusLineSearchRequest 150 | 151 | @interface AMapBusLineSearchRequest : NSObject 152 | 153 | @property (nonatomic, assign) AMapSearchType searchType; // 默认为keyword 154 | @property (nonatomic, assign) BOOL requireExtension; // 是否返回扩展信息,默认为 NO 155 | @property (nonatomic, copy) NSString *uid; // 公交路线ID 156 | @property (nonatomic, copy) NSString *keywords; // 查询关键字,多个关键字用“|”分割,“空格"表示与,“双引号”表示不可分割 157 | @property (nonatomic, strong) NSArray *city; // 城市,可选值:cityname(中文或中文全拼)、citycode、adcode NSString数组 158 | @property (nonatomic, assign) NSInteger offset; // [default = 20]; // 每页记录数 159 | @property (nonatomic, assign) NSInteger page; // [default = 1]; // 当前页数 160 | 161 | @end 162 | 163 | @interface AMapBusLineSearchResponse : NSObject 164 | 165 | @property (nonatomic, assign) NSInteger count; // 返回数目 166 | @property (nonatomic, strong) AMapSuggestion *suggestion; // 关键字建议列表和城市建议列表 167 | @property (nonatomic, strong) NSArray *buslines; // 公交路线 AMapBusLine 数组 168 | @end 169 | 170 | #pragma mark - AMapBusStopSearchRequest 171 | 172 | @interface AMapBusStopSearchRequest : NSObject 173 | 174 | @property (nonatomic, assign) AMapSearchType searchType; // 默认为keyword 175 | @property (nonatomic, copy) NSString *keywords; // 查询关键字,多个关键字用“|”分割,“空格"表示与,“双引号”表示不可分割 176 | @property (nonatomic, strong) NSArray *city; // 城市,可选值:cityname(中文或中文全拼)、citycode、adcode NSString数组 177 | @property (nonatomic, assign) NSInteger offset; // [default = 20]; // 每页记录数 178 | @property (nonatomic, assign) NSInteger page; // [default = 1]; // 当前页数 179 | 180 | @end 181 | 182 | @interface AMapBusStopSearchResponse : NSObject 183 | 184 | @property (nonatomic, assign) NSInteger count; // 返回数目 185 | @property (nonatomic, strong) AMapSuggestion *suggestion; // 关键字建议列表和城市建议列表 186 | @property (nonatomic, strong) NSArray *busstops; // 公交站 AMapBusStop 数组 187 | 188 | @end 189 | 190 | #pragma mark - AMapNavigationSearchRequest 191 | 192 | @interface AMapNavigationSearchRequest : NSObject 193 | 194 | @property (nonatomic, assign) AMapSearchType searchType; // 默认为bus 195 | // 步行导航参数: 196 | @property (nonatomic, assign) NSInteger multipath; //[default = 0]; // 是否提供备选步行方案:0-只提供一条步行方案;1-提供备选步行方案(有可能无备选方案) 197 | 198 | // 驾车导航参数: 199 | @property (nonatomic, strong) NSArray *waypoints; // 途经点 AMapGeoPoint 数组 200 | @property (nonatomic, strong) NSArray *avoidpolygons; // 避让区域 AMapGeoPolygon 数组 201 | @property (nonatomic, copy) NSString *avoidroad; // 避让道路名 202 | @property (nonatomic, copy) NSString *originId; // 出发点 POI ID 203 | @property (nonatomic, copy) NSString *destinationId; // 目的地 POI ID 204 | 205 | // 公交换乘参数: 206 | @property (nonatomic, assign) BOOL nightflag; // 是否包含夜班车 207 | 208 | // 策略: 209 | // 驾车导航策略:0-速度优先(时间);1-费用优先(不走收费路段的最快道路);2-距离优先;3-不走快速路;4-结合实时交通(躲避拥堵);5-多策略(同时使用速度优先、费用优先、距离优先三个策略);6-不走高速;7-不走高速且避免收费;8-躲避收费和拥堵;9-不走高速且躲避收费和拥堵 210 | // 公交换乘策略:0-最快捷模式;1-最经济模式;2-最少换乘模式;3-最少步行模式;4-最舒适模式;5-不乘地铁模式 211 | @property (nonatomic, assign) NSInteger strategy; //[default = 0]; 212 | 213 | @property (nonatomic, copy) AMapGeoPoint *origin; // 出发点 214 | @property (nonatomic, copy) AMapGeoPoint *destination; // 目的地 215 | @property (nonatomic, copy) NSString *city; // 城市 216 | @property (nonatomic, assign) BOOL requireExtension; // 是否返回扩展信息,默认为 NO 217 | 218 | @end 219 | 220 | @interface AMapNavigationSearchResponse : NSObject 221 | 222 | @property (nonatomic, assign) NSInteger count; // 返回数目 223 | @property (nonatomic, strong) AMapRoute *route; // 导航方案 224 | 225 | @end 226 | 227 | 228 | 229 | 230 | 231 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/AMapSearchKit.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | 2.2.1.1656 -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/MAMapKit: -------------------------------------------------------------------------------- 1 | Versions/Current/MAMapKit -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAAnnotation.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAAnnotation.h 3 | // MAMapKit 4 | // 5 | // Created by yin cai on 11-12-13. 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | /*! 14 | @brief 该类为标注点的protocol,提供了标注类的基本信息函数 15 | */ 16 | @protocol MAAnnotation 17 | 18 | /*! 19 | @brief 标注view中心坐标 20 | */ 21 | @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 22 | 23 | @optional 24 | 25 | /*! 26 | @brief 获取annotation标题 27 | @return 返回annotation的标题信息 28 | */ 29 | - (NSString *)title; 30 | 31 | /*! 32 | @brief 获取annotation副标题 33 | @return 返回annotation的副标题信息 34 | */ 35 | - (NSString *)subtitle; 36 | 37 | /** 38 | @brief 设置标注的坐标,在拖拽时会被调用. 39 | @param newCoordinate 新的坐标值 40 | */ 41 | - (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate; 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAAnnotationView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAAnnotationView.h 3 | // MAMapKitDemo 4 | // 5 | // Created by songjian on 13-1-7. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #if (__IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED) 12 | 13 | enum { 14 | MAAnnotationViewDragStateNone = 0, // View is at rest, sitting on the map. 15 | MAAnnotationViewDragStateStarting, // View is beginning to drag (e.g. pin lift) 16 | MAAnnotationViewDragStateDragging, // View is dragging ("lift" animations are complete) 17 | MAAnnotationViewDragStateCanceling, // View was not dragged and should return to it's starting position (e.g. pin drop) 18 | MAAnnotationViewDragStateEnding // View was dragged, new coordinate is set and view should return to resting position (e.g. pin drop) 19 | }; 20 | 21 | typedef NSUInteger MAAnnotationViewDragState; 22 | 23 | #endif // #if (__IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED) 24 | 25 | @class MAAnnotationViewInternal; 26 | @protocol MAAnnotation; 27 | 28 | /*! 29 | @brief 标注view 30 | */ 31 | @interface MAAnnotationView : UIView 32 | 33 | /*! 34 | @brief 初始化并返回一个annotation view 35 | @param annotation 关联的annotation对象 36 | @param reuseIdentifier 如果要重用view,传入一个字符串,否则设为nil,建议重用view 37 | @return 初始化成功则返回annotation view,否则返回nil 38 | */ 39 | - (id)initWithAnnotation:(id )annotation reuseIdentifier:(NSString *)reuseIdentifier; 40 | 41 | /*! 42 | @brief 复用标识 43 | */ 44 | @property (nonatomic, readonly, copy) NSString *reuseIdentifier; 45 | 46 | /*! 47 | @brief 当从reuse队列里取出时被调用 48 | */ 49 | - (void)prepareForReuse; 50 | 51 | /*! 52 | @brief 关联的annotation 53 | */ 54 | @property (nonatomic, strong) id annotation; 55 | 56 | /*! 57 | @brief 显示的image 58 | */ 59 | @property (nonatomic, strong) UIImage *image; 60 | 61 | /*! 62 | @brief 默认情况下, annotation view的中心位于annotation的坐标位置,可以设置centerOffset改变view的位置,正的偏移使view朝右下方移动,负的朝左上方,单位是像素 63 | */ 64 | @property (nonatomic) CGPoint centerOffset; 65 | 66 | /*! 67 | @brief 默认情况下, 弹出的气泡位于view正中上方,可以设置calloutOffset改变view的位置,正的偏移使view朝右下方移动,负的朝左上方,单位是像素 68 | */ 69 | @property (nonatomic) CGPoint calloutOffset; 70 | 71 | /*! 72 | @brief 默认为YES,当为NO时view忽略触摸事件 73 | */ 74 | @property (nonatomic, getter=isEnabled) BOOL enabled; 75 | 76 | @property (nonatomic, getter=isHighlighted) BOOL highlighted; 77 | 78 | /*! 79 | @brief 设置是否处于选中状态 80 | */ 81 | @property (nonatomic, getter=isSelected) BOOL selected; 82 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated; 83 | 84 | @property (nonatomic) BOOL canShowCallout; 85 | 86 | /*! 87 | @brief 显示在气泡左侧的view 88 | */ 89 | @property (strong, nonatomic) UIView *leftCalloutAccessoryView; 90 | 91 | /*! 92 | @brief 显示在气泡右侧的view 93 | */ 94 | @property (strong, nonatomic) UIView *rightCalloutAccessoryView; 95 | 96 | /*! 97 | @brief 是否支持拖动 98 | */ 99 | @property (nonatomic, getter=isDraggable) BOOL draggable NS_AVAILABLE(NA, 4_0); 100 | 101 | /*! 102 | @brief 当前view的拖动状态 103 | */ 104 | @property (nonatomic) MAAnnotationViewDragState dragState NS_AVAILABLE(NA, 4_0); 105 | - (void)setDragState:(MAAnnotationViewDragState)newDragState animated:(BOOL)animated NS_AVAILABLE(NA, 4_2); 106 | 107 | @end 108 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MACircle.h: -------------------------------------------------------------------------------- 1 | // 2 | // MACircle.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import "MAShape.h" 10 | #import "MAOverlay.h" 11 | #import "MAGeometry.h" 12 | 13 | /*! 14 | @brief 该类用于定义一个圆, 通常MACircle是MACircleView的model 15 | */ 16 | @interface MACircle : MAShape { 17 | @package 18 | CLLocationCoordinate2D _coordinate; 19 | CLLocationDistance _radius; 20 | 21 | MAMapRect _boundingMapRect; 22 | } 23 | 24 | /*! 25 | @brief 根据中心点和半径生成圆 26 | @param coord 中心点的经纬度坐标 27 | @param radius 半径,单位:米 28 | @return 新生成的圆 29 | */ 30 | + (MACircle *)circleWithCenterCoordinate:(CLLocationCoordinate2D)coord 31 | radius:(CLLocationDistance)radius; 32 | 33 | /*! 34 | @brief 根据map rect生成圆 35 | @param mapRect 圆的最小外界矩形 36 | @return 新生成的圆 37 | */ 38 | + (MACircle *)circleWithMapRect:(MAMapRect)mapRect; 39 | 40 | /*! 41 | @brief 中心点经纬度坐标 42 | */ 43 | @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 44 | 45 | /*! 46 | @brief 半径,单位:米 47 | */ 48 | @property (nonatomic, readonly) CLLocationDistance radius; 49 | 50 | /*! 51 | @brief 该圆的外接map rect 52 | */ 53 | @property (nonatomic, readonly) MAMapRect boundingMapRect; 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MACircleView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MACircleView.h 3 | // MAMapKit 4 | // 5 | // Created by yin cai on 11-12-30. 6 | // Copyright (c) 2011年 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "MACircle.h" 10 | #import "MAOverlayPathView.h" 11 | 12 | /*! 13 | @brief 该类是MACircle的显示圆view,可以通过MAOverlayPathView修改其fill和stroke attributes 14 | */ 15 | @interface MACircleView : MAOverlayPathView 16 | 17 | /*! 18 | @brief 根据指定圆生成对应的View 19 | @param circle 指定的MACircle model 20 | @return 生成的View 21 | */ 22 | - (id)initWithCircle:(MACircle *)circle; 23 | 24 | /*! 25 | @brief 关联的MAcirlce model 26 | */ 27 | @property (nonatomic, readonly) MACircle *circle; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAGeodesicPolyline.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAGeodesicPolyline.h 3 | // MapKit_static 4 | // 5 | // Created by songjian on 13-10-23. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAPolyline.h" 10 | 11 | @interface MAGeodesicPolyline : MAPolyline 12 | 13 | + (MAGeodesicPolyline *)polylineWithPoints:(MAMapPoint *)points count:(NSUInteger)count; 14 | + (MAGeodesicPolyline *)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAGeometry.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAGeometry.h 3 | // MAMapKitDemo 4 | // 5 | // Created by songjian on 12-12-21. 6 | // Copyright (c) 2012年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | #ifdef __cplusplus 13 | extern "C" { 14 | #endif 15 | 16 | typedef struct { 17 | CLLocationDegrees latitudeDelta; 18 | CLLocationDegrees longitudeDelta; 19 | } MACoordinateSpan; 20 | 21 | typedef struct { 22 | CLLocationCoordinate2D center; 23 | MACoordinateSpan span; 24 | } MACoordinateRegion; 25 | 26 | static inline MACoordinateSpan MACoordinateSpanMake(CLLocationDegrees latitudeDelta, CLLocationDegrees longitudeDelta) 27 | { 28 | return (MACoordinateSpan){latitudeDelta, longitudeDelta}; 29 | } 30 | 31 | typedef struct { 32 | CLLocationCoordinate2D northEast; 33 | CLLocationCoordinate2D southWest; 34 | } MACoordinateBounds; 35 | 36 | static inline MACoordinateBounds MACoordinateBoundsMake(CLLocationCoordinate2D northEast,CLLocationCoordinate2D southWest) 37 | { 38 | return (MACoordinateBounds){northEast, southWest}; 39 | } 40 | 41 | static inline MACoordinateRegion MACoordinateRegionMake(CLLocationCoordinate2D centerCoordinate, MACoordinateSpan span) 42 | { 43 | return (MACoordinateRegion){centerCoordinate, span}; 44 | } 45 | 46 | extern MACoordinateRegion MACoordinateRegionMakeWithDistance(CLLocationCoordinate2D centerCoordinate, 47 | CLLocationDistance latitudinalMeters, 48 | CLLocationDistance longitudinalMeters); 49 | 50 | typedef struct { 51 | double x; 52 | double y; 53 | } MAMapPoint; 54 | 55 | typedef struct { 56 | double width; 57 | double height; 58 | } MAMapSize; 59 | 60 | typedef struct { 61 | MAMapPoint origin; 62 | MAMapSize size; 63 | } MAMapRect; 64 | 65 | /*! 66 | @brief 经纬度转投影 67 | */ 68 | extern MAMapPoint MAMapPointForCoordinate(CLLocationCoordinate2D coordinate); 69 | 70 | /*! 71 | @brief 投影转经纬度 72 | */ 73 | extern CLLocationCoordinate2D MACoordinateForMapPoint(MAMapPoint mapPoint); 74 | 75 | /*! 76 | @brief 投影Rect转经纬度Rect 77 | */ 78 | extern MACoordinateRegion MACoordinateRegionForMapRect(MAMapRect rect); 79 | 80 | /*! 81 | @brief 经纬度Rect转投影Rect 82 | */ 83 | extern MAMapRect MAMapRectForCoordinateRegion(MACoordinateRegion region); 84 | 85 | static inline MAMapPoint MAMapPointMake(double x, double y) 86 | { 87 | return (MAMapPoint){x, y}; 88 | } 89 | 90 | static inline MAMapSize MAMapSizeMake(double width, double height) 91 | { 92 | return (MAMapSize){width, height}; 93 | } 94 | 95 | static inline MAMapRect MAMapRectMake(double x, double y, double width, double height) 96 | { 97 | return (MAMapRect){MAMapPointMake(x, y), MAMapSizeMake(width, height)}; 98 | } 99 | 100 | static inline double MAMapRectGetMinX(MAMapRect rect) 101 | { 102 | return rect.origin.x; 103 | } 104 | 105 | static inline double MAMapRectGetMinY(MAMapRect rect) 106 | { 107 | return rect.origin.y; 108 | } 109 | 110 | static inline double MAMapRectGetMidX(MAMapRect rect) 111 | { 112 | return rect.origin.x + rect.size.width / 2.0; 113 | } 114 | 115 | static inline double MAMapRectGetMidY(MAMapRect rect) 116 | { 117 | return rect.origin.y + rect.size.height / 2.0; 118 | } 119 | 120 | static inline double MAMapRectGetMaxX(MAMapRect rect) 121 | { 122 | return rect.origin.x + rect.size.width; 123 | } 124 | 125 | static inline double MAMapRectGetMaxY(MAMapRect rect) 126 | { 127 | return rect.origin.y + rect.size.height; 128 | } 129 | 130 | static inline double MAMapRectGetWidth(MAMapRect rect) 131 | { 132 | return rect.size.width; 133 | } 134 | 135 | static inline double MAMapRectGetHeight(MAMapRect rect) 136 | { 137 | return rect.size.height; 138 | } 139 | 140 | /*! 141 | @brief 判断点是否在矩形内 142 | */ 143 | extern BOOL MAMapRectContainsPoint(MAMapRect rect, MAMapPoint point); 144 | 145 | /*! 146 | @brief 判断两矩形是否相交 147 | */ 148 | extern BOOL MAMapRectIntersectsRect(MAMapRect rect1, MAMapRect rect2); 149 | 150 | /*! 151 | @brief 判断矩形rect1是否包含矩形rect2 152 | */ 153 | extern BOOL MAMapRectContainsRect(MAMapRect rect1, MAMapRect rect2); 154 | 155 | /*! 156 | @brief 判断点是否在圆内 157 | */ 158 | extern BOOL MACircleContainsPoint(MAMapPoint point, MAMapPoint center, double radius); 159 | 160 | extern BOOL MACircleContainsCoordinate(CLLocationCoordinate2D point, CLLocationCoordinate2D center, double radius); 161 | 162 | /*! 163 | @brief 判断点是否在多边形内 164 | */ 165 | extern BOOL MAPolygonContainsPoint(MAMapPoint point, MAMapPoint *polygon, NSUInteger count); 166 | 167 | extern BOOL MAPolygonContainsCoordinate(CLLocationCoordinate2D point, CLLocationCoordinate2D *polygon, NSUInteger count); 168 | 169 | /*! 170 | @brief 单位投影的距离 171 | */ 172 | extern CLLocationDistance MAMetersPerMapPointAtLatitude(CLLocationDegrees latitude); 173 | 174 | /*! 175 | @brief 1米对应的投影 176 | */ 177 | extern double MAMapPointsPerMeterAtLatitude(CLLocationDegrees latitude); 178 | 179 | /*! 180 | @brief 投影两点之间的距离 181 | */ 182 | extern CLLocationDistance MAMetersBetweenMapPoints(MAMapPoint a, MAMapPoint b); 183 | 184 | /*! 185 | @brief 经纬度间的面积(单位 平方米) 186 | */ 187 | extern double MAAreaBetweenCoordinates(CLLocationCoordinate2D leftTop, CLLocationCoordinate2D rightBottom); 188 | 189 | #ifdef __cplusplus 190 | } 191 | #endif 192 | 193 | @interface NSValue (NSValueMAGeometryExtensions) 194 | 195 | + (NSValue *)valueWithMAMapPoint:(MAMapPoint)mapPoint; 196 | + (NSValue *)valueWithMAMapSize:(MAMapSize)mapSize; 197 | + (NSValue *)valueWithMAMapRect:(MAMapRect)mapRect; 198 | 199 | - (MAMapPoint)MAMapPointValue; 200 | - (MAMapSize)MAMapSizeValue; 201 | - (MAMapRect)MAMapRectValue; 202 | 203 | @end 204 | 205 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAGroundOverlay.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAGroundOverlay.h 3 | // MapKit_static 4 | // 5 | // Created by Li Fei on 11/12/13. 6 | // Copyright (c) 2013 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "MAShape.h" 12 | #import "MAOverlay.h" 13 | 14 | /*! 15 | @brief 该类用于确定覆盖在地图上的图片,及其覆盖区域, 通常MAGroundOverlay是MAGroundOverlayView的model 16 | */ 17 | @interface MAGroundOverlay : MAShape 18 | 19 | /*! 20 | @brief 绘制在地图上的覆盖图片 21 | */ 22 | @property (nonatomic, readonly) UIImage *icon; 23 | 24 | /*! 25 | @brief 透明度. 最终透明度 = 纹理透明度 * alpha. 有效范围为[0.f, 1.f], 默认为1.f 26 | */ 27 | @property (nonatomic) CGFloat alpha; 28 | 29 | /*! 30 | @brief 覆盖图片在地图尺寸等同于其像素的zoom值 31 | */ 32 | @property (nonatomic, readonly) CGFloat zoomLevel; 33 | 34 | /*! 35 | @brief 图片在地图中的覆盖范围 36 | */ 37 | @property (nonatomic, readonly) MACoordinateBounds bounds; 38 | 39 | /*! 40 | @brief 根据bounds值和icon生成GroundOverlay 41 | @param bounds 图片的在地图的覆盖范围 42 | @param icon 覆盖图片 43 | @return 以bounds和icon 新生成GroundOverlay 44 | */ 45 | + (instancetype)groundOverlayWithBounds:(MACoordinateBounds)bounds 46 | icon:(UIImage *)icon; 47 | 48 | /*! 49 | @brief 根据coordinate,icon,zoomLevel生成GroundOverlay 50 | @param coordinate 图片的在地图上的中心点 51 | @param zoomLevel 图片在地图尺寸等同于像素的zoom值 52 | @param icon 覆盖图片 53 | @return 以coordinate,icon,zoomLevel 新生成GroundOverlay 54 | */ 55 | + (instancetype)groundOverlayWithCoordinate:(CLLocationCoordinate2D)coordinate 56 | zoomLevel:(CGFloat)zoomLevel 57 | icon:(UIImage *)icon; 58 | @end 59 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAGroundOverlayView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAGroundOverlayView.h 3 | // MapKit_static 4 | // 5 | // Created by Li Fei on 11/13/13. 6 | // Copyright (c) 2013 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAOverlayView.h" 10 | #import "MAGroundOverlay.h" 11 | 12 | /*! 13 | @brief 此类是将MAGroundOverlay中的覆盖图片显示在地图上的view; 14 | */ 15 | @interface MAGroundOverlayView : MAOverlayView 16 | 17 | /*! 18 | @brief groundOverlay 具有覆盖图片,以及图片覆盖的区域 19 | */ 20 | @property (nonatomic ,readonly) MAGroundOverlay *groundOverlay; 21 | 22 | /*! 23 | @brief 根据指定的GroundOverlay生成将图片显示在地图上View 24 | @param groundOverlay 制定了覆盖图片,以及图片的覆盖区域的groundOverlay 25 | @return 以GroundOverlay新生成View 26 | */ 27 | - (id)initWithGroundOverlay:(MAGroundOverlay *)groundOverlay; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAMapKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAMapKit.h 3 | // MAMapKitDemo 4 | // 5 | // Created by songjian on 12-12-21. 6 | // Copyright (c) 2012年 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAMapView.h" 10 | #import "MAGeometry.h" 11 | #import "MATypes.h" 12 | #import "MAAnnotation.h" 13 | #import "MAOverlay.h" 14 | #import "MACircle.h" 15 | #import "MACircleView.h" 16 | #import "MAMultiPoint.h" 17 | #import "MAOverlayPathView.h" 18 | #import "MAOverlayView.h" 19 | #import "MAPolygon.h" 20 | #import "MAPolygonView.h" 21 | #import "MAPolyline.h" 22 | #import "MAPolylineView.h" 23 | #import "MAGroundOverlay.h" 24 | #import "MAGroundOverlayView.h" 25 | #import "MATileOverlay.h" 26 | #import "MATileOverlayView.h" 27 | #import "MAShape.h" 28 | #import "MAPinAnnotationView.h" 29 | #import "MAAnnotationView.h" 30 | #import "MAPointAnnotation.h" 31 | #import "MAUserlocation.h" 32 | #import "MAMapServices.h" 33 | #import "MATouchPoi.h" 34 | #import "MAGeodesicPolyline.h" 35 | 36 | #import "MAOfflineMap.h" 37 | #import "MAOfflineItem.h" 38 | #import "MAOfflineCity.h" 39 | #import "MAOfflineItemCommonCity.h" 40 | #import "MAOfflineItemMunicipality.h" 41 | #import "MAOfflineItemNationWide.h" 42 | #import "MAOfflineProvince.h" 43 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAMapServices.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAMapServices.h 3 | // MapKit_static 4 | // 5 | // Created by songjian on 13-6-13. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MAMapServices : NSObject 12 | 13 | + (MAMapServices *)sharedServices; 14 | 15 | /*! 16 | @brief API Key, 在创建MAMapView之前需要先绑定key. 17 | */ 18 | @property (nonatomic, copy) NSString *apiKey; 19 | 20 | /*! 21 | @brief SDK 版本号. 22 | */ 23 | @property (nonatomic, readonly) NSString *SDKVersion; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAMapView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAMapView.h 3 | // MAMapKitDemo 4 | // 5 | // Created by songjian on 12-12-21. 6 | // Copyright (c) 2012年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MATypes.h" 11 | #import "MAOverlay.h" 12 | #import "MAOverlayView.h" 13 | #import "MAAnnotationView.h" 14 | #import "MAAnnotation.h" 15 | 16 | /** 17 | * MAMapView 的layer 支持中心点, 缩放级别, 旋转角度, 摄像机俯视角度. 这四个地图状态属性的CABasicAnimation, CAKeyframeAnimation. 18 | * 19 | * *************************************************** 20 | * 说明 21 | * 22 | * CAMediaTimingFunction 支持的类型如下: 23 | * 1> kCAMediaTimingFunctionLinear (default) 24 | * 2> kCAMediaTimingFunctionEaseIn 25 | * 3> kCAMediaTimingFunctionEaseOut 26 | * 4> kCAMediaTimingFunctionEaseInEaseOut 27 | * 28 | * CAAnimation 支持的变量如下: 29 | * 1> duration 30 | * 2> timingFunction 31 | * 3> delegate 32 | * 33 | * CAPropertyAnimation 支持的变量如下: 34 | * 1> keyPath 35 | * 36 | * CABasicAnimation 支持的变量如下: 37 | * 1> fromValue 38 | * 2> toValue 39 | * 40 | * CAKeyframeAnimation 支持的变量如下: 41 | * 1> values 42 | * 2> keyTimes 43 | * 3> timingFunctions 44 | * 45 | * ***************************************************** 46 | * Add CABasicAnimation Example: 47 | * 48 | * CLLocationCoordinate2D toCoordiante = CLLocationCoordinate2DMake(39.989870, 116.480940); 49 | * CABasicAnimation *centerAnimation = [CABasicAnimation animationWithKeyPath:kMAMapLayerCenterMapPointKey]; 50 | * centerAnimation.duration = 3.f; 51 | * centerAnimation.toValue = [NSValue valueWithMAMapPoint:MAMapPointForCoordinate(toCoordiante)]; 52 | * centerAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 53 | * [mapView.layer addAnimation:centerAnimation forKey:kMAMapLayerCenterMapPointKey]; 54 | * 55 | * Add CAKeyframeAnimation Example: 56 | * 57 | * CAKeyframeAnimation *zoomLevelAnimation = [CAKeyframeAnimation animationWithKeyPath:kMAMapLayerZoomLevelKey]; 58 | * zoomLevelAnimation.duration = 3.f; 59 | * zoomLevelAnimation.values = @[@(15), @(12), @(18)]; 60 | * zoomLevelAnimation.keyTimes = @[@(0.f), @(0.4f), @(1.f)]; 61 | * [mapView.layer addAnimation:zoomLevelAnimation forKey:kMAMapLayerZoomLevelKey]; 62 | * 63 | * Remove animation Example: 64 | * [mapView.layer removeAnimationForKey:kMAMapLayerZoomLevelKey]; 65 | * 66 | **/ 67 | 68 | /*! 69 | @brief 中心点(MAMapPoint)key, 封装成[NSValue valueWithMAMapPoint:]. 70 | */ 71 | extern NSString * const kMAMapLayerCenterMapPointKey; 72 | 73 | /*! 74 | @brief 缩放级别key, 范围[minZoomLevel, maxZoomLevel], 封装成NSNumber. 75 | */ 76 | extern NSString * const kMAMapLayerZoomLevelKey; 77 | 78 | /*! 79 | @brief 旋转角度key, 范围[0, 360), 封装成NSNumber. 80 | */ 81 | extern NSString * const kMAMapLayerRotationDegreeKey; 82 | 83 | /*! 84 | @brief 摄像机俯视角度, 范围[0, 45], 封装成NSNumber. 85 | */ 86 | extern NSString * const kMAMapLayerCameraDegreeKey; 87 | 88 | 89 | enum { 90 | MAUserTrackingModeNone = 0, // the user's location is not followed 91 | MAUserTrackingModeFollow, // the map follows the user's location 92 | MAUserTrackingModeFollowWithHeading, // the map follows the user's location and heading 93 | }; 94 | 95 | typedef NSInteger MAUserTrackingMode; 96 | 97 | @class MAUserLocation; 98 | @class MATouchPoi; 99 | @class MACircle; 100 | 101 | @protocol MAMapViewDelegate; 102 | 103 | /*! 104 | @brief 地图view 105 | */ 106 | @interface MAMapView : UIView 107 | 108 | /*! 109 | @brief 代理 110 | */ 111 | @property (nonatomic, assign) id delegate; 112 | 113 | /*! 114 | @brief 地图类型 115 | */ 116 | @property (nonatomic) MAMapType mapType; 117 | 118 | /*! 119 | @brief logo位置, 必须在mapView.bounds之内,否则会被忽略 120 | */ 121 | @property (nonatomic) CGPoint logoCenter; 122 | 123 | /*! 124 | @brief logo的宽高 125 | */ 126 | @property (nonatomic, readonly) CGSize logoSize; 127 | 128 | /*! 129 | @brief 是否显示交通 130 | */ 131 | @property (nonatomic, getter = isShowTraffic) BOOL showTraffic; 132 | 133 | /*! 134 | @brief 是否隐藏楼块, 默认为NO 135 | */ 136 | @property (nonatomic, getter = isBuildingsDisabled) BOOL buildingsDisabled; 137 | 138 | /*! 139 | @brief 是否支持缩放 140 | */ 141 | @property (nonatomic, getter = isZoomEnabled) BOOL zoomEnabled; 142 | 143 | /*! 144 | @brief 是否支持平移 145 | */ 146 | @property (nonatomic, getter = isScrollEnabled) BOOL scrollEnabled; 147 | 148 | /*! 149 | @brief 是否支持旋转 150 | */ 151 | @property (nonatomic, getter = isRotateEnabled) BOOL rotateEnabled; 152 | 153 | /*! 154 | @brief 是否支持单击地图获取POI信息(默认为NO) 155 | 对应的回调是 - (void)mapView:(MAMapView *)mapView didTouchPois:(NSArray *)pois 156 | */ 157 | @property (nonatomic) BOOL touchPOIEnabled; 158 | 159 | /*! 160 | @brief 设置地图旋转角度(逆时针为正向) 161 | */ 162 | @property (nonatomic) CGFloat rotationDegree; 163 | 164 | /*! 165 | @brief 设置地图旋转角度(逆时针为正向) 166 | @param animated 动画 167 | @param duration 动画时间 168 | */ 169 | - (void)setRotationDegree:(CGFloat)rotationDegree animated:(BOOL)animated duration:(CFTimeInterval)duration; 170 | 171 | /*! 172 | @brief 设置地图相机角度(范围为[0.f, 45.f]) 173 | */ 174 | @property (nonatomic) CGFloat cameraDegree; 175 | 176 | - (void)setCameraDegree:(CGFloat)cameraDegree animated:(BOOL)animated duration:(CFTimeInterval)duration; 177 | 178 | /*! 179 | @brief 是否支持camera旋转 180 | */ 181 | @property (nonatomic, getter = isRotateCameraEnabled) BOOL rotateCameraEnabled; 182 | 183 | /*! 184 | @brief 是否显示罗盘 185 | */ 186 | @property (nonatomic, assign) BOOL showsCompass; 187 | 188 | /*! 189 | @brief 罗盘原点位置 190 | */ 191 | @property (nonatomic) CGPoint compassOrigin; 192 | 193 | /*! 194 | @brief 罗盘的宽高 195 | */ 196 | @property (nonatomic, readonly) CGSize compassSize; 197 | 198 | /*! 199 | @brief 是否显示比例尺 200 | */ 201 | @property (nonatomic) BOOL showsScale; 202 | 203 | /*! 204 | @brief 比例尺原点位置 205 | */ 206 | @property (nonatomic) CGPoint scaleOrigin; 207 | 208 | /*! 209 | @brief 比例尺的最大宽高 210 | */ 211 | @property (nonatomic, readonly) CGSize scaleSize; 212 | 213 | /*! 214 | @brief 在当前缩放级别下, 基于地图中心点, 1 screen point 对应的距离(单位是米). 215 | @return 对应的距离(单位是米) 216 | */ 217 | - (double)metersPerPointForCurrentZoomLevel; 218 | 219 | /*! 220 | @brief 在指定的缩放级别下, 基于地图中心点, 1 screen point 对应的距离(单位是米). 221 | @param zoomLevel 指定的缩放级别, 在[minZoomLevel, maxZoomLevel]范围内. 222 | @return 对应的距离(单位是米) 223 | */ 224 | - (double)metersPerPointForZoomLevel:(CGFloat)zoomLevel; 225 | 226 | /*! 227 | @brief 当前地图的经纬度范围,设定的该范围可能会被调整为适合地图窗口显示的范围 228 | */ 229 | @property (nonatomic) MACoordinateRegion region; 230 | - (void)setRegion:(MACoordinateRegion)region animated:(BOOL)animated; 231 | 232 | /*! 233 | @brief 当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化 234 | */ 235 | @property (nonatomic) CLLocationCoordinate2D centerCoordinate; 236 | - (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated; 237 | 238 | /*! 239 | @brief 根据当前地图视图frame的大小调整region范围 240 | @param region 要调整的经纬度范围 241 | @return 调整后的经纬度范围 242 | */ 243 | - (MACoordinateRegion)regionThatFits:(MACoordinateRegion)region; 244 | 245 | /*! 246 | @brief 可见区域 247 | */ 248 | @property (nonatomic) MAMapRect visibleMapRect; 249 | - (void)setVisibleMapRect:(MAMapRect)mapRect animated:(BOOL)animated; 250 | 251 | /*! 252 | @brief 缩放级别 253 | */ 254 | @property (nonatomic) CGFloat zoomLevel; 255 | - (void)setZoomLevel:(CGFloat)zoomLevel animated:(BOOL)animated; 256 | 257 | /*! 258 | @brief 根据指定的枢纽点来缩放地图 259 | @param zoomLevel 缩放级别 260 | @param pivot 枢纽点(基于地图view的坐标系) 261 | @param animated 是否动画 262 | */ 263 | - (void)setZoomLevel:(CGFloat)zoomLevel atPivot:(CGPoint)pivot animated:(BOOL)animated; 264 | 265 | /*! 266 | @brief 最小缩放级别 267 | */ 268 | @property (nonatomic, readonly) CGFloat minZoomLevel; 269 | 270 | /*! 271 | @brief 最大缩放级别 272 | */ 273 | @property (nonatomic, readonly) CGFloat maxZoomLevel; 274 | 275 | /*! 276 | @brief 调整投影矩形比例 277 | @param mapRect 要调整的投影矩形 278 | @return 调整后的投影矩形 279 | */ 280 | - (MAMapRect)mapRectThatFits:(MAMapRect)mapRect; 281 | 282 | /*! 283 | @brief 根据当前地图视图frame的大小调整投影范围 284 | @param mapRect 要调整的投影范围 285 | @return 调整后的投影范围 286 | */ 287 | - (void)setVisibleMapRect:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animate; 288 | 289 | /*! 290 | @brief 根据嵌入数据来调整投影矩形比例 291 | @param mapRect 要调整的投影矩形 292 | @param insets 嵌入数据 293 | @return 调整后的投影矩形 294 | */ 295 | - (MAMapRect)mapRectThatFits:(MAMapRect)mapRect edgePadding:(UIEdgeInsets)insets; 296 | 297 | /*! 298 | @brief 将经纬度转换为指定view坐标系的坐标 299 | @param coordinate 经纬度 300 | @param view 指定的view 301 | @return 基于指定view坐标系的坐标 302 | */ 303 | - (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view; 304 | 305 | /*! 306 | @brief 将指定view坐标系的坐标转换为经纬度 307 | @param point 指定view坐标系的坐标 308 | @param view 指定的view 309 | @return 经纬度 310 | */ 311 | - (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view; 312 | 313 | /*! 314 | @brief 将经纬度region转换为指定view坐标系的rect 315 | @param region 经纬度region 316 | @param view 指定的view 317 | @return 指定view坐标系的rect 318 | */ 319 | - (CGRect)convertRegion:(MACoordinateRegion)region toRectToView:(UIView *)view; 320 | 321 | /*! 322 | @brief 将指定view坐标系的rect转换为经纬度region 323 | @param rect 指定view坐标系的rect 324 | @param view 指定的view 325 | @return 经纬度region 326 | */ 327 | - (MACoordinateRegion)convertRect:(CGRect)rect toRegionFromView:(UIView *)view; 328 | 329 | /*! 330 | @brief 是否显示用户位置 331 | */ 332 | @property (nonatomic) BOOL showsUserLocation; 333 | 334 | /*! 335 | @brief 当前的位置数据 336 | */ 337 | @property (nonatomic, readonly) MAUserLocation *userLocation; 338 | 339 | /*! 340 | @brief 是否自定义用户位置精度圈(userLocationAccuracyCircle)对应的 view, 默认为 NO. 341 | 如果为YES: 会调用 - (MAOverlayView *)mapView:(MAMapView *)mapView viewForOverlay:(id )overlay 若返回nil, 则不加载. 342 | 如果为NO : 会使用默认的样式. 343 | */ 344 | @property (nonatomic) BOOL customizeUserLocationAccuracyCircleRepresentation; 345 | 346 | /*! 347 | @brief 用户位置精度圈 对应的overlay. 348 | */ 349 | @property (nonatomic, readonly) MACircle *userLocationAccuracyCircle; 350 | 351 | /*! 352 | @brief 定位用户位置的模式 353 | */ 354 | @property (nonatomic) MAUserTrackingMode userTrackingMode; 355 | - (void)setUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated; 356 | 357 | /*! 358 | @brief 当前位置再地图中是否可见 359 | */ 360 | @property (nonatomic, readonly, getter=isUserLocationVisible) BOOL userLocationVisible; 361 | 362 | /*! 363 | @brief 向地图窗口添加标注,需要实现MAMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View 364 | @param annotation 要添加的标注 365 | */ 366 | - (void)addAnnotation:(id )annotation; 367 | 368 | /*! 369 | @brief 向地图窗口添加一组标注,需要实现MAMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View 370 | @param annotations 要添加的标注数组 371 | */ 372 | - (void)addAnnotations:(NSArray *)annotations; 373 | 374 | /*! 375 | @brief 移除标注 376 | @param annotation 要移除的标注 377 | */ 378 | - (void)removeAnnotation:(id )annotation; 379 | 380 | /*! 381 | @brief 移除一组标注 382 | @param annotation 要移除的标注数组 383 | */ 384 | - (void)removeAnnotations:(NSArray *)annotations; 385 | 386 | /*! 387 | @brief 标注数组 388 | */ 389 | @property (nonatomic, readonly) NSArray *annotations; 390 | 391 | /*! 392 | @brief 获取指定投影矩形范围内的标注 393 | @param mapRect 投影矩形范围 394 | @return 标注集合 395 | */ 396 | - (NSSet *)annotationsInMapRect:(MAMapRect)mapRect; 397 | 398 | /*! 399 | @brief 根据标注数据过去标注view 400 | @param annotation 标注数据 401 | @return 对应的标注view 402 | */ 403 | - (MAAnnotationView *)viewForAnnotation:(id )annotation; 404 | 405 | /*! 406 | @brief 从复用内存池中获取制定复用标识的annotation view 407 | @param identifier 复用标识 408 | @return annotation view 409 | */ 410 | - (MAAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier; 411 | 412 | /*! 413 | @brief 选中标注数据对应的view 414 | @param annotation 标注数据 415 | @param animated 是否有动画效果 416 | */ 417 | - (void)selectAnnotation:(id )annotation animated:(BOOL)animated; 418 | 419 | /*! 420 | @brief 取消选中标注数据对应的view 421 | @param annotation 标注数据 422 | @param animated 是否有动画效果 423 | */ 424 | - (void)deselectAnnotation:(id )annotation animated:(BOOL)animated; 425 | 426 | /*! 427 | @brief 处于选中状态的标注数据数据(其count == 0 或 1) 428 | */ 429 | @property (nonatomic, copy) NSArray *selectedAnnotations; 430 | 431 | /*! 432 | @brief annotation 可见区域 433 | */ 434 | @property (nonatomic, readonly) CGRect annotationVisibleRect; 435 | 436 | /*! 437 | @brief 设置地图使其可以显示数组中所有的annotation。 438 | */ 439 | - (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated; 440 | 441 | @end 442 | 443 | /*! 444 | @brief 地图view关于overlay类别 445 | */ 446 | @interface MAMapView (OverlaysAPI) 447 | 448 | /*! 449 | @brief 向地图窗口添加Overlay,需要实现MAMapViewDelegate的-mapView:viewForOverlay:函数来生成标注对应的View 450 | @param overlay 要添加的overlay 451 | */ 452 | - (void)addOverlay:(id )overlay; 453 | 454 | /*! 455 | @brief 向地图窗口添加一组Overlay,需要实现BMKMapViewDelegate的-mapView:viewForOverlay:函数来生成标注对应的View 456 | @param overlays 要添加的overlay数组 457 | */ 458 | - (void)addOverlays:(NSArray *)overlays; 459 | 460 | /*! 461 | @brief 移除Overlay 462 | @param overlay 要移除的overlay 463 | */ 464 | - (void)removeOverlay:(id )overlay; 465 | 466 | /*! 467 | @brief 移除一组Overlay 468 | @param overlays 要移除的overlay数组 469 | */ 470 | - (void)removeOverlays:(NSArray *)overlays; 471 | 472 | /*! 473 | @brief 在指定的索引处添加一个Overlay 474 | @param overlay 要添加的overlay 475 | @param index 指定的索引 476 | */ 477 | - (void)insertOverlay:(id )overlay atIndex:(NSUInteger)index; 478 | 479 | /*! 480 | @brief 在交换指定索引处的Overlay 481 | @param index1 索引1 482 | @param index2 索引2 483 | */ 484 | - (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2; 485 | 486 | /*! 487 | @brief 在指定的Overlay之上插入一个overlay 488 | @param overlay 带添加的Overlay 489 | @param sibling 用于指定相对位置的Overlay 490 | */ 491 | - (void)insertOverlay:(id )overlay aboveOverlay:(id )sibling; 492 | 493 | /*! 494 | @brief 在指定的Overlay之下插入一个overlay 495 | @param overlay 带添加的Overlay 496 | @param sibling 用于指定相对位置的Overlay 497 | */ 498 | - (void)insertOverlay:(id )overlay belowOverlay:(id )sibling; 499 | 500 | /*! 501 | @brief Overlay数组 502 | */ 503 | @property (nonatomic, readonly) NSArray *overlays; 504 | 505 | /*! 506 | @brief 查找指定overlay对应的View,如果该View尚未创建,返回nil 507 | @param overlay 指定的overlay 508 | @return 指定overlay对应的View 509 | */ 510 | - (MAOverlayView *)viewForOverlay:(id )overlay; 511 | 512 | @end 513 | 514 | /*! 515 | @brief 地图view关于截图的类别 516 | */ 517 | @interface MAMapView (Snapshot) 518 | 519 | /*! 520 | @brief 在指定区域内截图(默认会包含该区域内的annotationView) 521 | @param rect 指定的区域 522 | @return 截图image 523 | */ 524 | - (UIImage *)takeSnapshotInRect:(CGRect)rect; 525 | 526 | @end 527 | 528 | /*! 529 | @brief 地图view关于离线下载的类别 530 | */ 531 | @interface MAMapView (Offline) 532 | 533 | /*! 534 | @brief 将离线地图解压到 Documents/3dvmap/ 目录下后,调用此函数使离线数据生效, 535 | 对应的回调分别是 offlineDataWillReload:(MAMapView *)mapView, offlineDataDidReload:(MAMapView *)mapView. 536 | */ 537 | - (void)reloadMap; 538 | 539 | @end 540 | 541 | @interface MAMapView (OpenGLES) 542 | 543 | /*! 544 | @brief 停止/开启 OpenGLES 指令绘制操作 545 | 对应的回调是 - (void)mapView:(MAMapView *)mapView didChangeOpenGLESDisabled:(BOOL)openGLESDisabled 546 | */ 547 | @property (nonatomic) BOOL openGLESDisabled; 548 | 549 | @end 550 | 551 | /*! 552 | @brief 定位相关参数的类别 553 | */ 554 | @interface MAMapView (LocationOption) 555 | 556 | /*! 557 | @brief 设定定位的最小更新距离。默认为kCLDistanceFilterNone,会提示任何移动。 558 | */ 559 | @property(nonatomic) CLLocationDistance distanceFilter; 560 | 561 | /*! 562 | @brief 设定定位精度。默认为kCLLocationAccuracyBest。 563 | */ 564 | @property(nonatomic) CLLocationAccuracy desiredAccuracy; 565 | 566 | /*! 567 | @brief 设定最小更新角度。默认为1度,设定为kCLHeadingFilterNone会提示任何角度改变。 568 | */ 569 | @property(nonatomic) CLLocationDegrees headingFilter; 570 | 571 | @end 572 | 573 | /*! 574 | @brief 地图view的delegate 575 | */ 576 | @protocol MAMapViewDelegate 577 | @optional 578 | 579 | /*! 580 | @brief 地图区域即将改变时会调用此接口 581 | @param mapview 地图View 582 | @param animated 是否动画 583 | */ 584 | - (void)mapView:(MAMapView *)mapView regionWillChangeAnimated:(BOOL)animated; 585 | 586 | /*! 587 | @brief 地图区域改变完成后会调用此接口 588 | @param mapview 地图View 589 | @param animated 是否动画 590 | */ 591 | - (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated; 592 | 593 | /*! 594 | @brief 地图开始加载 595 | @param mapview 地图View 596 | */ 597 | - (void)mapViewWillStartLoadingMap:(MAMapView *)mapView; 598 | 599 | /*! 600 | @brief 地图加载成功 601 | @param mapView 地图View 602 | @param dataSize 数据大小 603 | */ 604 | - (void)mapViewDidFinishLoadingMap:(MAMapView *)mapView dataSize:(NSInteger)dataSize; 605 | 606 | /*! 607 | @brief 地图加载失败 608 | @param mapView 地图View 609 | @param error 错误信息 610 | */ 611 | - (void)mapViewDidFailLoadingMap:(MAMapView *)mapView withError:(NSError *)error; 612 | 613 | /*! 614 | @brief 根据anntation生成对应的View 615 | @param mapView 地图View 616 | @param annotation 指定的标注 617 | @return 生成的标注View 618 | */ 619 | - (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id )annotation; 620 | 621 | /*! 622 | @brief 当mapView新添加annotation views时,调用此接口 623 | @param mapView 地图View 624 | @param views 新添加的annotation views 625 | */ 626 | - (void)mapView:(MAMapView *)mapView didAddAnnotationViews:(NSArray *)views; 627 | 628 | /*! 629 | @brief 当选中一个annotation views时,调用此接口 630 | @param mapView 地图View 631 | @param views 选中的annotation views 632 | */ 633 | - (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view; 634 | 635 | /*! 636 | @brief 当取消选中一个annotation views时,调用此接口 637 | @param mapView 地图View 638 | @param views 取消选中的annotation views 639 | */ 640 | - (void)mapView:(MAMapView *)mapView didDeselectAnnotationView:(MAAnnotationView *)view; 641 | 642 | /*! 643 | @brief 在地图View将要启动定位时,会调用此函数 644 | @param mapView 地图View 645 | */ 646 | - (void)mapViewWillStartLocatingUser:(MAMapView *)mapView; 647 | 648 | /*! 649 | @brief 在地图View停止定位后,会调用此函数 650 | @param mapView 地图View 651 | */ 652 | - (void)mapViewDidStopLocatingUser:(MAMapView *)mapView; 653 | 654 | /*! 655 | @brief 位置或者设备方向更新后,会调用此函数, 这个回调已废弃由 -(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation 来替代 656 | @param mapView 地图View 657 | @param userLocation 用户定位信息(包括位置与设备方向等数据) 658 | */ 659 | - (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation __attribute__ ((deprecated("use -(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation instead"))); 660 | 661 | /*! 662 | @brief 位置或者设备方向更新后,会调用此函数 663 | @param mapView 地图View 664 | @param userLocation 用户定位信息(包括位置与设备方向等数据) 665 | @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新 666 | */ 667 | - (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation; 668 | 669 | /*! 670 | @brief 定位失败后,会调用此函数 671 | @param mapView 地图View 672 | @param error 错误号,参考CLError.h中定义的错误号 673 | */ 674 | - (void)mapView:(MAMapView *)mapView didFailToLocateUserWithError:(NSError *)error; 675 | 676 | /*! 677 | @brief 拖动annotation view时view的状态变化,ios3.2以后支持 678 | @param mapView 地图View 679 | @param view annotation view 680 | @param newState 新状态 681 | @param oldState 旧状态 682 | */ 683 | - (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view didChangeDragState:(MAAnnotationViewDragState)newState 684 | fromOldState:(MAAnnotationViewDragState)oldState; 685 | 686 | /*! 687 | @brief 根据overlay生成对应的View 688 | @param mapView 地图View 689 | @param overlay 指定的overlay 690 | @return 生成的覆盖物View 691 | */ 692 | - (MAOverlayView *)mapView:(MAMapView *)mapView viewForOverlay:(id )overlay; 693 | 694 | /*! 695 | @brief 当mapView新添加overlay views时,调用此接口 696 | @param mapView 地图View 697 | @param overlayViews 新添加的overlay views 698 | */ 699 | - (void)mapView:(MAMapView *)mapView didAddOverlayViews:(NSArray *)overlayViews; 700 | 701 | /*! 702 | @brief 标注view的accessory view(必须继承自UIControl)被点击时,触发该回调 703 | @param mapView 地图View 704 | @param annotationView callout所属的标注view 705 | @param control 对应的control 706 | */ 707 | - (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control; 708 | 709 | /*! 710 | @brief 当userTrackingMode改变时,调用此接口 711 | @param mapView 地图View 712 | @param mode 改变后的mode 713 | @param animated 动画 714 | */ 715 | - (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated; 716 | 717 | /*! 718 | @brief 离线地图数据将要被加载, 调用reloadMap会触发该回调,离线数据生效前的回调. 719 | @param mapview 地图View 720 | */ 721 | - (void)offlineDataWillReload:(MAMapView *)mapView; 722 | 723 | /*! 724 | @brief 离线地图数据加载完成, 调用reloadMap会触发该回调,离线数据生效后的回调. 725 | @param mapview 地图View 726 | */ 727 | - (void)offlineDataDidReload:(MAMapView *)mapView; 728 | 729 | /*! 730 | @brief 当openGLESDisabled变量改变时,调用此接口 731 | @param mapView 地图View 732 | @param mode 改变后的openGLESDisabled 733 | */ 734 | - (void)mapView:(MAMapView *)mapView didChangeOpenGLESDisabled:(BOOL)openGLESDisabled; 735 | 736 | /*! 737 | @brief 当touchPOIEnabled == YES时,单击地图使用该回调获取POI信息 738 | @param mapView 地图View 739 | @param pois 获取到的poi数组(由MATouchPoi组成) 740 | */ 741 | - (void)mapView:(MAMapView *)mapView didTouchPois:(NSArray *)pois; 742 | 743 | @end 744 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAMultiPoint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAMultiPoint.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MAShape.h" 11 | #import "MAGeometry.h" 12 | 13 | /*! 14 | @brief 该类是个由多个点组成的虚基类, 不能直接实例化对象, 要使用其子类MAPolyline,MAPolygon来实例化 15 | */ 16 | @interface MAMultiPoint : MAShape { 17 | @package 18 | MAMapPoint *_points; 19 | NSUInteger _pointCount; 20 | MAMapRect _boundingRect; 21 | } 22 | 23 | /*! 24 | @brief 坐标点数组 25 | */ 26 | @property (nonatomic, readonly) MAMapPoint *points; 27 | 28 | /*! 29 | @brief 坐标点的个数 30 | */ 31 | @property (nonatomic, readonly) NSUInteger pointCount; 32 | 33 | /*! 34 | @brief 将内部的坐标点数据转化为经纬度坐标并拷贝到coords内存中 35 | @param coords 调用者提供的内存空间, 该空间长度必须大于等于要拷贝的坐标点的个数(range.length) 36 | @param range 要拷贝的数据范围 37 | */ 38 | - (void)getCoordinates:(CLLocationCoordinate2D *)coords range:(NSRange)range; 39 | 40 | @end -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOfflineCity.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOfflineCity.h 3 | // 4 | // Copyright (c) 2013年 AutoNavi. All rights reserved. 5 | // 6 | 7 | #import 8 | #import "MAOfflineItem.h" 9 | 10 | typedef enum{ 11 | MAOfflineCityStatusNone __attribute__((deprecated("use MAOfflineItemStatusNone instead"))) = MAOfflineItemStatusNone, /* 不存在. */ 12 | MAOfflineCityStatusCached __attribute__((deprecated("use MAOfflineItemStatusCached instead"))) = MAOfflineItemStatusCached, /* 缓存状态. */ 13 | MAOfflineCityStatusInstalled __attribute__((deprecated("use MAOfflineItemStatusInstalled instead"))) = MAOfflineItemStatusInstalled, /* 已安装. */ 14 | MAOfflineCityStatusExpired __attribute__((deprecated("use MAOfflineItemStatusExpired instead"))) = MAOfflineItemStatusExpired /* 已过期. */ 15 | }MAOfflineCityStatus; 16 | 17 | @interface MAOfflineCity : MAOfflineItem 18 | 19 | /*! 20 | @brief 城市编码 21 | */ 22 | @property (nonatomic, copy, readonly) NSString *cityCode; 23 | 24 | /*! 25 | @brief 城市名称 26 | */ 27 | @property (nonatomic, copy, readonly) NSString *cityName __attribute__ ((deprecated("use name instead"))); 28 | 29 | /*! 30 | @brief 下载地址 31 | */ 32 | @property (nonatomic, copy, readonly) NSString *urlString __attribute__ ((deprecated("Not supported in future version"))); 33 | 34 | /*! 35 | @brief 离线数据状态 36 | */ 37 | @property (nonatomic, assign, readonly) MAOfflineCityStatus status __attribute__ ((deprecated("use itemStatus instead"))); 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOfflineItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOfflineItem.h 3 | // MapKit_static 4 | // 5 | // Created by songjian on 14-4-23. 6 | // Copyright (c) 2014年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef enum{ 12 | MAOfflineItemStatusNone = 0, /* 不存在. */ 13 | MAOfflineItemStatusCached, /* 缓存状态. */ 14 | MAOfflineItemStatusInstalled, /* 已安装. */ 15 | MAOfflineItemStatusExpired /* 已过期. */ 16 | }MAOfflineItemStatus; 17 | 18 | @interface MAOfflineItem : NSObject 19 | 20 | /* 名字. */ 21 | @property (nonatomic, copy, readonly) NSString *name; 22 | 23 | /* 简拼. */ 24 | @property (nonatomic, copy, readonly) NSString *jianpin; 25 | 26 | /* 拼音. */ 27 | @property (nonatomic, copy, readonly) NSString *pinyin; 28 | 29 | /* 区域编码. */ 30 | @property (nonatomic, copy, readonly) NSString *adcode; 31 | 32 | /* 离线数据大小. */ 33 | @property (nonatomic, assign, readonly) long long size; 34 | 35 | /* 状态. */ 36 | @property (nonatomic, assign, readonly) MAOfflineItemStatus itemStatus; 37 | 38 | /* 已下载大小(当itemStatus == MAOfflineItemStatusCached 时有效). */ 39 | @property (nonatomic, assign, readonly) long long downloadedSize; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOfflineItemCommonCity.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOfflineItemCommonCity.h 3 | // MapKit_static 4 | // 5 | // Created by songjian on 14-4-23. 6 | // Copyright (c) 2014年 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAOfflineCity.h" 10 | 11 | /* 普通城市. */ 12 | @interface MAOfflineItemCommonCity : MAOfflineCity 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOfflineItemMunicipality.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOfflineItemMunicipality.h 3 | // MapKit_static 4 | // 5 | // Created by songjian on 14-4-23. 6 | // Copyright (c) 2014年 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAOfflineCity.h" 10 | 11 | /* 直辖市. */ 12 | @interface MAOfflineItemMunicipality : MAOfflineCity 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOfflineItemNationWide.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOfflineItemNationWide.h 3 | // MapKit_static 4 | // 5 | // Created by songjian on 14-4-23. 6 | // Copyright (c) 2014年 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAOfflineCity.h" 10 | 11 | /* 全国概要. */ 12 | @interface MAOfflineItemNationWide : MAOfflineCity 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOfflineMap.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOfflineMap.h 3 | // 4 | // Copyright (c) 2013年 AutoNavi. All rights reserved. 5 | // 6 | 7 | #import 8 | #import "MAOfflineProvince.h" 9 | #import "MAOfflineItemNationWide.h" 10 | #import "MAOfflineItemMunicipality.h" 11 | 12 | typedef enum{ 13 | MAOfflineMapDownloadStatusWaiting, /* 以插入队列,等待中. */ 14 | MAOfflineMapDownloadStatusStart, /* 开始下载. */ 15 | MAOfflineMapDownloadStatusProgress, /* 下载过程中. */ 16 | MAOfflineMapDownloadStatusCompleted, /* 下载成功. */ 17 | MAOfflineMapDownloadStatusCancelled, /* 取消. */ 18 | MAOfflineMapDownloadStatusUnzip, /* 解压缩. */ 19 | MAOfflineMapDownloadStatusFinished, /* 全部顺利完成. */ 20 | MAOfflineMapDownloadStatusError /* 发生错误. */ 21 | }MAOfflineMapDownloadStatus; 22 | 23 | /* 离线下载错误domain. */ 24 | extern NSString * const MAOfflineMapErrorDomain; 25 | 26 | enum{ 27 | /* 未知的错误. */ 28 | MAOfflineMapErrorUnknown = -1, 29 | 30 | /* 写入临时目录失败. */ 31 | MAOfflineMapErrorCannotWriteToTmp = -2, 32 | 33 | /* 打开归档文件失败. */ 34 | MAOfflineMapErrorCannotOpenZipFile = -3, 35 | 36 | /* 解归档文件失败. */ 37 | MAOfflineMapErrorCannotExpand = -4 38 | }; 39 | 40 | /* 当downloadStatus == MAOfflineMapDownloadStatusProgress 时, info参数是个NSDictionary, 41 | 如下两个key用来获取已下载和总和的数据大小(单位byte), 对应的是NSNumber(long long) 类型. */ 42 | extern NSString * const MAOfflineMapDownloadReceivedSizeKey; 43 | extern NSString * const MAOfflineMapDownloadExpectedSizeKey; 44 | 45 | typedef void(^MAOfflineMapDownloadBlock)(MAOfflineMapDownloadStatus downloadStatus, id info); 46 | typedef void(^MAOfflineMapNewestVersionBlock)(BOOL hasNewestVersion); 47 | 48 | @interface MAOfflineMap : NSObject 49 | 50 | /*! 51 | @brief 获取MAOfflineMap 单例 52 | @return MAOfflineMap 53 | */ 54 | + (MAOfflineMap *)sharedOfflineMap; 55 | 56 | /*! 57 | @brief 省份数组(每个元素均是MAOfflineProvince类型) 58 | */ 59 | @property (nonatomic, readonly) NSArray *provinces; 60 | 61 | /*! 62 | @brief 直辖市数组(每个元素均是MAOfflineItemMunicipality类型) 63 | */ 64 | @property (nonatomic, readonly) NSArray *municipalities; 65 | 66 | /*! 67 | @brief 全国概要图 68 | */ 69 | @property (nonatomic, readonly) MAOfflineItemNationWide *nationWide; 70 | 71 | /*! 72 | @brief 城市数组, 包括普通城市与直辖市. 73 | */ 74 | @property (nonatomic, readonly) NSArray *cities; 75 | 76 | /*! 77 | @brief 离线数据的版本号(由年月日组成, 如@"20130715") 78 | */ 79 | @property (nonatomic, readonly) NSString *version; 80 | 81 | /*! 82 | @brief 启动下载 83 | @param item 数据 84 | @prarm shouldContinueWhenAppEntersBackground 进入后台是否允许继续下载 85 | @param downloadBlock 下载过程block 86 | */ 87 | - (void)downloadItem:(MAOfflineItem *)item shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock; 88 | 89 | /*! 90 | @brief 监测是否正在下载 91 | @param item 条目 92 | @return 是否在下载 93 | */ 94 | - (BOOL)isDownloadingForItem:(MAOfflineItem *)item; 95 | 96 | /*! 97 | @brief 暂停下载 98 | @param item 条目 99 | */ 100 | - (void)pauseItem:(MAOfflineItem *)item; 101 | 102 | /*! 103 | @brief 取消全部下载 104 | */ 105 | - (void)cancelAll; 106 | 107 | /*! 108 | @brief 清除所有在磁盘上的离线地图数据, 之后调用[mapView reloadMap]会使其立即生效. 109 | */ 110 | - (void)clearDisk; 111 | 112 | /*! 113 | @brief 监测新版本 114 | @param newestVersionBlock 回调block 115 | */ 116 | - (void)checkNewestVersion:(MAOfflineMapNewestVersionBlock)newestVersionBlock; 117 | 118 | @end 119 | 120 | @interface MAOfflineMap (Deprecated) 121 | 122 | /*! 123 | @brief 城市数组(每个元素均是MAOfflineCity类型) 124 | */ 125 | @property (nonatomic, readonly) NSArray *offlineCities __attribute__ ((deprecated("use cities instead"))); 126 | 127 | /*! 128 | @brief 启动下载 (进入后台就停止下载) 129 | @param city 城市数据 130 | @param downloadBlock 下载过程block 131 | */ 132 | - (void)downloadCity:(MAOfflineCity *)city downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock __attribute__ ((deprecated("use - (void)downloadItem:(MAOfflineItem *)item shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock instead"))); 133 | 134 | /*! 135 | @brief 启动下载 136 | @param city 城市数据 137 | @prarm shouldContinueWhenAppEntersBackground 进入后台是否允许继续下载 138 | @param downloadBlock 下载过程block 139 | */ 140 | - (void)downloadCity:(MAOfflineCity *)city shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock __attribute__ ((deprecated("use - (void)downloadItem:(MAOfflineItem *)item shouldContinueWhenAppEntersBackground:(BOOL)shouldContinueWhenAppEntersBackground downloadBlock:(MAOfflineMapDownloadBlock)downloadBlock instead"))); 141 | 142 | /*! 143 | @brief 监测是否正在下载 144 | @param city 城市数据 145 | @return 是否在下载 146 | */ 147 | - (BOOL)isDownloadingForCity:(MAOfflineCity *)city __attribute__ ((deprecated("use - (BOOL)isDownloadingForItem:(MAOfflineItem *)item instead"))); 148 | 149 | /*! 150 | @brief 暂停下载 151 | @param city 城市数据 152 | */ 153 | - (void)pause:(MAOfflineCity *)city __attribute__ ((deprecated("use - (void)pauseItem:(MAOfflineItem *)item instead"))); 154 | 155 | @end 156 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOfflineProvince.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOfflineProvince.h 3 | // MapKit_static 4 | // 5 | // Created by songjian on 14-4-24. 6 | // Copyright (c) 2014年 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAOfflineItem.h" 10 | #import "MAOfflineItemCommonCity.h" 11 | 12 | @interface MAOfflineProvince : MAOfflineItem 13 | 14 | /* 包含的城市数组(都是MAOfflineItemCommonCity类型). */ 15 | @property (nonatomic, strong, readonly) NSArray *cities; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOverlay.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOverlay.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import "MAAnnotation.h" 10 | #import "MATypes.h" 11 | #import "MAGeometry.h" 12 | 13 | /*! 14 | @brief 该类是地图覆盖物的基类,所有地图的覆盖物需要继承自此类 15 | */ 16 | @protocol MAOverlay 17 | @required 18 | 19 | /*! 20 | @brief 返回区域中心坐标. 21 | */ 22 | @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 23 | 24 | /*! 25 | @brief 区域外接矩形 26 | */ 27 | @property (nonatomic, readonly) MAMapRect boundingMapRect; 28 | 29 | @end -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOverlayPathView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOverlayPathView.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MAOverlayView.h" 11 | 12 | /*! 13 | @brief 该类提供使用CGPathRef来绘制overlay,默认的操作是将fill attributes, stroke attributes设置到CAShapeLayer中, 可以使用该类的子类MACircleView, MAPolylineView, MAPolygonView或者继承该类, 如果继承该类,需要重载-(void)createPath方法 14 | */ 15 | @interface MAOverlayPathView : MAOverlayView 16 | 17 | /*! 18 | @brief 填充颜色,默认是[UIColor colorWithRed:0 green:1 blue:0 alpha:0.6] 19 | */ 20 | @property (retain) UIColor *fillColor; 21 | 22 | /*! 23 | @brief 笔触颜色,默认是[UIColor colorWithRed:1 green:0 blue:0 alpha:0.6] 24 | */ 25 | @property (retain) UIColor *strokeColor; 26 | 27 | /*! 28 | @brief 笔触宽度,默认是0 29 | */ 30 | @property CGFloat lineWidth; 31 | 32 | /*! 33 | @brief LineJoin,默认是kCGLineJoinRound 34 | */ 35 | @property CGLineJoin lineJoin; 36 | 37 | /*! 38 | @brief LineCap,默认是kCGLineCapRound 39 | */ 40 | @property CGLineCap lineCap; 41 | 42 | /*! 43 | @brief MiterLimit,默认是10.f 44 | */ 45 | @property CGFloat miterLimit; 46 | 47 | /*! 48 | @brief 是否绘制成虚线, 默认是NO 49 | */ 50 | @property BOOL lineDash; 51 | 52 | /*! 53 | @brief LineDashPhase,默认是0.f 54 | */ 55 | @property CGFloat lineDashPhase; 56 | 57 | /*! 58 | @brief LineDashPattern,默认是nil 59 | */ 60 | @property (copy) NSArray *lineDashPattern; 61 | 62 | /*! 63 | @brief 子类需要重载该方法并设置(self.path = newPath) 64 | */ 65 | - (void)createPath; 66 | 67 | /*! 68 | @brief 当前的path 69 | */ 70 | @property CGPathRef path; 71 | 72 | /*! 73 | @brief 释放当前path,调用之后 path == NULL 74 | */ 75 | - (void)invalidatePath; 76 | 77 | /*! 78 | @brief 将当前的stroke attributes设置到指定的context 79 | @param context 目标context 80 | @param zoomScale 当前缩放比例值 81 | */ 82 | - (void)applyStrokePropertiesToContext:(CGContextRef)context atZoomScale:(CGFloat)zoomScale; 83 | 84 | /*! 85 | @brief 将当前的fill attributes设置到指定的context 86 | @param context 目标context 87 | @param zoomScale 当前缩放比例值 88 | */ 89 | - (void)applyFillPropertiesToContext:(CGContextRef)context atZoomScale:(CGFloat)zoomScale; 90 | 91 | /*! 92 | @brief 绘制path 93 | @param path 要绘制的path 94 | @param context 目标context 95 | */ 96 | - (void)strokePath:(CGPathRef)path inContext:(CGContextRef)context; 97 | 98 | /*! 99 | @brief 填充path 100 | @param path 要绘制的path 101 | @param context 目标context 102 | */ 103 | - (void)fillPath:(CGPathRef)path inContext:(CGContextRef)context; 104 | 105 | @end 106 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAOverlayView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAOverlayView.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | #import 9 | #import "MAGeometry.h" 10 | #import "MAOverlay.h" 11 | 12 | /*! 13 | @brief 该类是地图覆盖物View的基类, 提供绘制overlay的接口但并无实际的实现 14 | */ 15 | @interface MAOverlayView : UIView 16 | 17 | /*! 18 | @brief 初始化并返回一个overlay view 19 | @param overlay 关联的overlay对象 20 | @return 初始化成功则返回overlay view,否则返回nil 21 | */ 22 | - (id)initWithOverlay:(id )overlay; 23 | 24 | /*! 25 | @brief 关联的overlay对象 26 | */ 27 | @property (nonatomic, readonly, retain) id overlay; 28 | 29 | /*! 30 | @brief 将MAMapPoint转化为相对于receiver的本地坐标 31 | @param mapPoint 要转化的MAMapPoint 32 | @return 相对于receiver的本地坐标 33 | */ 34 | - (CGPoint)pointForMapPoint:(MAMapPoint)mapPoint; 35 | 36 | /*! 37 | @brief 将相对于receiver的本地坐标转化为MAMapPoint 38 | @param point 要转化的相对于receiver的本地坐标 39 | @return MAMapPoint 40 | */ 41 | - (MAMapPoint)mapPointForPoint:(CGPoint)point; 42 | 43 | /*! 44 | @brief 将MAMapRect转化为相对于receiver的本地rect 45 | @param mapRect 要转化的MAMapRect 46 | @return 相对于receiver的本地rect 47 | */ 48 | - (CGRect)rectForMapRect:(MAMapRect)mapRect; 49 | 50 | /*! 51 | @brief 将相对于receiver的本地rect转化为MAMapRect 52 | @param rect 要转化的相对于receiver的本地rect 53 | @return MAMapRect 54 | */ 55 | - (MAMapRect)mapRectForRect:(CGRect)rect; 56 | 57 | /*! 58 | @brief 绘制overlay view的内容 59 | @param mapRect 该MAMapRect范围内需要更新 60 | @param zoomScale 当前的缩放比例值 61 | @param context 绘制操作的graphics context 62 | */ 63 | - (void)drawMapRect:(MAMapRect)mapRect 64 | zoomScale:(CGFloat)zoomScale 65 | inContext:(CGContextRef)context; 66 | 67 | /*! 68 | @brief 缓存的OpenGLES坐标 69 | */ 70 | @property (nonatomic) CGPoint *glPoints; 71 | 72 | /*! 73 | @brief 缓存的OpenGLES坐标 个数 74 | */ 75 | @property (nonatomic) NSUInteger glPointCount; 76 | 77 | /*! 78 | @brief 将MAMapPoint转换为opengles可以直接使用的坐标 79 | @param mapPoint MAMapPoint坐标 80 | @return opengles 直接支持的坐标 81 | */ 82 | - (CGPoint)glPointForMapPoint:(MAMapPoint)mapPoint; 83 | 84 | /*! 85 | @brief 批量将MAMapPoint转换为opengles可以直接使用的坐标 86 | @param mapPoint MAMapPoint坐标数据指针 87 | @param count 个数 88 | @return opengles 直接支持的坐标数据指针(需要调用者手动释放) 89 | */ 90 | - (CGPoint *)glPointsForMapPoints:(MAMapPoint *)mapPoints count:(NSUInteger)count; 91 | 92 | /*! 93 | @brief 将屏幕尺寸转换为OpenGLES尺寸 94 | @param windowWidth 屏幕尺寸 95 | @return OpenGLES尺寸 96 | */ 97 | - (CGFloat)glWidthForWindowWidth:(CGFloat)windowWidth; 98 | 99 | /*! 100 | @brief OpenGLES坐标系发生改变, 重新计算缓存的OpenGLES坐标 101 | */ 102 | - (void)referenceDidChange; 103 | 104 | /*! 105 | @brief 使用OpenGLES 绘制线 106 | @param points OpenGLES坐标系点指针, 参考- (CGPoint)glPointForMapPoint:(MAMapPoint)mapPoint, - (CGPoint *)glPointsForMapPoints:(MAMapPoint *)mapPoints count:(NSUInteger)count 107 | @param pointCount 点个数 108 | @param strokeColor 线颜色 109 | @param lineWidth OpenGLES支持线宽尺寸, 参考 - (CGFloat)glWidthForWindowWidth:(CGFloat)windowWidth 110 | @param looped 是否闭合, 如polyline会设置NO, polygon会设置YES. 111 | */ 112 | - (void)renderLinesWithPoints:(CGPoint *)points pointCount:(NSUInteger)pointCount strokeColor:(UIColor *)strokeColor lineWidth:(CGFloat)lineWidth looped:(BOOL)looped; 113 | 114 | /*! 115 | @brief 使用OpenGLES 绘制线 116 | @param points OpenGLES坐标系点指针, 参考- (CGPoint)glPointForMapPoint:(MAMapPoint)mapPoint, - (CGPoint *)glPointsForMapPoints:(MAMapPoint *)mapPoints count:(NSUInteger)count 117 | @param pointCount 点个数 118 | @param strokeColor 线颜色 119 | @param lineWidth OpenGLES支持线宽尺寸, 参考 - (CGFloat)glWidthForWindowWidth:(CGFloat)windowWidth 120 | @param looped 是否闭合, 如polyline会设置NO, polygon会设置YES. 121 | @param lineDash 是否是虚线. 122 | */ 123 | - (void)renderLinesWithPoints:(CGPoint *)points pointCount:(NSUInteger)pointCount strokeColor:(UIColor *)strokeColor lineWidth:(CGFloat)lineWidth looped:(BOOL)looped lineDash:(BOOL)lineDash; 124 | 125 | /*! 126 | @brief 使用OpenGLES 绘制区域 127 | @param points OpenGLES坐标系点指针, 参考- (CGPoint)glPointForMapPoint:(MAMapPoint)mapPoint, - (CGPoint *)glPointsForMapPoints:(MAMapPoint *)mapPoints count:(NSUInteger)count 128 | @param pointCount 点个数 129 | @param strokeColor 填充颜色 130 | @param usingTriangleFan YES对应GL_TRIANGLE_FAN, NO对应GL_TRIANGLES 131 | */ 132 | - (void)renderRegionWithPoints:(CGPoint *)points pointCount:(NSUInteger)pointCount fillColor:(UIColor *)fillColor usingTriangleFan:(BOOL)usingTriangleFan; 133 | 134 | 135 | /*! 136 | @brief 使用OpenGLES 绘制图片 137 | @param textureID OpenGLES纹理ID 138 | @param points OpenGLES坐标系点指针,纹理矩形的四个顶点坐标,其第一个坐标为图片左上角,依次顺时针传入其他顶点 ,参考- (CGPoint)glPointForMapPoint:(MAMapPoint)mapPoint, - (CGPoint *)glPointsForMapPoints:(MAMapPoint *)mapPoints count:(NSUInteger)count , 139 | */ 140 | - (void)renderIconWithTextureID:(GLuint)textureID points:(CGPoint *)points; 141 | 142 | /*! 143 | @brief 使用OpenGLES 绘制图片 144 | @param textureID OpenGLES纹理ID 145 | @param points OpenGLES坐标系点指针,纹理矩形的四个顶点坐标,其第一个坐标为图片左上角,依次顺时针传入其他顶点 ,参考- (CGPoint)glPointForMapPoint:(MAMapPoint)mapPoint, - (CGPoint *)glPointsForMapPoints:(MAMapPoint *)mapPoints count:(NSUInteger)count , 146 | @param modulateColor 调节颜色值, 最终颜色 = 纹理色 * modulateColor. 如只需要调节alpha的话就设置为[red=1, green=1, blue=1, alpha=0.5]. 147 | */ 148 | - (void)renderIconWithTextureID:(GLuint)textureID points:(CGPoint *)points modulateColor:(UIColor *)modulateColor; 149 | 150 | 151 | /*! 152 | @brief 绘制函数(子类需要重载来实现) 153 | */ 154 | - (void)glRender; 155 | 156 | @end 157 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAPinAnnotationView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAPinAnnotationView.h 3 | // MAMapKitDemo 4 | // 5 | // Created by songjian on 13-1-7. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAMapKit.h" 10 | 11 | enum { 12 | MAPinAnnotationColorRed = 0, 13 | MAPinAnnotationColorGreen, 14 | MAPinAnnotationColorPurple 15 | }; 16 | typedef NSUInteger MAPinAnnotationColor; 17 | 18 | /*! 19 | @brief 提供类似大头针效果的annotation view 20 | */ 21 | @interface MAPinAnnotationView : MAAnnotationView 22 | 23 | /*! 24 | @brief 大头针的颜色,有MAPinAnnotationColorRed, MAPinAnnotationColorGreen, MAPinAnnotationColorPurple三种 25 | */ 26 | @property (nonatomic) MAPinAnnotationColor pinColor; 27 | 28 | /*! 29 | @brief 动画效果 30 | */ 31 | @property (nonatomic) BOOL animatesDrop; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAPointAnnotation.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAPointAnnotation.h 3 | // MAMapKitDemo 4 | // 5 | // Created by songjian on 13-1-7. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAShape.h" 10 | #import 11 | 12 | /*! 13 | @brief 点标注数据 14 | */ 15 | @interface MAPointAnnotation : MAShape 16 | 17 | /*! 18 | @brief 经纬度 19 | */ 20 | @property (nonatomic, assign) CLLocationCoordinate2D coordinate; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAPolygon.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAPolygon.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MAMultiPoint.h" 11 | #import "MAOverlay.h" 12 | 13 | /*! 14 | @brief 此类用于定义一个由多个点组成的闭合多边形, 点与点之间按顺序尾部相连, 第一个点与最后一个点相连, 通常MAPolygon是MAPolygonView的model 15 | */ 16 | @interface MAPolygon : MAMultiPoint 17 | 18 | /*! 19 | @brief 根据经纬度坐标数据生成闭合多边形 20 | @param coords 经纬度坐标点数据,coords对应的内存会拷贝,调用者负责该内存的释放 21 | @param count 经纬度坐标点数组个数 22 | @return 新生成的多边形 23 | */ 24 | + (MAPolygon *)polygonWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; 25 | 26 | /*! 27 | @brief 根据map point数据生成多边形 28 | @param points map point数据,points对应的内存会拷贝,调用者负责该内存的释放 29 | @param count 点的个数 30 | @return 新生成的多边形 31 | */ 32 | + (MAPolygon *)polygonWithPoints:(MAMapPoint *)points count:(NSUInteger)count; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAPolygonView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAPolygonView.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "MAPolygon.h" 12 | #import "MAOverlayPathView.h" 13 | 14 | /*! 15 | @brief 此类是MAPolygon的显示多边形view,可以通过MAOverlayPathView修改其fill和stroke attributes 16 | */ 17 | @interface MAPolygonView : MAOverlayPathView 18 | 19 | /*! 20 | @brief 根据指定的多边形生成一个多边形View 21 | @param polygon 指定的多边形数据对象 22 | @return 新生成的多边形View 23 | */ 24 | - (id)initWithPolygon:(MAPolygon *)polygon; 25 | 26 | /*! 27 | @brief 关联的MAPolygon model 28 | */ 29 | @property (nonatomic, readonly) MAPolygon *polygon; 30 | 31 | @end -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAPolyline.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAPolyline.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import "MAMultiPoint.h" 10 | #import "MAOverlay.h" 11 | 12 | /*! 13 | @brief 此类用于定义一个由多个点相连的多段线,点与点之间尾部想连但第一点与最后一个点不相连, 通常MAPolyline是MAPolylineView的model 14 | */ 15 | @interface MAPolyline : MAMultiPoint 16 | 17 | /*! 18 | @brief 根据map point数据生成多段线 19 | @param points map point数据,points对应的内存会拷贝,调用者负责该内存的释放 20 | @param count map point个数 21 | @return 生成的多段线 22 | */ 23 | + (MAPolyline *)polylineWithPoints:(MAMapPoint *)points count:(NSUInteger)count; 24 | 25 | /*! 26 | @brief 根据经纬度坐标数据生成多段线 27 | @param coords 经纬度坐标数据,coords对应的内存会拷贝,调用者负责该内存的释放 28 | @param count 经纬度坐标个数 29 | @return 生成的多段线 30 | */ 31 | + (MAPolyline *)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; 32 | 33 | @end -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAPolylineView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAPolylineView.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | 10 | #import 11 | 12 | #import "MAPolyline.h" 13 | #import "MAOverlayPathView.h" 14 | 15 | /*! 16 | @brief 此类是MAPolyline的显示多段线view,可以通过MAOverlayPathView修改其fill和stroke attributes 17 | */ 18 | @interface MAPolylineView : MAOverlayPathView 19 | 20 | /*! 21 | @brief 根据指定的MAPolyline生成一个多段线view 22 | @param polyline 指定MAPolyline 23 | @return 新生成的多段线View 24 | */ 25 | - (id)initWithPolyline:(MAPolyline *)polyline; 26 | 27 | /*! 28 | @brief 关联的MAPolyline model 29 | */ 30 | @property (nonatomic, readonly) MAPolyline *polyline; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAShape.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAShape.h 3 | // MAMapKit 4 | // 5 | // 6 | // Copyright (c) 2011年 Autonavi Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MAAnnotation.h" 11 | 12 | /*! 13 | @brief 该类为一个抽象类,定义了基于MAAnnotation的MAShape类的基本属性和行为,不能直接使用,必须子类化之后才能使用 14 | */ 15 | @interface MAShape : NSObject { 16 | 17 | NSString *_title; 18 | NSString *_subtitle; 19 | } 20 | 21 | /*! 22 | @brief 标题 23 | */ 24 | @property (copy) NSString *title; 25 | 26 | /*! 27 | @brief 副标题 28 | */ 29 | @property (copy) NSString *subtitle; 30 | 31 | @end -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MATileOverlay.h: -------------------------------------------------------------------------------- 1 | // 2 | // MATileOverlay.h 3 | // MapKit_static 4 | // 5 | // Created by Li Fei on 11/22/13. 6 | // Copyright (c) 2013 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAOverlay.h" 10 | 11 | /*! 12 | @brief 该类是覆盖在球面墨卡托投影上的图片tiles的数据源 13 | */ 14 | @interface MATileOverlay : NSObject 15 | 16 | /*! 17 | @brief 根据指定的URLTemplate生成tileOverlay 18 | @param URLTemplate是一个包含"{x}","{y}","{z}","{scale}"的字符串,"{x}","{y}","{z}","{scale}"会被tile path的值所替换,并生成用来加载tile图片数据的URL 。例如: http://server/path?x={x}&y={y}&z={z}&scale={scale}。 19 | @return 以指定的URLTemplate字符串生成tileOverlay 20 | */ 21 | - (id)initWithURLTemplate:(NSString *)URLTemplate; 22 | 23 | /*! 24 | @brief 默认tileSize 256x256 25 | */ 26 | @property (readonly) CGSize tileSize; 27 | 28 | /*! 29 | @brief tileOverlay的可见最小Zoom值 30 | */ 31 | @property NSInteger minimumZ; 32 | 33 | /*! 34 | @brief tileOverlay的可见最大Zoom值 35 | */ 36 | @property NSInteger maximumZ; 37 | 38 | /*! 39 | @brief 同initWithURLTemplate:中的URLTemplate 40 | */ 41 | @property (readonly) NSString *URLTemplate; 42 | 43 | /*! 44 | @brief 暂未开放 45 | */ 46 | @property (nonatomic) BOOL canReplaceMapContent; 47 | 48 | /*! 49 | @brief 区域外接矩形,可用来设定tileOverlay的可渲染区域 50 | */ 51 | @property (nonatomic) MAMapRect boundingMapRect; 52 | 53 | @end 54 | 55 | typedef struct { 56 | NSInteger x; 57 | NSInteger y; 58 | NSInteger z; 59 | CGFloat contentScaleFactor; 60 | } MATileOverlayPath; 61 | 62 | /*! 63 | @brief 子类可覆盖CustomLoading中的方法来自定义加载MKTileOverlay 64 | */ 65 | @interface MATileOverlay (CustomLoading) 66 | 67 | /*! 68 | @brief 以tile paht生成URL。用于加载tile,此方法默认填充URLTemplate 69 | @param tile path 70 | @return 以tile path生成tileOverlay 71 | */ 72 | - (NSURL *)URLForTilePath:(MATileOverlayPath)path; 73 | 74 | /*! 75 | @brief 加载被请求的tile,并以tile数据或加载tile失败error访问回调block;默认实现为首先用URLForTilePath去获取URL,然后用异步NSURLConnection加载tile 76 | @param tile path 77 | @param 用来传入tile数据或加载tile失败的error访问的回调block 78 | */ 79 | - (void)loadTileAtPath:(MATileOverlayPath)path result:(void (^)(NSData *tileData, NSError *error))result; 80 | 81 | @end 82 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MATileOverlayView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MATileOverlayView.h 3 | // MapKit_static 4 | // 5 | // Created by Li Fei on 11/25/13. 6 | // Copyright (c) 2013 songjian. All rights reserved. 7 | // 8 | 9 | #import "MAOverlayView.h" 10 | #import "MATileOverlay.h" 11 | 12 | /*! 13 | @brief 此类是将MAOverlayView中的覆盖tiles显示在地图上的view; 14 | */ 15 | @interface MATileOverlayView : MAOverlayView 16 | 17 | /*! 18 | @brief 覆盖在球面墨卡托投影上的图片tiles的数据源 19 | */ 20 | @property (nonatomic ,readonly) MATileOverlay *tileOverlay; 21 | 22 | /*! 23 | @brief 根据指定的tileOverlay生成将tiles显示在地图上的View 24 | @param tileOverlay 制定了覆盖图片,以及图片的覆盖区域的groundOverlay 25 | @return 以tileOverlay新生成View 26 | */ 27 | - (id)initWithTileOverlay:(MATileOverlay *)tileOverlay; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MATouchPoi.h: -------------------------------------------------------------------------------- 1 | // 2 | // MATouchPoi.h 3 | // MapKit_static 4 | // 5 | // Created by songjian on 13-7-17. 6 | // Copyright (c) 2013年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface MATouchPoi : NSObject 13 | 14 | /*! 15 | @brief 名称 16 | */ 17 | @property (nonatomic, copy, readonly) NSString *name; 18 | 19 | /*! 20 | @brief 经纬度坐标 21 | */ 22 | @property (nonatomic, assign, readonly) CLLocationCoordinate2D coordinate; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MATypes.h: -------------------------------------------------------------------------------- 1 | // 2 | // MATypes.h 3 | // MAMapKitDemo 4 | // 5 | // Created by songjian on 12-12-24. 6 | // Copyright (c) 2012年 songjian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | enum { 12 | MAMapTypeStandard = 0, 13 | MAMapTypeSatellite, 14 | MAMapTypeStandardNight 15 | }; 16 | typedef NSUInteger MAMapType; 17 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Headers/MAUserLocation.h: -------------------------------------------------------------------------------- 1 | // 2 | // MAUserLocation.h 3 | // MAMapKit 4 | // 5 | // Created by yin cai on 12-1-4. 6 | // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MAAnnotation.h" 11 | 12 | @class CLLocation; 13 | @class CLHeading; 14 | 15 | /*! 16 | @brief 定位信息类 17 | */ 18 | @interface MAUserLocation : NSObject 19 | 20 | /*! 21 | @brief 位置更新状态,如果正在更新位置信息,则该值为YES 22 | */ 23 | @property (readonly, nonatomic, getter = isUpdating) BOOL updating; 24 | 25 | /*! 26 | @brief 位置信息,如果MAMapView的showsUserLocation为NO,或者尚未定位成功,则该值为nil 27 | */ 28 | @property (readonly, nonatomic, retain) CLLocation *location; 29 | 30 | /*! 31 | @brief heading信息 32 | */ 33 | @property (readonly, nonatomic, retain) CLHeading *heading; 34 | 35 | /*! 36 | @brief 定位标注点要显示的标题信息 37 | */ 38 | @property (nonatomic, copy) NSString *title; 39 | 40 | /*! 41 | @brief 定位标注点要显示的子标题信息. 42 | */ 43 | @property (nonatomic, copy) NSString *subtitle; 44 | 45 | @end -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/MAMapKit: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/MAMapKit -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/bktile.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/bktile.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/bktile_n.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/bktile_n.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/dash.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/dash.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/iconr.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/iconr.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/iconr_n.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/iconr_n.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/lineround.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/lineround.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/roadarrow.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/roadarrow.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/style_l.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/style_l.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/style_nl.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/style_nl.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/style_sl.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/style_sl.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/tbl.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/tbl.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/tgl.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/tgl.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/trl.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/trl.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/tyl.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/AMap3D.bundle/tyl.data -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/greenPin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/greenPin.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/greenPin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/greenPin@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/greenPin_lift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/greenPin_lift.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/greenPin_lift@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/greenPin_lift@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/lineDashTexture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/lineDashTexture.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/lineTexture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/lineTexture.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/pin_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/pin_shadow.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/pin_shadow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/pin_shadow@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/purplePin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/purplePin.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/purplePin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/purplePin@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/purplePin_lift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/purplePin_lift.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/purplePin_lift@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/purplePin_lift@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/redPin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/redPin.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/redPin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/redPin@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/redPin_lift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/redPin_lift.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/redPin_lift@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/redPin_lift@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/userlocation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/userlocation.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/userlocation@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/images/userlocation@2x.png -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/offline/offlinePackage.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/offline/offlinePackage.plist -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/public_key.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amapapi/iOS_3D_ClusterAnnotation/da4af7a1fcdde85fa79157a136469557ecca9909/iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/2.2.1.1650.60159/Resources/AMap.bundle/public_key.der -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/extern/MAMapKit.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | 2.2.1.1650.60159 -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/iOS_3D_ClusterAnnotation-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | autonavi.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/iOS_3D_ClusterAnnotation-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /iOS_3D_ClusterAnnotation/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // iOS_3D_ClusterAnnotation 4 | // 5 | // Created by yi chen on 14-7-8. 6 | // Copyright (c) 2014年 yi chen. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | --------------------------------------------------------------------------------