详解iOS集成GoogleMap(定位、搜索)

2020-01-21 04:32:06于丽

tips:上面的经纬度可以随便传一个,之后会获取到新的经纬度并更新位置

(二)初始化一个定位管理者对象


if (self.locationManager == nil) {
  self.locationManager = [[CLLocationManager alloc]init];
 }
 self.locationManager.delegate = self;
 [self.locationManager requestAlwaysAuthorization];//授权方式,如果在后台也需要定位,那就选择 requestAlwaysAuthorization。
 self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;//最精确的定位
 self.locationManager.distanceFilter = kCLDistanceFilterNone; // 默认是kCLDistanceFilterNone,也可以设置其他值,表示用户移动的距离小于该范围内就不会接收到通知
 [self.locationManager startUpdatingLocation];

tips:CLLocationManager 是负责获取用户行为的类,列如获取用户当前位置信息。更多详细信息请阅览CLLocationManager。里面讲解CLLocationManager的一些应用场景并有代码实例。

运行app:这时候我们会看到并没有实景地图出来,原因是:前面提到的GMSCameraPosition类,我们并没有在定位成功之后将定位内容赋它。

GMSCameraPosition类,它是负责显示定位内容的。很重要!

(三)在定位成功的API代理方法中,获取经纬度并转成影像赋值


- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
 CLLocation *curLocation = [locations lastObject];
 // 通过location 或得到当前位置的经纬度
 CLLocationCoordinate2D curCoordinate2D = curLocation.coordinate;
 GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:curCoordinate2D.latitude longitude:curCoordinate2D.longitude zoom:Level];
 CLLocationCoordinate2D position2D = CLLocationCoordinate2DMake(curLocation.coordinate.latitude, curLocation.coordinate.longitude);
 self.mapView.camera = camera;//这句话很重要很重要,将我们获取到的经纬度转成影像并赋值给地图的camera属性
 [self.locationManager stopUpdatingLocation];//定位成功后停止定位
}

tips:locationManager: didUpdateLocations: 代理方法是GoogleMap 中实现定位成功后回调的代理方法,你可以在这里获取到经纬度。

运行app:这时候地图就出来了

iOS,GoogleMap,定位,搜索

添加大头针

GMSMarker类是负责显示大头针,默认是红色,你可以自定义大头针,用图片或者改变颜色,具体看官方文档GMSMarker。


 self.marker = [GMSMarker markerWithPosition:position2D];
 self.marker.map = self.mapView;

tips:position2D是在定位成功之后转换得到的CLLocationCoordinate2D属性经纬度值。

小坑提示:这时候有可能会出现,定位成功之后出现多个大头针。原因是:进行定位的时候,map获取多个预测位置,从而产生生成多个大头针的现象。解决办法:在每次生成大头针之前先清除之前的那个,只生成最精准的最后一个。