2017-01-11 5 views
2

私は劇場、レストラン、有名な公園、休暇の場所、ショッピングストアのようなユーザーの緯度と経度を使って地名を取得したいと思います。私はGoogle map apiを使用していますが、店舗名ではなくエリア名のみを表示しています。私はどのように地名を取得するのですか?緯度&経度のGoogleマップで正確な位置名を取得するにはどうすればよいですか?

答えて

1

Google Places APIを使用してこの情報を取得できます。 Googleマップは、緯度と経度のパラメータに基づいて店舗や場所のデータを返しません。

APIキーをGoogle Places APIと連携してから、getNearbyPlacesエンドポイントを呼び出すことができます。終点には、緯度、経度、および半径(結果を検出する必要のある距離)パラメータが必要です。あなたの応答には複数の結果が含まれるように、依然としてクエリであることを忘れないでください。デフォルトでは、結果は人気順に並べられます。私はオプションパラメータとして "type = establishment"も指定したいので、 "route"のような抽象的な結果は得られません。

RapidAPI here.私はあなたを直接getNearbyPlacesエンドポイントにリンクしました。あなたのapiKey、緯度、経度、半径(私はそれを約20メートルの特殊性のために保つのが好きです)、およびその他のオプションのパラメータを入力してください。詳細なJSONレスポンスを表示するには、「TEST関数」をクリックしてください。このようなもののスクリーンショットを表示します。この例では

responseScreenshot

、私はボブのドーナツのための緯度と経度を見上げました。ブーム!私の最初の結果は、サンフランシスコのBob's Donutsでした。 RapidAPIを使用すると、コードスニペットを生成して、自分のコードに直接コピー&ペーストすることもできます。応答の上にある「コード」ボタンをクリックしてサインインし、使用している言語を選択するだけです。

enter image description here

・ホープ、このことができます:上記の呼び出しから提供されたコードスニペットは次のようになります!もう1つ..結果が人気順に並べられているため、最初の結果が必ずしも理想的な結果になるとは限りません。 APIは "rankBy"パラメータを提供しますが、私はGoogleがまだいくつかのバグを解決していると思います。その間に、最も近い結果アイテムを距離で見つけるループを作成します。 Haversine式を使って距離関数を作成するだけです。私はあなたにすばやい機能を構築します!私は、haversine式関数をthis post.から使いました。

// Still using my Bob's Doughnuts example 
const startLatitude = "37.7918904"; // your original query latitude 
const startLongitude = "-122.4209966"; // your original query longitude 

function closestResult(results) { 
    let closestResult = null; 
    let shortestDistance = null; 

    for (let i = 0; i < results.length; i++) { 
    let location = results[i].geometry.location; 
    let currentDistance = 
     getDistanceFromLatLonInKm(startLatitude, startLongitude, location.lat, location.lng); 
    if (shortestDistance === null) { 
     closestResult = results[i]; 
     shortestDistance = currentDistance; 
    } else if (currentDistance < shortestDistance) { 
     closestResult = results[i]; 
     shortestDistance = currentDistance; 
    } 
    } 
    return closestResult; 
} 

function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) { 
    var R = 6371; // Radius of the earth in km 
    var dLat = deg2rad(lat2-lat1); // deg2rad below 
    var dLon = deg2rad(lon2-lon1); 
    var a = 
    Math.sin(dLat/2) * Math.sin(dLat/2) + 
    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2) 
    ; 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; // Distance in km 
    return d; 
} 

function deg2rad(deg) { 
    return deg * (Math.PI/180); 
} 

今、あなたの成功コールバックは次のようになります。

enter image description here

コーディングハッピー!

関連する問題