我是iOS开发中的新手和地图套件中的新手我想知道MapView中心的纬度和经度每次像用户Scrollfrom一个位置到另一个那时我想显示我的GMSMapView的中心纬度和经度怎么样可能像在这里我附上图像。
这里我的当前位置是孟买然后它显示我的mapView像
我想知道中心位置纬度和经度,就像当用户滚动Mapview然后我想知道我的图像指示点的纬度和经度。这里图像显示我想知道此点的纬度和经度此处我的图像显示在我的MapView的中心位置。
答案 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];
}
}
}];
}