Gmap では、カスタムの緯度と経度を渡すことで目的の場所をマークできます。ユーザーの現在地の地図にマーカーを追加する方法はありますか? ユーザーの緯度と経度を取得する方法はありますか? 誰もそれをやったことがありますか?あなたのアイデアを共有してください。
2 に答える
地理的位置を緯度/経度で取得するには、ユーザーの IP アドレスを把握し、それを IP 地理的位置ツール/API にフィードする必要があります。最後に、この情報を Google マップに使用します。
JSF ができることは、次のようにユーザーの IP アドレスを提供することだけです。
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
String ip = request.getRemoteAddr();
// ...
プロキシも考慮したい場合は、X-Forwarded-For
ヘッダーを確認してください。
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
String ip = request.getRemoteAddr();
String forwardedFor = request.getHeader("X-Forwarded-For");
if (forwardedFor != null) {
ip = forwardedFor.split("\\s*,\\s*", 2)[0];
}
// ...
次に、どの IP 地理位置情報ツール/API を使用する必要があるかは、自分で答えなければならない問題です。開始するには、キーワード「 ip geo location」を Google にフィードするだけです。
BalusC の回答に加えて、Google Maps API ドキュメントからの引用(Primefaces は内部でこの API を使用しています):
新しいブラウザは、W3C Geolocation 標準をサポートし始めています。この標準は HTML5 の一部であり、今後デファクト スタンダードになる可能性があります。地理位置情報を実行するすべてのアプリケーションは、この標準をサポートする必要があります。
一部のブラウザーは、IP アドレスを使用してユーザーの場所を検出します。ただし、ユーザーの IP アドレスはユーザーの場所の大まかな推定値しか提供できないため、地理位置情報にこの方法を使用することはお勧めしません。W3C のアプローチは最も簡単で、最も完全にサポートされているため、他の方法よりも優先する必要があります。
与えられたリンクからの短い例を次に示します。
var initialLocation;
var browserSupportFlag = new Boolean();
// Try W3C Geolocation (Preferred)
if(navigator.geolocation) {
browserSupportFlag = true;
navigator.geolocation.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
map.setCenter(initialLocation);
}, function() {
handleNoGeolocation(browserSupportFlag);
});
}
通常、Web サイトが位置情報にアクセスしようとすると、ユーザーは許可を求められます。
最初にこれを試してみて、失敗した場合は Balusc の回答に進みます。