web-dev-qa-db-ja.com

GPS座標の国名

特定のポイントが所在する地域の国の名前を取得する簡単な方法はありますか?

私は正確さや政治的論争によって与えられる曖昧さについてはあまり気にしません。十分な近似が必要です。

18
ibz

編集:Yahoo WhereAPIは使用できなくなりました。

Yahoo!をお試しください API

緯度と経度

緯度と経度は、位置パラメータに指定できます。緯度と経度は、10進角または度-分-秒で表すことができ、先頭または末尾の方向または先頭の記号が付いています。方向が指定されている場合、経度が緯度の前に表示されることがあります。方向が指定されていない場合、経度が-90〜90の範囲外であれば、緯度の前に表示されることがあります。それ以外の場合は、緯度が最初に表示される必要があります。句読点(コンマ、度、分、秒)は無視されます。

Examples: 

•50.3 -120.5
•50.3, -120.5
•-120.5 50.3
•50.3 N 120.5 W
•120.5 W 50.3 N
•50 18 0 -120 30 0
•50 18 0 N 120 30 0 W
•50° 18' 0" N 120° 30' 0" W

Response要素は、国だけでなく、他の多くの elements を提供します。

逆ジオコーディングを行うために、パラメータgflags = Rとして送信することを忘れないでください。 jsonで出力する場合は、パラメーターflags = Jも送信します。

6
GalacticJello

参考までに、geonames.orgにもNice Webサービスがありますが、レートが制限されています(これは、座標の大きなバッチを検索する必要があったため、私の場合は問題でした)。

例: http://ws.geonames.org/findNearbyPlaceName?lat=47.3&lng=9

5
ibz

グーグルの逆ジオエンコーディング サービスを使ってみませんか?

5
Kent Boogaart

緯度と経度の座標から国の名前を取得するためのJavaScriptコードを次に示します。


  1. Googleのジオコーディングサービスの使用 [jsfiddle]

    var lookupCountryWithGoogle = function(lat、lng){var latlng = new google.maps.LatLng(lat、lng);

    var geoCoder = new google.maps.Geocoder();
    
    geoCoder.geocode({
        location: latlng
    }, function(results, statusCode) {
        var lastResult = results.slice(-1)[0];
    
        if (statusCode == 'OK' && lastResult && 'address_components' in lastResult) {
            alert('coordinates: ' + lat + ', ' + lng + '\n' + 'country: ' + lastResult.address_components.slice(-1)[0].long_name);
        } else {
            alert('coordinates: ' + lat + ', ' + lng + '\n' + 'failed: ' + statusCode);
        }
    });
    

    };

    lookupCountryWithGoogle(43.7534932、28.5743187); // lookupCountryWithGoogle(142、124);に成功します//失敗します

(これに対するGoogleのJavaScriptサポートを maps.google.com/maps/api/js?sensor=false&fake=.js などのURLからロードする必要があります)


  1. ws.geonames.org[jsfiddle]

    var lookupCountryWithGeonames = function(lat、lng){

    $.getJSON('http://ws.geonames.org/countryCode', {
        lat: lat,
        lng: lng,
        type: 'JSON'
    }, function(results) {
        if (results.countryCode) {
            alert('coordinates: ' + lat + ', ' + lng + '\n' + 'country: ' + results.countryName);
        } else {
            alert('coordinates: ' + lat + ', ' + lng + '\n' + 'failed: ' + results.status.value + ' ' + results.status.message);
        }
    });
    

    };

    lookupCountryWithGeonames(43.7534932、28.5743187); // 成功します

    lookupCountryWithGeonames(142、124); //失敗します

1
hippietrail

GeonamesAPIが少し変更されました。詳細はこちら: https://www.geonames.org/export/web-services.html

そのページからの実用的な例:

curl "http://api.geonames.org/countryCode?lat=47.03&lng=10.2&username=demo"
0
Eponymous

Tinygeocoderのサービスもご覧いただけます。

別の方法は、自然地球(または別のソース)から国の地図をダウンロードすることです。 Geotoolsを使用すると、ポイントがいずれかの国の内部にあるかどうかを検索できます。