2012-08-08 3 views
5

多くの場所で私は自分の現在の都市を印刷しました(例えば、「こんにちはベルリン」)。彼らはどうやって?それには何が必要ですか? 私はここの主要な部分はjavascriptだと思いますが、私は自分のアプリにこのようなものを実装するために何が必要ですか? (または、Railsのためにいくつかの宝石がありますか?)ユーザーのジオロケーションを取得する方法は?

また、私はまだ一つのことを尋ねたいと思います - 私は状態のリスト(通常は選択ボックス)で興味深いです。 )、状態値に応じて別の選択が表示され、ドイツのすべての地域と地域を選択した後に、選択された地域のそれぞれの都市が表示されます。

は状態/都市/地域のこの巨大なデータベースを得るためにどこでも可能ですか?我々のアプリで同様のものを持って興味深いものになるだろうが、これらのリストは得るところ私は、知らない...

答えて

3

、PHPでの場所を見つけるために別のAPIですただし、ユーザーの同意が必要です(例:here)(IE9 +やWindows Mobile 7.5のブラウザを含むほとんどの新しいブラウザでは、Windows Phone 7.5+を含む)。

に次に実行する場所を取得するためにJavaScriptを使用することである。

if (window.navigator.geolocation) { 
    var failure, success; 
    success = function(position) { 
     console.log(position); 
    }; 
    failure = function(message) { 
     alert('Cannot retrieve location!'); 
    }; 
    navigator.geolocation.getCurrentPosition(success, failure, { 
     maximumAge: Infinity, 
     timeout: 5000 
    }); 
} 

position目的は、彼らが持っていないように(ただし、これは、デスクトップブラウザに少ない人口密集地域において非常に不正確になることができ、ユーザの位置の緯度と経度を保持しますGPSデバイスが内蔵されています)。さらに詳しく説明すると、ライプツィヒでは、デスクトップコンピュータで約300メートルの精度を得ることができます。私は携帯電話のGPSデバイスで約30メートルの精度を得ています。

次に、Google Maps APIhere for reverse geocodingを参照)の座標を使用して、ユーザーの場所を検索できます。必要に応じて、few gems for Railsがあります。私はそれらを使用する必要性を感じなかったが、一部の人々はそれらを好むようだ。

国/都市のリストについては、プロジェクトではGeonamesから入手可能なデータを使用しましたが、最初にニーズに合わせて変換する必要がありました。

0

インターネットサービスプロバイダは、あなたがしているものを最も可能性が高いシーイングがAで、IPアドレスの大きな塊を買いますIPを既知のISPにバックトレースします。彼らにはISPのデータベースと世界のロケーションがあるので、どこから来たのかを調べることができます。あなたの仕事を行うには、http://www.ipaddresslocation.org/のようなサイトを使うことができます。見回すと、IPを入力して場所を取得できるサイトがあるので、そのサイトに訪問者のIPでPOST要求を送信し、応答からその場所をスクラップするだけです。

また、場所が割り当てられているIP範囲のチャンクがあるISPデータベースを探すこともできます。おそらくお金のためのものを見つけることができますが、無料のものは見つけるのが難しいかもしれません。 はまた、ここでhttp://www.maxmind.com/app/geolite

0

をこの無料のデータベースをチェックアウトすると、あなたがの場所を得るために、ジオロケーションAPIをサポートしているブラウザが必要

http://ipinfodb.com/ip_location_api.php

1

getCurrentPosition()は、正確な精度を得るためにGPSを待つのに多くの時間を費やさないため、しばしば不正確であることがわかりました。私はgetCurrentPosition()を模倣した小さなJavaScriptを書いていましたが、実際には監視位置を使用し、より正確になるまで戻ってくる結果を監視します。ここで

は、それがどのように見えるかです:

navigator.geolocation.getAccurateCurrentPosition(onSuccess, onError, {desiredAccuracy:20, maxWait:15000}); 

コードはここにある - https://github.com/gwilson/getAccurateCurrentPosition

1

Correc構文は次のようになります。

navigator.geolocation.getCurrentPosition(successCallBack, failureCallBack); 

用途:

navigator.geolocation.getCurrentPosition(
     function(position){ 
      var latitude = position.coords.latitude; 
      var longitude = position.coords.longitude; 
      console.log("Latitude : "+latitude+" Longitude : "+longitude); 
     }, 
     function(){ 
      alert("Geo Location not supported"); 
     } 
    );   
0

私はuとなっていますかなりの間geoip.maxmind.comを歌ってください。それは100%動作します。 HTTPリクエストを介してアクセスできます。

0

あなたがここにES6との約束を使用する場合は、別のバージョン

function getPositionPromised() { 
    function successCb(cb) { 
    return position => cb(position); 
    } 

    function errorCb(cb) { 
    return() => cb('Could not retrieve geolocation'); 
    } 

    return new Promise((resolve, reject) => { 
    if (window.navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(successCb(resolve), errorCb(reject)); 
    } else { 
     return reject('No geolocation support'); 
    } 
    }) 
} 

であり、あなたはこのようにそれを使用することができます:

getPositionPromised() 
    .then(position => {/*do something with position*/}) 
    .catch(() => {/*something went wrong*/}) 
関連する問題