web-dev-qa-db-ja.com

緯度/経度を都市名に変換しますか? (逆ジオロケーティング)

私はCodeigniter PHP + jQueryで、雇用主が場所を入力し、Google Maps APIを使用してそれをプロットするジョブボードに取り組んでいます。これは素晴らしい使いやすさの結果をもたらしましたが、問題はこれらの場所を、混乱していて視覚的に識別しにくい求職者に表示してみてください(「02905、2マイル離れた」、「171 John St.、4マイル離れた」、「プロビデンス、RI、10マイル離れた」のように読みます。 。

経度/緯度から設定されたレベル(理想的には都市名)にジオロケートを逆にして、検索結果に「プロビデンス、ロードアイランド、10マイル離れた」のように場所を表示できるようにしたいです。ロードアイランド州プロビデンス、5マイル離れたところ」、「ロードアイランド州クランストン、16マイル離れたところ」。

ジオコードを都市に逆ジオコーディングする方法はありますか?ジオコードを最も近いアドレス可能な場所に逆ジオコーディングする方法の例はたくさんありますが、レベルを制御する方法はありません。

それが明確であることを願っています!説明が必要な質問があれば、遠慮なくコメントしてください。

14
Walker

逆ジオコーディング をサポートするGoogle Geocoderは、 address_components を返します。都市名だけが必要な場合は、localitypoliticalでタグ付けされたアドレスのコンポーネントを引き出す必要があります。状態も必要な場合は、administrative_area_level_1でタグ付けされます

12
Ossama

無料のソース(例:クリエイティブ・コモンズ)

Geonames

無料の(自由としての)ソースを探している場合は、Geonames APIfindNearbyPlaceNameを使用できます。

たとえば、次は最も近い地名を返します。

http://api.geonames.org/findNearbyPlaceName?lat=47.3&lng=9&username=demo

詳細については、こちらをご覧ください

http://www.geonames.org/export/web-services.html#findNearbyPlaceName

フリーベース

単一の点の代わりに、境界ボックスを取ります。通話サンプル:

http://api.freebase.com/api/service/geosearch?location= [30.2,50.4,30.6,50.8]&location_type =/location/citytown&inside = true&indent = 1

Geocoder.ca

北米の住所の逆ジオコーディング。

情報: http://geocoder.ca/

サンプル呼び出し: http://geocoder.ca/?latt=40.70771000786733&longt=-74.0109443664550&reverse=1&allna=1&geoit=xml&corner=1&jsonp=1&callback=test

マップクエストAPI

Open Street Mapノミナティムサービスの使用:

http://open.mapquestapi.com/nominatim/v1/search?q=50.4,30.4&format=json

無料のソースではありません

Yahoo PlaceFinder

ドキュメント http://developer.yahoo.com/geo/placefinder/

サンプルコール:

http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R&appid= [yourappidhere]

Google Maps API

ドキュメンテーション:

http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding

37
Maksym Kozlenko

完全な住所を入力してから、番地と番地を削除するだけではいけませんか?

より正確な距離を取得するには、完全な住所を使用する方が価値があると思います(都市、州のみを表示する場合でも)。

編集:そのように行う場合は、少なくとも標準形式で返される必要があります。これにより、必要なデータを簡単に正規表現できます。

2
zebediah49

Lat/longをcityに変換するAPIを探していました。これもこのスレッドの元の質問だったようです。

別のstackoverflowスレッドで共有されているデータ " http://download.geonames.org/export/dump/ "を見ました 緯度/経度の座標を考えると、どのようにして都市を見つけることができますか?/country? 、そして私自身のWebサービスを実装しました。

http://scatter-otl.rhcloud.com/location?lat=36&long=-78.9 で実行されていることがわかります。場所の緯度と経度を変更するだけです。

OpenShift(RedHat Platform)にデプロイされます。長いアイドル期間後の最初の呼び出しには時間がかかる場合がありますが、通常はパフォーマンスは十分です。このサービスをお好きなようにご利用ください...

また、プロジェクトのソースは https://github.com/turgos/Location にあります。

0
turgos

逆ジオコーディングサービス(Google、Yahoo、GeoNamesなど)は、いくつかの注意点がありますが、この目的にはうまく機能します。

  • 商用サービスがどのように機能するかはわかりませんが、前回GeoNamesをチェックしたときは、最も近いスポット戦略を使用して都市を決定しました。これは、クエリポイントが2つの都市間の境界にいくらか近く、GeoNamesデータベースの最も近いエントリがその境界の反対側にある場合に問題になる可能性があります。これは私の経験では実際にかなり起こっているので、これは単なる技術ではありません。
  • また、ユーザーエクスペリエンスが心配な場合は、Web APIソリューションによって遅延が増加し、信頼性が低下します。

私は、いくつかの商用地理Web APIを提供するWebサイトを運営しており、それらのAPIをサポートするために構築したJavaライブラリを販売しています。そのうちの1つ(米国のみを対象)は適切なものを使用しています。クエリポイントを含む結果を返すための米国の都市と町の多角形マップ。正確で高速なので、これがシステムのミッションクリティカルなコンポーネントである場合は、次のWebサイトを参照することをお勧めします。

http://askgeo.com

緯度/経度から都市を検索するのに固有のページは次のとおりです。

http://askgeo.com/database/UsPlace201

0
James D

Html5ジオロケーションにはユーザー権限が必要です。この動作を望まない場合は、 https://geoip-db.com のような外部プロバイダーを利用できます。 IPアドレスに基づいた無料のジオロケーションサービスを提供しています。

この例を試してください:

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Geo City Locator</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
</head> 
<body > 
    <div>Country: <span id="country"></span></div>
    <div>State: <span id="state"></spa></div>
    <div>City: <span id="city"></span></div>
    <div>Latitude: <span id="latitude"></span></div>
    <div>Longitude: <span id="longitude"></span></div>
    <div>IP: <span id="ip"></span></div>    
    <script>
      $.getJSON('https://geoip-db.com/json/geoip.php?jsonp=?') 
         .done (function(location) {
            $('#country').html(location.country_name);
            $('#state').html(location.state);
            $('#city').html(location.city);
            $('#latitude').html(location.latitude);
            $('#longitude').html(location.longitude);
            $('#ip').html(location.IPv4);               
         });
    </script>
</body> 
</html>