这两天项目需要用到高德地图,一直在捣鼓,其中一个需求是:需要商家用户,能够在地图上选择自己的店铺位置,然后把这个位置记录下来传给服务器.
第一次用,各种踩坑,问来问去,决定还是自己研究,幸好,搞出来了,方法分享如下:
思路有两种:
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 <MAMaoKit/MAMapKit.h>
#import <AMapFoundationKit/AMaoFoundationKit>
#import.h <AMapSearchKit/AMapSearchKit.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);//获得的中心点地址
}
}