にピンの束を表示するためにジオコーディングを転送する(アドレスを指定して座標を取得する)アプリがありますMKMapView
。このアプリは、iOSがフォワードジオコーディングをサポートするかなり前に開発されCLGeocoder
ました(iOS 5で最初に利用可能)。そのため、私のアプリはGoogle Maps Geocoding APIを使用しています。これは、一般的に非常に正確です。番地を含む完全な住所を指定すると、通常、数メートル以内のその住所の正確な場所がわかります。
CLGeocoder
iOS 6をサポートするためにアプリを更新しており、アプリがiOS 5以降で実行されている場合は、GoogleAPIの使用から使用に切り替えることにしました。しかし、私のテストでは(すべて私が住んでいるポルトガルの住所で)、それは完全に使用できないほど不正確です。
私が使用– geocodeAddressString:completionHandler:
しているのは、たとえば、「Avenida da Liberdade 195、Lisboa、Portugal」というアドレスを指定すると、リスボン(リスボン)ではなく、シントラ市の「AvenidadaLiberdade」になります。それは実際の住所から約15km離れています。リベルダーデ大通りは、リスボンで最大かつ最もよく知られている通りの1つです。たとえば、ニューヨークの5番街に相当します。あいまいな小さな脇道ではありません。
そのようなひどい精度を得るために私が間違っていることはありますか?特に米国外の住所で、同様の精度の問題を抱えている人はいますか?
とりあえず、GoogleMapsAPIを使い続ける必要があるようです。ちなみに、私はiOS 6シミュレーターを使用してきましたが、結果はこれ以上良くありません。iOS 6マップアプリの検索ボックスに同じ検索文字列を入力すると、まったく同じ結果が得られます。
編集:追加されたCLGeocoder
コード:
CLGeocoder *fgeo = [[[CLGeocoder alloc] init] autorelease];
NSLog(@"Geocoding for Address: %@\n", address);
[fgeo geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
if (!error) {
// do stuff with the placemarks
for (CLPlacemark *placemark in placemarks) {
NSLog(@"%@\n %.2f,%.2f",[placemark description], placemark.location.horizontalAccuracy, placemark.location.verticalAccuracy);
}
} else {
NSLog(@"Geocoding error: %@", [error localizedDescription]);
}
}];
編集2:– geocodeAddressDictionary:completionHandler:
住所辞書を使用して、住所、郵便番号(郵便番号)、および可能な限り詳細な情報を入力すると、適度に正確な座標が得られますが、それでも正確であることがわかりました。許容できない半径400m以上。