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:这时候地图就出来了

添加大头针
GMSMarker类是负责显示大头针,默认是红色,你可以自定义大头针,用图片或者改变颜色,具体看官方文档GMSMarker。
self.marker = [GMSMarker markerWithPosition:position2D];
self.marker.map = self.mapView;
tips:position2D是在定位成功之后转换得到的CLLocationCoordinate2D属性经纬度值。
小坑提示:这时候有可能会出现,定位成功之后出现多个大头针。原因是:进行定位的时候,map获取多个预测位置,从而产生生成多个大头针的现象。解决办法:在每次生成大头针之前先清除之前的那个,只生成最精准的最后一个。










