如何在iOS中获取谷歌地图的中心位置纬度和经度?

时间:2015-01-26 11:57:21

标签: ios objective-c google-maps google-maps-sdk-ios

我是iOS开发中的新手和地图套件中的新手我想知道MapView中心的纬度和经度每次像用户Scrollfrom一个位置到另一个那时我想显示我的GMSMapView的中心纬度和经度怎么样可能像在这里我附上图像。

这里我的当前位置是孟买然后它显示我的mapView像

enter image description here

我想知道中心位置纬度和经度,就像当用户滚动Mapview然后我想知道我的图像指示点的纬度和经度。这里图像显示我想知道此点的纬度和经度此处我的图像显示在我的MapView的中心位置。

enter image description here

3 个答案:

答案 0 :(得分:6)

要在地图移动时获取位置,您需要处理mapView:didChangeCameraPosition:

然后在该方法中,您可以访问mapView.camera.target以获取地图的当前中心。

- (void) mapView: (GMSMapView *)mapView 
     didChangeCameraPosition: (GMSCameraPosition *)position 
{
    double latitude = mapView.camera.target.latitude;
    double longitude = mapView.camera.target.longitude;

    // now do something with latitude and longitude
}

请注意,要处理委托方法,您需要实现GMSMapViewDelegate protocol。设置地图时,您需要将地图的委托设置为处理协议的类(通常为self),例如:

mapView.delegate = self;

答案 1 :(得分:2)

使用以下代码获取mapview纬度和经度的中心。   当您自动向任何方向滚动mapview regionWillChangeAnimated:方法将调用。它是optinal delegate方法之一。

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
     CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(mkmapView.centerCoordinate.latitude, mkmapView.centerCoordinate.longitude);
     CGFloat txtLatitude = coord.latitude;
     CGFloat txtLongitude = coord.longitude;
     NSLog(@"Latitude is===>>>%f %f",txtLongitude);
     NSLog(@"Longitude is===>>>%f %f",txtLongitude);
 }

如果您点按地图视图,则需要纬度经度使用以下代码。 这里 _mkMapView 是Mapview的出口。

- (void)viewDidLoad
{
     UITapGestureRecognizer *tapGesture= [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTapped:)];
     [self.view addGestureRecognizer:tapGesture];
}

- (void)backgroundTapped:(UITapGestureRecognizer *)gesture
{
    CGPoint touchPoint = [gesture locationInView:_mkMapView];
    CLLocationCoordinate2D location =[_mkMapView convertPoint:touchPoint toCoordinateFromView:_mkMapView];
}

可能会对你有所帮助。

答案 2 :(得分:0)

- (void)mapView:(GMSMapView *)pMapView didChangeCameraPosition:(GMSCameraPosition *)position {
mapViewRef.delegate = self;
double latitude = mapViewRef.camera.target.latitude;
double longitude = mapViewRef.camera.target.longitude;
CLLocationCoordinate2D addressCoordinates = CLLocationCoordinate2DMake(latitude,longitude);
GMSGeocoder* coder = [[GMSGeocoder alloc] init];
[coder reverseGeocodeCoordinate:addressCoordinates completionHandler:^(GMSReverseGeocodeResponse *results, NSError *error) {
    if (error) {
        // NSLog(@"Error %@", error.description);
    } else {
        GMSAddress* address = [results firstResult];
        NSArray *arr = [address valueForKey:@"lines"];
        NSString *str1 = [NSString stringWithFormat:@"%lu",(unsigned long)[arr count]];
        if ([str1 isEqualToString:@"0"]) {
            self.txtPlaceSearch.text = @"";
        }
        else if ([str1 isEqualToString:@"1"]) {
            NSString *str2 = [arr objectAtIndex:0];
            self.txtPlaceSearch.text = str2;
        }
        else if ([str1 isEqualToString:@"2"]) {
            NSString *str2 = [arr objectAtIndex:0];
            NSString *str3 = [arr objectAtIndex:1];
            self.txtPlaceSearch.text = [NSString stringWithFormat:@"%@,%@",str2,str3];
        }
    }
  }];
}