如何利用MapKit开发全英文检索的iOS地图

大神们,打扰一下,如何利用MapKit开发全英文检索的iOS地图
最新回答
www王者

2024-10-14 23:16:37

  第一步:申请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坐标,必须进行坐标转换,很麻烦。)

  第六步、初始化AMapSearchAPI

  构造AMapSearchAPI对象,设置搜索结果语言为英文AMapSearchLanguage_en。

  这步非常重要喔!必须要设置成英文,才能巧妙地让POI搜索、逆地理编码和地理编码、输入提示等,都变成纯英文喔。

  第七步、写个搜索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];

  }

  }