9

私は次のコードを持っています:

CLGeocoder *_geo = [[CLGeocoder alloc] init];
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter: CLLocationCoordinate2DMake(37.33233141, -122.03121860) radius:100 identifier:@"San Francisco"];
[_geo geocodeAddressString:@"Starbucks" inRegion:region
             completionHandler:^(NSArray *placemarks, NSError *error)
{
    NSLog("%@", placemarks);
}];

これにより、中心部がサンフランシスコの真ん中にある場合でも、フィリピンのスターバックスの場所が返されます。

(NSArray *) $3 = 0x07cd9d10 <__NSArrayM 0x7cd9d10>(
Starbuck's, Metro Manila, Quezon City, Republic of the Philippines @ <+14.63617752,+121.03067530> +/- 100.00m, region (identifier <+14.63584900,+121.02951050> radius 166.35) <+14.63584900,+121.02951050> radius 166.35m
)

何か案は?

4

3 に答える 3

4

これが私のために働いている回避策です。geocodeAddressString: completionHandler:地域を考慮せずに使用しています。

その後、返されたものに基づいて、最も近いものだけを含む一連の目印を作成します。

このコードは、エラーが発生したかどうかをチェックしないことに注意してください。簡単にするために削除しました。

CLLocation *centerLocation = [[CLLocation alloc] initWithLatitude:37.33233141 longitude:-122.03121860];

CLLocationDistance maxDistance = <YOUR_MAX_DISTANCE>;

CLGeocoder *geo = [[CLGeocoder alloc] init];
[geo geocodeAddressString:addressString
        completionHandler:^(NSArray *placemarks, NSError *error)
{
    NSMutableArray *filteredPlacemarks = [[NSMutableArray alloc] init];
    for (CLPlacemark *placemark in placemarks)
    {
        if ([placemark.location distanceFromLocation:centerLocation] <= maxDistance)
        {
            [filteredPlacemarks addObject:placemark];
        }
    }

    // Now do whatever you want with the filtered placemarks.
}];

または、リージョンでの作業を継続する場合は、距離をと比較する代わりに、'sdistanceFromLocation:を使用できます。CLRegioncontainsCoordinate:

それが役に立てば幸い。

于 2012-11-29T18:12:32.187 に答える
2

可能性は低いと思われますが、確かに、a)Appleが地域の近くで会社名をジオコーディングすることを意図していなかったか、b)これはバグであるようです。

CLGeocoderリファレンスは、その概要で次のように述べています。

フォワードジオコーディングリクエストは、ユーザーが読み取り可能なアドレスを取得し、対応する緯度と経度の値を見つけます。

これは確かに、検索文字列として実際の物理アドレス(特に「ユーザーが読み取り可能なアドレス」の部分)を意味します。ただし、のドキュメントにgeocodeAddressString: inRegion: completionHandler:は、検索文字列は次のように記載されています。

...検索する場所を説明する文字列...

これはさらに曖昧です。いくつかのプロジェクトを通じて、あなたのコードとそれに非常によく似たコードを実行してみましたが、同じ結果が得られました。Appleの GeocoderDemoサンプルでさえ問題を示しています(私はあなたの緯度/経度の例からわずか150マイル離れたカリフォルニアに住んでいますが)、それは確かに私たちのどちらも書いたものではありません。

私はあなたのために/あなたと一緒にこの問題を解決するのを手伝うことを探し始めました!しかし、このちょっとした研究は私が持っているすべてです。幸運を祈ります。

于 2012-04-20T06:23:27.313 に答える
0

私はあなたの答えを修正しました。GPS座標を反転したところに間違いがあります。このように変更すると、クエリはうまく機能します。

http://maps.googleapis.com/maps/api/geocode/json?bounds=37.832331,-121.531219|36.832331,-122.531219&language=en&address=starbucks&sensor=true

于 2012-08-20T08:55:24.053 に答える