高德地图,实时获取中心点的经纬度和地址

这两天项目需要用到高德地图,一直在捣鼓,其中一个需求是:需要商家用户,能够在地图上选择自己的店铺位置,然后把这个位置记录下来传给服务器.

第一次用,各种踩坑,问来问去,决定还是自己研究,幸好,搞出来了,方法分享如下:


思路有两种:

1.大头针不动,让用户移动地图,然后实时获取大头针所在位置的经纬度信息.

2.固定地图,移动大头针,然后取到大头针落点的位置.

我用的第一种方法,感觉要好操作一点:

首先:在地图中心放一个UIImageView,添加一个大头针的图片我用的是系统自带的图片(redPin.png),这里有个坑,系统自带的大头针图片都放在AMap.bundle里面,但是我们在下载SDK的时候,貌似不会下载这个,我也是看了官方demo,才找到这个AMap.bundle.所以,(关于demo,一定要多看,特别是没思路的时候,挺有帮助的).

然后:从demo中取出AMap.bundle,拖进自己的项目,即可.注意:这里又有一个坑,导入以后,点开看会发现,文件夹是蓝色的,我第一次给添加图片,直接就imageView.image = [UIImage imageNamed:@"redPin"];但是,运行发现,图片并没有显示.所有,需要我们手动把redPin.png和2x,3x的图片拖到AMap.bundle外面的目录,这样,图片就显示出来了.





最后,就是导入相关的SDK(此处用的2D地图SDK),调用代理方法了,

在viewController.m 导入:

#import

#import

#import.h  //这个在进行坐标转地址时用到

声明属性:

@property(nonatomic,strong)MAMapView * mapView;

@property(nonatomic,strong)AMapSearchAPI * search;

@property(nonatomic,strong)AMapReGeocodeSearchRequest *regeo ;


加入代理


- (void)viewDidLoad {

///地图需要v4.5.0及以上版本才必须要打开此选项(v4.5.0以下版本,需要手动配置info.plist)

[AMapServices sharedServices].enableHTTPS = NO;//默认开启HTTPS

///初始化地图

_mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT*0.5)];

[self.view addSubview:_mapView];

_mapView.delegate = self;

[_mapView setZoomLevel:13.5 animated:YES];//改变地图的缩放级别

//_mapView.showsUserLocation = YES;    //显示定位小蓝点

//自定义大头针

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 60)];

imageView.center = _mapView.center;

imageView.image = [UIImage imageNamed:@"redPin"];  //添加大头针,使它固定在屏幕中心

[_mapView addSubview:imageView];

_search = [[AMapSearchAPI alloc]init];

_search.delegate = self;

}



#pragma mark - MAMapViewDelegate

//地图区域改变完成后调用的接口

- (void)mapView:(MAMapView *)mapView regionDidChangeAnimated:(BOOL)animated{

NSLog(@"%f",mapView.region.center.latitude); //拿到中心点的经纬度

NSLog(@"%f\n",mapView.region.center.longitude);

//如果将坐标转为地址,需要进行逆地理编码

//设置逆地理编码查询参数 ,进行逆地编码时,请求参数类为 AMapReGeocodeSearchRequest,location为必设参数。

_regeo = [[AMapReGeocodeSearchRequest alloc] init];

_regeo.location = [AMapGeoPoint locationWithLatitude:mapView.region.center.latitude longitude:mapView.region.center.longitude];

_regeo.requireExtension = YES;

[_search AMapReGoecodeSearch:_regeo];

}

#pragma mark -  AMapSearchDelegate

/* 逆地理编码回调. */

- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response

{

if (response.regeocode != nil)

{

//解析response获取地址描述,具体解析见 Demo

//位置信息

NSLog(@"reGeocode:%@", response.regeocode.formattedAddress);//获得的中心点地址

}

}

好了,这样就能获得地图中心的坐标和地址了.

如果对你有用的话,请点赞,谢谢!

许多不足,欢迎多多交流.

你可能感兴趣的:(高德地图,实时获取中心点的经纬度和地址)