だから私はMKMapViewに触れることに基づいてCLLocationを取得しようとしています。次に、場所を逆ジオコーディングしようとしています。
if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
// Not sure if this is the right method to get the location or not
CLLocationCoordinate2D coordinate = [self.mapView convertPoint:[gestureRecognizer locationInView:self.mapView] toCoordinateFromView:self.mapView];
CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:pinLocation completionHandler:^(NSArray *placemarks, NSError *error) {
if (placemarks && placemarks.count > 0) {
CLPlacemark *topResult = [placemarks objectAtIndex:0];
AddressAnnotation *anAddress = [[AddressAnnotation alloc] initWithPlacemark:topResult];
[self.mapView addAnnotation:anAddress];
[self.addressesArray addObject:anAddress];
}
else {
AddressAnnotation *anAddress = [[AddressAnnotation alloc] initWithCoordinate:coordinate];
[self.mapView addAnnotation:anAddress];
[self.addressesArray addObject:anAddress];
}
}];
私のif/elseステートメントで、私がやりたいのは、マップをタッチしてCLLocationを取得することです。場所を逆ジオコーディングできる場合は、住所のピンをドロップします。場所を逆ジオコーディングできない場合は、ピンをドロップして、地図のコールアウトに緯度と経度を表示します。
うまくいかないようです。特定の場所で地図に触れても、逆ジオコーディングによってピンが別の場所に移動し、逆ジオコードでその場所を特定できるように見えます。これは私が望む振る舞いではありません。何があってもピンを落としたいのですが、コールアウトに住所が表示されない場合は、緯度/経度を表示してください。
revseGeocodeLocation:pinLocationコードを完全に削除し、elseブロックにあるものだけを使用すると、緯度/経度が取得され、ピンは何があってもそこにドロップされます。逆ジオコーダーがピンを希望の場所に落とさないようにする理由はありますか?
ちなみに、UITapGestureRecognizerに基づいてCLLocationCoordinate2Dを計算する方法が正しいかどうかを誰かが確認できますか?
ありがとう!