web-dev-qa-db-ja.com

緯度/経度の郡名を検索する

特定のLat/Longの郡名(国ではない)を取得できるWebサービスを見つけようとしています。サーバーアプリケーション(おそらくa Javaアプリケーション)内でルックアップを実行します。ライブラリが存在する場合、Webサービスはありませんが、必要です。 -最新の情報。これをサポートするAPIをかなり探しましたが、これまでのところ、機能するAPIを見つけることができませんでした。次のようなYahooAPIを試しました。

http://where.yahooapis.com/geocode?q=39.76144296429947,%20-104.801158905029

ただし、アドレス情報は入力されません。そこにもいくつかの「フラグ」オプションを試してみましたが、役に立ちませんでした。

Google APIも調べましたが、郡に配置されていない場所を複数読んでいます。

それで、Lat/Longを取り、その場所に関連付けられた郡を返すAPIを知っている人はいますか?そして、何か例があれば、それは素晴らしいことです。

また、どのAPIが商用アプリケーションでの使用を許可しているかを知りたいです。私が見つけたデータの多くは、お金を稼ぐためにデータを使用することはできないと言っています。私はそれらを間違って読んでいるかもしれませんが、私はこのデータを使用するために私が請求する可能性が高いサービスを構築しようとしています。だから私はオプションが必要だろう。たぶん、私がオプションを模索している間は無料のサービスであり、将来的には有料のサービスです。

17
Andrew Serff

完全を期すために、このデータを取得するための非常に単純な別のAPIを見つけたので、共有したいと思いました。

https://geo.fcc.gov/api/census/

FCCは、まさにこの問題に対応するBlock APIを提供し、国勢調査データを使用して検索を実行します。

それらの使用制限ポリシーは([email protected]から)

ブロック変換APIの使用制限はありませんが、可能であれば、時間の経過とともにリクエストを分散するようにしてください。

23
Andrew Serff

グーグルはあなたの例のために郡に住んでいます、

http://maps.googleapis.com/maps/api/geocode/json?latlng=39.76144296429947,-104.8011589050293&sensor=false

応答で、address_components郡を表すこのオブジェクトを含むキー"Adams"の下を見てください。

{
    long_name: "Adams"
    short_name: "Adams"
    -types: [
        "administrative_area_level_2"
        "political"
    ]
}

これはGeocodingAPIの docs

administrative_area_level_2は、国レベルより下の2次市民エンティティを示します。 米国内では、これらの行政レベルは郡です。すべての国がこれらの行政レベルを示しているわけではありません。

18
Anurag

別のオプション:

  • 都市データベースを http://download.geonames.org/export/dump/ からダウンロードします。
  • 各都市を緯度/経度として追加->国のマッピングをRツリーなどの空間インデックスに追加します(一部のDBには機能もあります)
  • 最近傍検索を使用して、任意のポイントに最も近い人間の居住地に対応する国を見つけます

利点:

  • 利用可能であるために外部サーバーに依存しません
  • はるかに高速です(1秒あたり数千のルックアップを簡単に実行できます)

短所:

  • 特に人口の少ない地域では、国境近くで間違った答えを出す可能性があります
1

Tiger data を調べて、属性に郡名を含むポリゴンがあるかどうかを確認することをお勧めします。もしそうなら Java Geotools API はこのデータを扱うことができます。郡のポリゴンに対してポイントインポリゴンクエリを実行し、続いてフィーチャ属性のルックアップを実行します。

1
whatnick

多分これは素晴らしい解決策です。それはjson形式です。私はいつもこれを私のプロジェクトで使用しています。

http://maps.google.com/maps/geo?ll=10.345561,123.896932

そして、phpを使用して情報を抽出するだけです。

$x = file_get_contents("http://maps.google.com/maps/geo?ll=10.345561,123.896932");

$j_decodex = json_decode($x);

print_r($j_decodex);
0
kedomonzter