私は緯度と経度を取得するためにアドレスを取得するためにGoogleを使用しています。私は約60-65の住所を通ります。毎回ランダムに5または6を取得し、0,0の座標ペアを返します。緯度と経度の検索0,0
インデックスが失敗するたびに、私はそれがアドレスの問題ではないと確信しています。ここで
は私が緯度と長い
を返すために使用していたコードは、それはおそらく私がforループ内からこのメソッドを呼び出していますということでしょうでしょうか?たぶんそれを何度も繰り返し呼び出すと、それは時々ヒックアップするでしょう?
-(CLLocationCoordinate2D)addressLocation:(NSString*)_address city:(NSString*)_city state:(NSString*)_state {
NSString *temp = [NSString stringWithFormat:@"%@, %@, %@", _address, _city, _state];
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", [temp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSError* error = nil;
NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString ] encoding:NSASCIIStringEncoding error:&error];
NSArray *listItems = [locationString componentsSeparatedByString:@","];
double latitude = 0.0;
double longitude = 0.0;
if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
latitude = [[listItems objectAtIndex:2] doubleValue];
longitude = [[listItems objectAtIndex:3] doubleValue];
}
else {
NSLog(@"Error: %@", [error description]);;
}
CLLocationCoordinate2D location;
location.latitude = latitude;
location.longitude = longitude;
return location;
}
誰がこれで問題が発生した場合ならば、私はしばらくの周りの仕事を見つけたEDIT
。
私は一度各アドレスの緯度と経度を見つけて私のリストを調べます。
Googleクエリからエラーが返された場合は、そのアドレスを保持配列に追加します。 私はフィロゼによって述べられたレート制限に合格したという意味です。
最初のスルースルーが完了した後、私はホールディングアレイを通って各アドレスの場所を見つけます。
私はこれをはるかにクリーンな実装があると確信していますが、ビジネスライセンスを取得することができない人のために、これはハッキングされた方法です。
私は、これは、あなたがlocationStringがnilであるかどうかを確認する必要があります コーリー
Googleはこのサービスの利用方法に厳しい制限を設けており、乱用を検出し一時的に(または永続的に)アクセスをブロックするアルゴリズムを常に更新しています。あなたはあなたのシステムを遅くしようとすることができますが、それは明日の作業を停止することがあります。おそらくあなたはその目的のためにサービスを使用していないでしょうし、他のアドレス検索サービスを見つけるべきでしょう。 –
ご意見はありますか? – random
どのような変更を加えるべきかについての提案?多分あなたはレート制限されていることを検出してから、数秒待ってからルックアップを続けます。また、代替のサービスを提案している場合は、おそらく "Google Maps API For Business"サービスが最適です。または、openstreetmap.orgデータベースを独自のサーバーにダウンロードし、独自のジオコーディングを実行することもできます。 –