版 本 历 史
版本/状态 | 备注 |
---|---|
V 1.0 | 版本截止为4.23 |
1.文档介绍
1.1文档目的
以技术的角度去诠释由高德地图变更为移动和地图相关模块功能实现,通过文档,技术人员或者相关对技术了解的客户或者工作人员可以清晰看到相关差异及差异化开发实现方式,便于开发人员进行交流。
1.2需求概述
原有高德地图相关功能转为使用移动和地图实现。
1.3读者对象
√ 具有高德地图开发经验的iOS开发人员
√ 具有一定地图相关开发经验的iOS开发人员
1.4参考文档
√ 移动和地图官方网站:http://ditu.10086.cn
√ 移动和地图相关下载资料,包括开发指南、SDK包、DEMO等:
http://ditu.10086.cn/spIndex.do?downLoad
√ 【IOS地图SDK开发指南_20170721.docx】
√ 【中国移动统一搜索IOSSDK开发指南V1.1.3 2017-07-18.docx】
2.差异化概述
2.1地图SDK差异化概述
移动和地图经拆包发现,底层使用高德地图,大部分逻辑可通用,基本变更如下:
1.虽然同样名为MAMapView,但是移动和地图的MAMapView为单例,在所有含有页面切换的开发都要基于这一点进行对应考量,灵活利用viewWillDisappear,viewWillAppear等进行对应的信息保存与重载。
2.原高德地图上可以对比例尺、指南针等位置进行变更,在移动和地图上如果需要变更,需要首先使用scaleVisible设置对应指引控件的隐藏,然后再进行自定义控件添加操作,不提供位置变更相关方法。
3.由于单例,且目前尚没有解决办法,使用移动地图的所有页面要求地图的大小需保持一致,否则会造成不同大小地图页面切换时显示错乱问题(版本截止为4.23)。
4.viewDidDisappear时移动和地图不能将MAMapView置为空,尤其是默认进来就需要含有定位图层的情况下,否则会造成多次进入时重新加载地图白屏卡顿,进出反复次数越多,卡顿时间越长。
5.离线地图获取一切都是基于一个已经存在的MAOfflineMap,所以在进调用[MAOfflineMap sharedOfflineMap] 方法获取相关数据前请确保已经存在一个地图单例,否则会报底层汇编错误!
2.2统一搜索SDK差异化概述
不支持根据单关键字搜索边界坐标功能,只能发送省市区路号且包含限定城市字段进行地理编码查询;
3.基础功能实现
3.1地图功能
1.初始化地图位置
coordinate = CLLocationCoordinate2DMake([latIn doubleValue],[lonIn doubleValue]);
MACoordinateRegion region ;//表示范围的结构体
region.center = coordinate;//中心点
region.span.latitudeDelta = 0.1;//经度范围(设置为0.1表示显示范围为0.2的纬度范围)
region.span.longitudeDelta = 0.1;//纬度范围
[_mapView setVisibleMapRect:region animated:NO duration:0.0];
//设置地图缩放级别
[_mapView setCenterCoordinate:coordinate zoomLevel:17 animated:NO duration:0.0];
2.信息保存与重载
-(void)viewWillAppear:(BOOL)animated
{
if ((int)mapCenter.latitude!=0 &&((int)mapCenter.longitude!=0)) {
[_mapView setCenterCoordinate:mapCenter animated:YES duration:0.0] ;
[_mapView setZoomLevel:lastZoomLevel animated:NO duration:0.0];
_mapView.userLocationVisible = lastUserLocationVisible;
isFirst = lastUserLocationVisible;
}
}
-(void)viewDidDisappear:(BOOL)animated
{
[_mapView removeAnnotations:_mapView.annotations];
[_mapView removeOverlays:_mapView.overlays];
[self.view.layer removeAllAnimations];
_mapView.delegate = nil; // 不用时,置nil
_search.delegate = nil;
[super viewDidDisappear:animated];
}
-(void)viewDidAppear:(BOOL)animated
{
_mapView.delegate = self;// 此处记得不用的时候需要置nil,否则影响内存的释放
_search.delegate = self;
[self addOverlayView];
[self addLineView];
[super viewDidAppear:animated];
}
3.2统一搜索功能
1.逆地理编码功能
CMMapReverseGeocodeRequest *reques1 = [[CMMapReverseGeocodeRequest alloc] init];
reques1.location = [[CMMapLatLon alloc] initWithLatitude:location.latitude longitude:location.longitude];
[_search CMMapReverseGeocodeRequest:reques1];
/* 逆地理编码回调. */
- (void)onCMMapReverseGeocodeRequestDone:(CMMapReverseGeocodeRequest *)request response:(CMMapReverseGeocodeResponse *)response;