博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iOS地图开发】巧妙打造中英文全球地图
阅读量:6413 次
发布时间:2019-06-23

本文共 4372 字,大约阅读时间需要 14 分钟。

地图开发的同学们经常遇到这样的问题,国内版地图开发,用高德或者百度就行了。但是,国外的地图怎么办?这里告诉大家,如果利用iOS地图,打造中英文的,国内国外都能用的,全球地图。

制作全英文地图的展示并不困难,但是要制作全英文的数据检索列表,全英文的信息窗口,你就没办法了吧。告诉你,我有妙招!使用iOS自带的MapKit来展示全球英文底图,结合上高德API的中英文检索功能,就能打造POI数据最丰富,英文展示全方位的纯英文地图啦!看看截图,是不是浑然天成?

-------------------------------------------------------------------------------------------------------------------------------

下面开始详解纯英文地图的步骤啦,助力程序员与国际APPs接轨!

 

第一步:申请Key

先申请高德的KEY

1、填写应用名称

2、绑定服务选择IOS平台

3、输入bundle id:将Xcode切换到General标签,即可查看Bundle Identifier

4、点击获取KEY

 

第二步、新建地图工程

在xCode里,新建一个 Single View Application工程,并且进行配置。

在高德官网有地图配置的详细说明,这里我就不多说了。查看:

  

第三步、添加MKMapView

1、在xCode里选择Build Phases标签,点开Link Binary With Libraries,再点加号。

2、在弹出来的搜索框里搜索Mapkit

3、选择iOS 8.0-->MapKit.framework,最后点击add即可。

 

第四步、申请定位权限

info.plist中追加NSLocationAlwaysUsageDescription或者NSLocationAlwaysUsageDescription字段。

NSLocationWhenInUseUsageDescription表示应用在前台的时候可以搜到更新的位置信息;NSLocationAlwaysUsageDescription表示应用在前台和后台(suspend或terminated)都可以获取到更新的位置数据。

所以我还是建议NSLocationAlwaysUsageDescription这种方便的模式,哈哈。

 

 1.在工程的
Supporting Files中选择
plist文件
 2.点击+号,输入字段
NSLocationAlwaysUsageDescription
 
 3.按回车,即可完成添加字段

 

第五步、初始化Mapview

高德的坐标系是国内标准坐标(GCJ-02,又称火星坐标),国际上一般是采用GPS坐标(WGS-84),所以大多数国际应用在中国使用时,需要进行坐标转换。

好在苹果的MapKit用的是高德的地图,showUserLocation= YES,坐标已经是GCJ-02的啦,可以直接使用~

(PS:不建议使用CLLocationManager定位管理类,它返回的坐标是GPS坐标,必须进行坐标转换,很麻烦。)
 
//申请定位权限  -  (void) initLocation  {       if(nil == _locationManager)       {           _locationManager = [[CLLocationManager alloc] init];      }          if([[[UIDevice  currentDevice] systemVersion] floatValue] >= 8.0)       {           [_locationManager requestAlwaysAuthorization];       }  } //初始化MapView  -  (void) initMapView{ //构造MKMapView       _mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 21,  CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];       _mapView.delegate = self;      _mapView.showsUserLocation  = YES;//显示定位图标      [_mapView  setUserTrackingMode:MKUserTrackingModeFollow];//设置定位模式   //将mapview添加到Subview中       [self.view addSubview:_mapView];   }

 

第六步、初始化AMapSearchAPI

构造AMapSearchAPI对象,设置搜索结果语言为英文
AMapSearchLanguage_en
这步非常重要喔!必须要设置成英文,才能巧妙地让POI搜索、逆地理编码和地理编码、输入提示等,都变成纯英文喔。
 
//初始化AMapSearchAPI  -  (void)initSearch  {       //构造AMapSearchAPI       _search = [[AMapSearchAPI alloc] initWithSearchKey:APIKey Delegate:self];       _search.language = AMapSearchLanguage_en;//设置语言  }

 

第七步、写个搜索demo来看看

以一个普通的POI检索为例,当检索英文关键词时,出来纯英文的搜素建议;搜索结果也用英文来展示。

/*  POI 搜索.  */  -  (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode  {       if (key.length == 0)     {           return;       }  //构造POI搜索对象AMapPlaceSearchRequest  AMapPlaceSearchRequest  *place = [[AMapPlaceSearchRequest alloc] init];  //设置关键字       place.keywords = key;       place.requireExtension = YES;//设置成YES,返回信息详细,较费流量       if (adcode.length > 0)     {           place.city = @[adcode];       }       //发起查询     [_search  AMapPlaceSearch:place];  }    //回调中显示结果  -  (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse  *)respons  {       if (respons.pois.count == 0)       {           return;       }      NSMutableArray  *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];      [respons.pois  enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {          [poiAnnotations  addObject:[[POIAnnotation alloc] initWithPOI:obj]];      }];  /*  将结果以annotation的形式加载到地图上. */       [_mapView addAnnotations:poiAnnotations];  /*  如果只有一个结果,设置其为中心点. */      if (poiAnnotations.count == 1)       {          _mapView.centerCoordinate = [poiAnnotations[0] coordinate];       }  /* 如果有多个结果, 设置地图使所有的annotation都可见. */       else       {           [_mapView showAnnotations:poiAnnotations animated:NO];       }  }

 

最后,想象你是一个外国人,把你的手机语言改成English,这时,英文底图就出现了!

其实如果用高德iOS SDK,也有英文底图,但得调用SDK啊,很麻烦呢。如果本来就是给在中国的外国人看,还不如直接调用iOS的MapKit呢~

你要开发安卓版英文地图的话,那当然直接用高德Android SDK就好了啦~

 

最后,这里是全部源码下载:

 

 

大家快动手试试吧~~ 真的是一秒钟国际范儿的赶脚~ 再看一遍截图~

 

-------------------------------------------------------------------------------------------------------------------------------

关于为什么要选择高德API:

1、苹果MapKit本来就是调用的高德地图,看右下角版权信息,是不是有个灰色的高德地图logo,所以不存在坐标转换的问题,嗯,浑然天成;

2、高德推出了,全英文地图,全英文检索(全国仅此一家!)等潮流产品,各种非常适合“国际范儿”这个命题。

-------------------------------------------------------------------------------------------------------------------------------

 

 

转载于:https://www.cnblogs.com/milkmap/p/4206108.html

你可能感兴趣的文章
移动端网页调试
查看>>
JavaScript 引擎 V8 新机制:JIT-less 模式
查看>>
数据库之事务之间的隔离
查看>>
人工智能产业化面临多重挑战 应提前布局抢占先机
查看>>
小米8.0系统机器一键激活xposed框架的流程
查看>>
HTML 属性
查看>>
前端面试之如何获取一个iframe的scrollTop
查看>>
阿里云高级技术专家带你全面了解云主机性能评测
查看>>
CVE漏洞—PHPCMS2008 /type.php代码注入高危漏洞预警
查看>>
SpringCloudSpringBootmybatis分布式微服务云架构-hystrix参数详解
查看>>
(十三)Java springcloud B2B2C o2o多用户商城 springcloud架构-config-bus
查看>>
当Kubernetes应用遇到阿里分批发布模式
查看>>
大数据时代,IT行业竟有如此多高薪职位!
查看>>
获取多个值赋多变量
查看>>
用Pgpool-II实现Postgresql高可用集群
查看>>
技术向销售学什么(一)
查看>>
ESFramework Demo -- 简单的网络硬盘Demo
查看>>
ulimit命令用来限制系统用户对shell资源的访问(设置Linux文件打开数)
查看>>
手机网页返回
查看>>
在ADT中从AVD(Android模拟器)中导入(导出)文件
查看>>