CedarMaps iOS SDK
本指南将指导您将CedarMaps集成到您的iOS应用中。
本文件中提到的所有方法和工具均在Xcode 11上进行了测试。
目录
安装
CedarMaps通过CocoaPods提供。要安装它,只需将以下行添加到Podfile中,然后运行pod install
。
pod 'CedarMaps'
所需权限
如果您的应用需要访问位置服务,请在应用的 Info.plist
中添加对 NSLocationWhenInUseUsageDescription
的描述使用。
<key>NSLocationWhenInUseUsageDescription</key>
<string>THE REASON OF REQUESTING LOCATION</string>
配置 Cedarmaps
要使用 Cedarmaps 瓦片和工具,您需要一对在初始化 SDK 第一步使用的 clientID
和 clientSecret
。
在 AppDelegate
的 applicationDidFinishLaunchingWithOptions:
是初始化 Cedarmaps 的好地方。
[[CSMapKit sharedMapKit] setCredentialsWithClientID:@"CLIENT_ID" clientSecret:@"CLIENT_SECRET"];
CSMapKit.shared.setCredentialsWithClientID("CLIENT_ID", clientSecret: "CLIENT_SECRET")
更改 API 基本地址
如果您已收到 API 基本地址,可以在 CSMapKit
共享对象上设置它。
[[CSMapKit sharedMapKit] setAPIBaseURL:@"API_BASE_URL"];
CSMapKit.shared.setAPIBaseURL("API_BASE_URL")
Mapbox
CedarMaps SDK 基于 Mapbox iOS SDK,并在 Mapbox 上提供了额外的 API 方法。有关如何使用 Mapbox 组件和方法的更多信息(如 添加标记、显示当前位置 等),请参阅 Mapbox 入门。
CSMapView
如果您想使用 Cedarmaps 瓦片,需要多一步。完成以下代码片段后,您就可以使用 CSMapView
实例,它是 Mapbox MGLMapView
的子类,可以在Storyboard或代码中互换使用;它们不应混用。
[[CSMapKit sharedMapKit] prepareMapTiles:^(BOOL isReady, NSError * _Nullable error) {
}];
CSMapKit.shared.prepareMapTiles { isSuccesful, error in
}
更改地图样式
您可以将各种样式URL设置到CSMapView
的实例中。
mapView.styleUrl = "STYLE_URL"
// Light Vector (Default): "CSMapViewStyleURLVectorLight"
// Dark Vector: "CSMapViewStyleURLVectorDark"
// Raster: "CSMapViewStyleURLRasterLight"
如果您有自己的基础URL,请确保使用扩展版本。
API 方法
除了使用 MapView 之外,您还可以使用 cedarMaps API 获取基于位置的 数据和街道搜索。
所有 API 调用都是异步的;它们不会阻塞主队列。完成处理程序都在主队列上调用。
您还可以在 CSMapKit.h 中查看所有方法的详细信息。以下是一些主要方法。
正向地理编码
对于查找街道或一些有限的POI,您可以轻松调用 geocode
方法。
- (void)geocodeAddressString:(nonnull NSString *)addressString
inBoundingBox:(nonnull CSBoundingBox *)boundingBox
withType:(CSPlacemarkType)type
limit:(NSInteger)limit
completionHandler:(nonnull CSForwardGeocodeCompletionHandler)completionHandler;
open func geocodeAddressString(_ addressString: String, in boundingBox: CSBoundingBox, with type: CSPlacemarkType, limit: Int, completionHandler: @escaping CSForwardGeocodeCompletionHandler)
在示例应用中还有更多高级的街道搜索可用。
逆向地理编码
您可以通过逆向地理编码API检索有关位置的详细信息。
- (void)reverseGeocodeLocation:(nonnull CLLocation *)location
completionHandler:(nonnull CSReverseGeocodeCompletionHandler)completionHandler;
open func reverseGeocodeLocation(_ location: CLLocation, completionHandler: @escaping CSReverseGeocodeCompletionHandler)
方向
此方法可计算点之间的方向。在一个请求中,最多可以调用50个不同的点对。
- (void)calculateDirectionsFromSource:(nonnull CLLocation *)source toDestinations:(nonnull NSArray<CLLocation *> *)destinations withCompletionHandler:(nonnull CSDirectionCompletionHandler)completionHandler;
open func calculateDirections(fromSource: CLLocation, destinations: [CLLocation], withCompletionHandler completionHandler: @escaping CSDirectionCompletionHandler)
距离
此方法计算点之间的距离,单位为米。单个请求可调用最多15个不同点。
- (void)calculateDistance:(nonnull NSArray<CSRoutePair *> *)routePairs withCompletionHandler:(nonnull CSDirectionCompletionHandler)completionHandler;
open func calculateDistance(_ routePairs: [CSRoutePair], withCompletionHandler completionHandler: @escaping CSDirectionCompletionHandler)
静态地图图片
您可以使用以下代码片段请求所需地图视图的UIImage
。您需要先创建一个CSMapSnapshotOptions
来设置自定义属性。
CSMapSnapshotOptions *options = [[CSMapSnapshotOptions alloc] init];
options.center = [[CLLocation alloc] initWithLatitude:LATITUDE longitude:LONGITUDE];
options.zoomLevel = ZOOM_LEVEL;
options.size = CGSizeMake(WIDTH, HEIGHT);
[CSMapKit.sharedMapKit createMapSnapshotWithOptions:options withCompletionHandler:^(CSMapSnapshot * _Nullable snapshot, NSError * _Nullable error) {
}];
let options = CSMapSnapshotOptions()
options.center = CLLocation(latitude: LATITUDE, longitude: LONGITUDE)
options.zoomLevel = ZOOM_LEVEL
options.size = CGSize(width: WIDTH, height: HEIGHT)
CSMapKit.shared.createMapSnapshot(with: options) { (snapshot, error) in
}
可选地,您可以通过在CSMapSnapshotOptions
实例上设置markers
属性来指定要在地图上绘制的标记。
通过示例应用程序了解更多示例
要运行示例项目,首先克隆存储库,然后从Example
目录运行pod install
。然后,在CSAppDelegate.m
文件中设置自己的clientID
和clientSecret
。
示例项目是Swift和Objective-C的混合体。