0

要件:私は現在、30000を超えるレコードを持つアプリに取り組んでいます。要件は、ロケーションベース/認識検索を行うことです。たとえば。私の現在の場所から5マイル以内。

このサービスへのアクセス方法:このサービスには、WebアプリとiOSアプリの両方からアクセスします。

開発プラットフォーム

  • Web:Cakephp、php、python
  • DB:MySql
  • iOS:Objective-c
  • 現在使用されている外部ライブラリ:Google Maps Javascript Api v3

ロケーションベースの検索

私はこのテーマについていくつかの研究を行っており、これにはHaversineFormulaを採用する予定です。しかし、Haversineの式を有効にするには、DB内のすべてのレコードに対して逆地理コードを使用する必要があります。私が今まで使用した唯一の逆ジオコーディングサービスはGoogleからのものであり、結果を地図に表示せずにこれを許可していないことを知っています。

注:ジオコーディングAPIは、Googleマップと組み合わせてのみ使用できます。地図に表示せずに結果をジオコーディングすることは禁止されています。

  1. これらすべてのレコードを地理コードを逆にするために使用できる他のAPIまたはサービスはありますか?
  2. 30000は大きな数字です。私は明らかに一定期間このためにcronジョブを使用しますが、この要求は同じIPからのものであるため、これは問題になる可能性がありますか?

これに関するどんな助けも高く評価されるでしょう。

アップデート1#

OpenStreetMapNominatimを推奨するこのSOの質問を見つけました

4

2 に答える 2

1

使用できるジオコーディングサービスにはさまざまな種類がありますが、ほとんどの場合、料金を支払う必要があります。Cloudmateをチェックしてください。彼らはあなたの状況のた​​めにうまくいくかもしれません。これがビジネスベンチャーである場合は、少しのお金を費やして、適切なデータを確実に取得する方がよい場合があります。

30,000レコードはそれほど長くはかかりません。レート制限がない場合は、10〜20分で実行できるはずです。2000レコードを一度に1ページ(各ページに100)ジオコーディングしましたが、5分かかりました。

しばらく前に、ロケーション管理インターフェイスを構築しました。それは完成しておらず、コードは最高ではありませんが、それはあなたに出発点を与えるかもしれません。グーグルを使用してジオコーディングしますが、他のサービスと簡単に交換できます。

http://galengrover.com/projects/Store-Locator-Admin/

https://github.com/galen/Store-Locator-Admin

于 2013-03-10T14:47:58.877 に答える
1
    $result = mysql_query("SELECT * FROM abc  ORDER BY id DESC ") or die(mysql_error());  

    while($row = mysql_fetch_array( $result )){


      $lat=$row['latitude'];
      $long=$row['longitude'];

    $url  = "http://maps.googleapis.com/maps/api/geocode/json?latlng=".$lat.",".$long."&sensor=false";
      $json = @file_get_contents($url);
      $data = json_decode($json);
      $status = $data->status;
      $address = '';
      if($status == "OK")
      {
         $address = $data->results[0]->formatted_address;
      }
      else
      {
        echo "No Data Found Try Again";
      }

    mysql_query("UPDATE abc SET location='$address' WHERE id=".$row['id']."") or die(mysql_error());



    printf( $address."%d\n", mysql_affected_rows());
    echo "<br/><br/>";
    }
于 2018-01-22T10:06:10.913 に答える