Mapwize
这是Mapwize iOS SDK,版本2.3.x。
它允许您显示和交互Mapwize场所地图。
需求
iOS 8或更高版本
模拟器
模拟器似乎在Cookie管理方面存在问题,其行为与真实设备不同。如果您需要使用API从私有场所访问内容,请使用真实设备。
安装
Mapwize通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中
pod 'Mapwize'
示例应用
本仓库提供了一个示例应用,位于MapwizeDemo。打开MapwizeDemo/MapwizeDemo.xcworkspace。
菜单列出了您可以对该地图执行的所有可能操作。
SDK通过CocoaPods安装。如果需要,请从MapwizeDemo中运行pod install
以重置pods配置。
地图文档
显示地图
要显示Mapwize应用,首先创建一个MWZMapView实例,然后,在您的视图控制器中调用以下方法:
[map loadMapWithOptions: options];
这将根据提供的选项在视图中加载地图。
地图选项
选项使用MWZMapOptions类定义。以下选项可用:
- apiKey: [NSString] 必须提供,以使地图加载。可以从Mapwize管理界面获取。如果没有,请联系我们。
- mainColor: [NSString] 如果提供,则此颜色将用于替换地图wize颜色在UI组件中,如楼层控制器或方向。
- bounds: [MWZBounds] 初始化后要显示的区域。
- maxBounds: [MWZBounds] 用户允许导航的区域(默认:整个世界)。
- center: [MWZCoordinate] 启动时地图中心的坐标(默认:0,0)。
- zoom: [NSNumber] 介于0到21之间的整数(默认0)。
- minZoom: [NSNumber] 可选的最小缩放等级,适用于限制可视区域。
- floor: [NSNumber] 表示所需建筑物的楼层整数(默认0)。
- locationEnabled: [BOOL] 布尔值,定义是否启动GPS并显示用户位置(默认:true)。
- beaconsEnabled: [BOOL] 布尔值,定义是否打开iBeacon扫描器(默认:false)。
- accessKey: [NSString] 选项,用于地图加载时使用,以确保在第一次显示地图时访问所需建筑。
- language: [NSString] 选项,指定地图的首选语言。用于显示支持该语言的所有场所。
- 显示用户位置控制 [BOOL] 显示地图右下角的用户位置按钮(默认:true)。
- 显示楼层控制 [BOOL] 显示地图右下角的楼层控制器(默认:true)。
- 显示标记选项 [MWZCustomMarkerOptions] 使用自定义标记图标而不是默认Mapwize标记图标。IconUrl、iconAnchor和iconSize必须定义。IconUrl必须是一个HTTPS URL。
移动地图
地图加载后,您可以在地图实例上使用以下函数
- (void)fitBounds:(MWZBounds*)bounds; - 将地图移动以便指定的边界完整可见。
- (void)centerOnCoordinates:(MWZCoordinate*)coordinate withZoom:(NSNumber*)zoom; 已废弃:- (void)centerOnCoordinates:(NSNumber*)latitude longitude:(NSNumber*)longitude floor:(NSNumber*)floor zoom:(NSNumber*)zoom;
- (void)setFloor:(NSNumber*)floor;
- (void)setZoom:(NSNumber*)zoom;
- (void)centerOnVenue:(MWZVenue*)venue;
- (void)centerOnVenueById:(NSString*)venueId;
- (void)centerOnPlace:(MWZPlace*)place;
- (void)centerOnPlaceById:(NSString*)placeId;
- (void)centerOnUser:(NSNumber*)zoom;
获取地图状态
- (NSNumber*)getFloor - 返回当前显示的楼层。
- (NSArray*)getFloors - 返回当前观看位置可用的楼层列表。
- (NSNumber*)getZoom - 返回当前的缩放级别。
用户位置
FollowUserMode定义了地图是否应该在用户移动时移动。
- (BOOL)getFollowUserMode;
- (void)setFollowUserMode:(BOOL)follow;
您可以使用以下方法获取/设置用户位置。有关用户位置测量原理的完整指南,请参阅Mapwize.js文档。
- (MWZUserPosition*)getUserPosition;
- (void)setUserPosition:(MWZUserPosition*)userPosition; 已废弃:- (void)setUserPositionWithLatitude:(NSNumber*)latitude longitude:(NSNumber*)longitude floor:(NSNumber*)floor; 已废弃:- (void)setUserPositionWithLatitude:(NSNumber*)latitude longitude:(NSNumber*)longitude floor:(NSNumber*)floor accuracy:(NSNumber*)accuracy;
- (void)newUserPositionMeasurement:(MWZMeasurement*)measurement;
- (void)unlockUserPosition;
- (void)removeUserPosition;
如果您没有手动设置用户位置,则需要请求位置授权。这可以通过以下代码完成
CLAuthorizationStatus状态=[CLLocationManager authorizationStatus];
如果 (状态 == kCLAuthorizationStatusAlwaysNotAllowed || 状态 ==kCLAuthorizationStatusหลังจากใช้งาน) { NSLog(@"位置授权已授予"); } 否则 { NSLog(@"请求位置授权"); [locationManager requestWhenInUseAuthorization]; }
别忘了在info.plist中添加kCLAuthorizationStatusAuthorizedWhenInUse或kCLAuthorizationStatusAuthorizedAlways字符串。
如果您在地图选项中将locationEnabled设置为false,您可以使用以下函数来控制位置:
- (void) startLocationWithBeacons:(BOOL)useBeacons;
- (void) stopLocation;
用户航向
当指南针可用时,显示用户正在看的方向可能很有趣。为此,可以使用setUserHeading方法,传入一个角度。例如,如果用户朝南看
- (void) setUserHeading: (NSNumber*) heading;
要删除指南针的显示,只需将角度设置为null即可。
在示例应用程序中,您可以找到监听指南针变化并在地图上显示的代码示例。
使用Mapwize URL
您可以使用以下命令加载数据。有关完整文档,请参阅Mapwize URL方案。
- (void) loadURL: (NSString*) url;
添加标记
您可以在地图上添加标记。
- (void) addMarkerWithCoordinate: (MWZCoordinate*) coordinate; 已弃用: - (void) addMarkerWithLatitude: (NSNumber*) latitude longitude:(NSNumber*) longitude floor:(NSNumber*) floor;
- (void) addMarkerWithPlaceId: (NSString*) placeId;
- (void) removeMarkers;
您可以使用地图选项替换默认的Mapwize标记图标,使用您自己的标记图标。请参阅地图选项以获取详细信息。
控制地点显示
您可以通过提升地点来提高它们的显示优先级。
- (void) setPromotePlaces:(NSArray<MWZPlace*>*) places;
- (void) setPromotePlacesWithIds:(NSArray<NSString*>*) placeIds;
- (void) addPromotePlace:(MWZPlace*) place;
- (void) addPromotePlaceWithId:(NSString*) placeId;
- (void) addPromotePlaces:(NSArray<MWZPlace*>*) places;
- (void) addPromotePlacesWithIds:(NSArray<NSString*>*) placeIds;
- (void) removePromotePlace:(MWZPlace*) place;
您可以通过忽略地点来使它们不可见
- (void) addIgnorePlace:(MWZPlace*) place;
- (void) addIgnorePlaceWithId:(NSString*) placeId;
- (void) removeIgnorePlace:(MWZPlace*) place;
- (void) removeIgnorePlaceWithId:(NSString*) placeId;
- (void) setIgnorePlaces:(NSArray<MWZPlace*>*) places;
- (void) setIgnorePlacesWithIds:(NSArray<NSString*>*) placeIds;
您可以使用此方法添加来自自己的数据位置的。为了使其正常工作,您必须从您的数据创建一个符合Mapwize格式的位置对象,并将所有位置作为参数传递。
- (void) setExternalPlaces: (NSArray<MWZPlace*>*) externalPlaces;
为了正确地使用提升和忽略方法,必须指定一个唯一标识符(MWZPlace.identifier)。
MWZPlace.geometry MWZPlace.venueId MWZPlace.floor MWZPlace.translations
要使用推广和忽略方法,您必须指定一个唯一id(MWZPlace.identifier)。
显示方向
要显示方向,可以使用
- (void) startDirections: (MWZDirection*) direction;
一旦方向加载,方向将被显示,并触发事件 didStartDirections。
查看此文档的 ApiManager 部分,了解更多关于获取方向的信息。
要删除地图上的方向,使用
- (void) stopDirections;
监听事件
您可以使用 MWZMapDelegate 协议监听地图发出的事件。要做到这一点,使用以下方式设置委托类:
map.delegate = self;
然后实现以下方法
- (void) mapDidLoad: (MWZMapView*) map;
- (void) map:(MWZMapView*) map didClick:(MWZCoordinate*) latlon;
- (void) map:(MWZMapView*) map didClickOnPlace:(MWZPlace*) place;
- (void) map:(MWZMapView*) map didClickOnVenue:(MWZVenue*) venue;
- (void) map:(MWZMapView*) map didClickLong: (MWZCoordinate*) latlon;
- (void) map:(MWZMapView*) map didClickOnMarker: (MWZCoordinate*) marker;
- (void) map:(MWZMapView*) map didEnterVenue:(MWZVenue*) venue;
- (void) map:(MWZMapView*) map didExitVenue:(MWZVenue*) venue;
- (void) map:(MWZMapView*) map didChangeFloor:(NSNumber*) floor;
- (void) map:(MWZMapView*) map didChangeFloors:(NSArray*) floors;
- (void) map:(MWZMapView*) map didChangeZoom:(NSNumber*) floor;
- (void) map:(MWZMapView*) map didMove:(MWZCoordinate*) center;
- (void) map:(MWZMapView*) map didChangeUserPosition:(MWZCoordinate*) userPosition;
- (void) map:(MWZMapView*) map didChangeFollowUserMode:(BOOL) followUserMode;
- (void) map:(MWZMapView*) map didStartDirections: (NSString*) infos;
- (void) map:(MWZMapView*) map didStopDirections: (NSString*) infos;
- (void) map:(MWZMapView*) map didFailWithError: (NSError *)error;
在不可用网络连接或与地图的交互失败的情况下,将触发 didFailWithError。
编辑地点样式
地点的显示样式可以在SDK内部动态更改。为此,您可以使用:
- (void) setStyle: (MWZStyle*) style forPlaceById: (NSString*) placeId;
宇宙
您可以使用以下方法更改地点的宇宙。
- (void) setUniverseForVenue: (MWZVenue*) venue withUniverseId:(NSString*) universeId;
- (void) setUniverseForVenue: (MWZVenue*) venue withUniverse:(MWZUniverse*) universeId;
设置顶部和底部边距
地图的部分区域往往会因为顶部或底部的横幅或控件而被遮挡。例如,如果您显示一个横幅以显示您刚刚点击的位置的详细信息,将横幅显示在地图上方通常比需要调整地图大小更好。
但是,您希望确保Mapwize控件始终可见,如跟随用户模式按钮和楼层选择器。此外,如果您执行fitBounds操作,区域将完全位于地图的可视部分。
为此,您可以在地图上设置顶部和底部边距。我们保证在那些边距区域内不会显示重要内容。
设置像素单位的边距:
- (void) setBottomMargin: (NSNumber*) margin;
- (void) setTopMargin: (NSNumber*) margin;
刷新缓存
为了避免在浏览地图时频繁发起网络请求,SDK会保存它已下载的一些数据。
缓存的存活时间(Time To Live)为5分钟。
如果您想强迫地图刷新缓存并更新自身,您可以随时调用刷新方法。
- (void) refresh;
ApiManager 文档
Mapwize 对象和数据可以通过ApiManager单例不实例化地图即可检索。
在使用ApiManager之前,需要提供API密钥
[[MWZApiManager sharedManager] setApiKey:@"您的_api_key"];
请注意,API密钥必须同时提供给ApiManager和任何独立的MapView。
访问私有场所
要访问私有场所,请使用相关accessKey
- (NSURLSessionDataTask *)getAccessWithAccessKey:(NSString *)accessKey success:(void (^)(void))success failure:(void (^)(NSError *error))failure;
访问密钥在Mapwize管理界面中管理,由场所管理员提供。
使用API获取访问权限,同时将在地图中使用访问权限。如果调用完成时地图已加载,您需要刷新地图。
获取场所
场所具有名称和别名属性,这使得比使用ID更容易以人类可读的方式识别它们。场所名称和别名在Mapwize平台上是唯一的。
要从ID、名称或别名获取场所对象,您可以使用以下方法。第一个方法允许传递带有关键字参数的字典,这些参数将直接与API请求一起发送。
-
(NSURLSessionDataTask )getVenues:(NSDictionary<NSString,NSString*>) options success:(void (^)(NSArray<MWZVenue> *venues))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getVenuesForOrganizationId:(NSString )organizationId success:(void (^)(NSArray<MWZVenue> *venues))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getVenueWithId:(NSString *)requestId success:(void (^)(MWZVenue *venue))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getVenueWithName:(NSString *)name success:(void (^)(MWZVenue *venue))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getVenueWithAlias:(NSString *)alias success:(void (^)(MWZVenue *venue))success failure:(void (^)(NSError *error))failure;
获取地点
地点具有ID、名称和别名,类似于场所。ID在整个mapwize平台上是唯一的,但名称和别名在每个场所内是唯一的。
要从ID、名称或别名获取一个地点对象,可以使用以下方法。第一个方法允许传递一个带有过滤参数的字典,这些参数将直接与API请求一起发送。
-
(NSURLSessionDataTask )getPlaces:(NSDictionary<NSString,NSString*>) options success:(void (^)(NSArray<MWZPlace> *places))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getPlaceWithId:(NSString *)requestId success:(void (^)(MWZPlace *place))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getPlaceWithName:(NSString )name inVenue:(MWZVenue) venue success:(void (^)(MWZPlace *place))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getPlaceWithAlias:(NSString )alias inVenue:(MWZVenue) venue success:(void (^)(MWZPlace *place))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask )getPlacesForVenue:(MWZVenue )venue withOptions:(NSDictionary) options success:(void (^)(NSArray<MWZPlace>* places))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask )getPlacesForPlaceList:(MWZPlaceList )placeList success:(void (^)(NSArray<MWZPlace> places))success failure:(void (^)(NSError *error))failure;
获取地点列表
地点列表与地点具有相同的行为。您可以使用以下方法。第一个方法允许传递一个带有过滤参数的字典,这些参数将直接与API请求一起发送。
-
(NSURLSessionDataTask )getPlaceLists:(NSDictionary<NSString,NSString*>) options success:(void (^)(NSArray<MWZPlaceList> *placeLists))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getPlaceListWithId:(NSString *)requestId success:(void (^)(MWZPlaceList *placeList))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getPlaceListWithName:(NSString )name inVenue:(MWZVenue) venue success:(void (^)(MWZPlaceList *placeList))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask *)getPlaceListWithAlias:(NSString )alias inVenue:(MWZVenue) venue success:(void (^)(MWZPlaceList *placeList))success failure:(void (^)(NSError *error))failure;
-
(NSURLSessionDataTask )getPlaceListsForVenue:(MWZVenue )venue success:(void (^)(NSArray<MWZPlaceList> placeLists))success failure:(void (^)(NSError *error))failure;
获取方向信息
要从一个地点到另一个地点请求方向,可能还有中间的waypoints(途点),可以使用以下方法
- (NSURLSessionDataTask )getDirectionsFrom:(id) from to:(id) to by: (NSArray<id>) waypoints withOptions:(MWZDirectionOptions*) options success:(void (^)(MWZDirection *direction))success failure:(void (^)(NSError *error))failure;
from : 方向的起点。可以是 MWZPlace、MWZCoordinate 或 MWZUserPosition。to : 目的地。可以是 MWZPlace、MWZPlaceList、MWZCoordinate 或 MWZUserPosition。waypoint : 中间方向点的数组和。可以包含 MWZPlace、MWZCoordinate 或 MWZUserPosition。
- (NSURLSessionDataTask )getDirectionsFrom:(id) from oneOfTo:(NSArray<id>) to by: (NSArray<id>) waypoints withOptions:(MWZDirectionOptions) options success:(void (^)(MWZDirection *direction))success failure:(void (^)(NSError *error))failure;
使用此方法时,方向引擎将使用 'oneOfTo' 参数的最近点作为目的地。起始点:方向的起始点。可以是 MWZPlace、MWZCoordinate 或 MWZUserPosition。oneOfTo:目的地点的数组。可以包含 MWZPlace、MWZCoordinate 或 MWZUserPosition。中间方向点:中间方向点的数组。可以包含 MWZPlace、MWZCoordinate 或 MWZUserPosition
方向选项
- isAccessible:[BOOL] 布尔值,定义方向是否应避开行动不便者的不可达路线。
- waypointOptimize:[BOOL] 布尔值,定义方向引擎是否应优化航点顺序以返回最短路径。
搜索引擎
MWZVenue、MWZPlace 和 MWZPlaceList 是可搜索对象。可以通过搜索方法检索。
- (NSURLSessionDataTask *)search:(MWZSearchParams*) params success:(void (^)(NSArray<id>*)) success failure:(void (^)(NSError *error))failure;
搜索参数按照以下方式构建
NSString *query; // The query string used for the search
NSString *venueId; // If specified, restricts the search to this venue
NSString *organizationId; // If specified, restricts the search to this organization
NSString *universeId; // If specified, restricts the search to this universe
联系
如有任何帮助需求,请通过以下邮箱联系我们:[email protected]
许可协议
Mapwize 遵循 MIT 许可协议。有关更多信息,请参阅 LICENSE 文件。