2011-07-01 10 views

答えて

90

これは、Googleからのドキュメント逆ジオコーディング

+0

驚くばかり!私はこれを読んで、そして今ではあまりにも多くのクエリの過度の来る;)ありがとう。 –

+0

IPアドレスと1人あたりのユーザー数は、javascript APIを使用している場合と同じですが、たとえばPHPを使用している場合に、これらの制限に達すると思われる場合は、リクエストを1秒間に制限するか、プロキシサーバーを使用するが、プロキシに注意する必要があります、Googleは愚かではない、あなたはそれらをハンマーできません。詳細はこちら:https://developers.google.com/maps/documentation/business/articles/usage_limits –

+0

@Azer http://www.microsoft.com/maps/choose-your-bing-maps-API.aspx – smartcaveman

21

ここでは、完全なサンプルです:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Geolocation API with Google Maps API</title> 
    <meta charset="UTF-8" /> 
    </head> 
    <body> 
    <script> 
     function displayLocation(latitude,longitude){ 
     var request = new XMLHttpRequest(); 

     var method = 'GET'; 
     var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true'; 
     var async = true; 

     request.open(method, url, async); 
     request.onreadystatechange = function(){ 
      if(request.readyState == 4 && request.status == 200){ 
      var data = JSON.parse(request.responseText); 
      var address = data.results[0]; 
      document.write(address.formatted_address); 
      } 
     }; 
     request.send(); 
     }; 

     var successCallback = function(position){ 
     var x = position.coords.latitude; 
     var y = position.coords.longitude; 
     displayLocation(x,y); 
     }; 

     var errorCallback = function(error){ 
     var errorMessage = 'Unknown error'; 
     switch(error.code) { 
      case 1: 
      errorMessage = 'Permission denied'; 
      break; 
      case 2: 
      errorMessage = 'Position unavailable'; 
      break; 
      case 3: 
      errorMessage = 'Timeout'; 
      break; 
     } 
     document.write(errorMessage); 
     }; 

     var options = { 
     enableHighAccuracy: true, 
     timeout: 1000, 
     maximumAge: 0 
     }; 

     navigator.geolocation.getCurrentPosition(successCallback,errorCallback,options); 
    </script> 
    </body> 
</html> 
+0

ユーザーの承認なしに緯度と経度からユーザーの場所を見つける方法はありますか? –

+4

@VikasVermaあなたが同意なしにユーザーの場所を見つけることが許可されている場合、深刻なプライバシー違反となるでしょう – omerio

+0

@merioありがとうございます。しかし、コードを作成しました。 –

4

ここで約束を使用して近代的なソリューションです:

function getAddress (latitude, longitude) { 
    return new Promise(function (resolve, reject) { 
     var request = new XMLHttpRequest(); 

     var method = 'GET'; 
     var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + latitude + ',' + longitude + '&sensor=true'; 
     var async = true; 

     request.open(method, url, async); 
     request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
       if (request.status == 200) { 
        var data = JSON.parse(request.responseText); 
        var address = data.results[0]; 
        resolve(address); 
       } 
       else { 
        reject(request.status); 
       } 
      } 
     }; 
     request.send(); 
    }); 
}; 

そして、このようにそれを呼び出す:

getAddress(lat, lon).then(console.log).catch(console.error); 

を約束は、コードの動作ファインは、都市名を取得するには、次の「キャッチ」

1

で「を」またはエラーステータスコードでアドレスオブジェクトを返します。 (GoogleマップジオAPIを使用):

HTML

<p><button onclick="getLocation()">Get My Location</button></p> 
<p id="demo"></p> 
<script src="http://maps.google.com/maps/api/js?key=YOUR_API_KEY"></script> 

SCRIPT @Sanchitグプタと同じ

var x=document.getElementById("demo"); 
function getLocation(){ 
    if (navigator.geolocation){ 
     navigator.geolocation.getCurrentPosition(showPosition,showError); 
    } 
    else{ 
     x.innerHTML="Geolocation is not supported by this browser."; 
    } 
} 

function showPosition(position){ 
    lat=position.coords.latitude; 
    lon=position.coords.longitude; 
    displayLocation(lat,lon); 
} 

function showError(error){ 
    switch(error.code){ 
     case error.PERMISSION_DENIED: 
      x.innerHTML="User denied the request for Geolocation." 
     break; 
     case error.POSITION_UNAVAILABLE: 
      x.innerHTML="Location information is unavailable." 
     break; 
     case error.TIMEOUT: 
      x.innerHTML="The request to get user location timed out." 
     break; 
     case error.UNKNOWN_ERROR: 
      x.innerHTML="An unknown error occurred." 
     break; 
    } 
} 

function displayLocation(latitude,longitude){ 
    var geocoder; 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(latitude, longitude); 

    geocoder.geocode(
     {'latLng': latlng}, 
     function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       if (results[0]) { 
        var add= results[0].formatted_address ; 
        var value=add.split(","); 

        count=value.length; 
        country=value[count-1]; 
        state=value[count-2]; 
        city=value[count-3]; 
        x.innerHTML = "city name is: " + city; 
       } 
       else { 
        x.innerHTML = "address not found"; 
       } 
      } 
      else { 
       x.innerHTML = "Geocoder failed due to: " + status; 
      } 
     } 
    ); 
} 
0

。この部分の

if (results[0]) { 
var add= results[0].formatted_address ; 
var value=add.split(","); 
count=value.length; 
country=value[count-1]; 
state=value[count-2]; 
city=value[count-3]; 
x.innerHTML = "city name is: " + city; 
} 

結果だけ配列我々は緯度、LNGからアドレスを取得するためにノード-ジオコーダ NPMモジュールを使用することができますNode.jsので

if (results[0]) { 
console.log(results[0]); 
// choose from console whatever you need. 
var city = results[0].address_components[3].short_name; 
x.innerHTML = "city name is: " + city; 
} 
1

を慰める。、

geo.js

var NodeGeocoder = require('node-geocoder'); 

var options = { 
    provider: 'google', 
    httpAdapter: 'https', // Default 
    apiKey: ' ', // for Mapquest, OpenCage, Google Premier 
    formatter: 'json' // 'gpx', 'string', ... 
}; 

var geocoder = NodeGeocoder(options); 

geocoder.reverse({lat:28.5967439, lon:77.3285038}, function(err, res) { 
    console.log(res); 
}); 

出力:

ノードジオ。js

[ { formattedAddress: 'C-85B, C Block, Sector 8, Noida, Uttar Pradesh 201301, India', 
    latitude: 28.5967439, 
    longitude: 77.3285038, 
    extra: 
    { googlePlaceId: 'ChIJkTdx9vzkDDkRx6LVvtz1Rhk', 
     confidence: 1, 
     premise: 'C-85B', 
     subpremise: null, 
     neighborhood: 'C Block', 
     establishment: null }, 
    administrativeLevels: 
    { level2long: 'Gautam Buddh Nagar', 
     level2short: 'Gautam Buddh Nagar', 
     level1long: 'Uttar Pradesh', 
     level1short: 'UP' }, 
    city: 'Noida', 
    country: 'India', 
    countryCode: 'IN', 
    zipcode: '201301', 
    provider: 'google' } ] 
+0

非常に明確で実用的なフィードバックをいただきありがとうございます。「node-geocoder」と「@ google/maps」の選択に違いがありますか?同じように表示されますが、どちらも出力されます。 – Ade

+1

両方の出力同じですが、ノードジオコーダーはアドレスを取得するための単純化されたモジュールであり、@ google/mapsは設定する必要のあるアドレスを取得するためのAPIです。 –

関連する問題