2013-03-20 66 views

回答

3

您需要確定用戶的IP地址,然後將其提供給某個IP地理位置工具/ API以獲取緯度/經度的地理位置。最後將這些信息用於您的Google地圖。

所有JSF可以爲你做的是給你的用戶的IP地址如下:

HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); 
String ip = request.getRemoteAddr(); 
// ... 

如果你想採取代理考慮爲好,然後檢查X-Forwarded-For頭:

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即可開始使用。

+0

非常感謝BalusC,你能不能建議任何穩定的IP GEO LOCATION,因爲有很多的地方,我有點難以確定哪一個可以使用。請提供任何建議。 – 2013-03-20 12:34:51

3

除了BalusC的回答從Google Maps API documentation報價(Primefaces使用此API引擎蓋下):

新版瀏覽器都開始支持W3C Geolocation standard。 這個標準是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); 
    }); 
    } 

通常情況下,用戶將被提示,並要求允許當網站嘗試訪問位置信息。

你可以先試試這個,如果失敗繼續Balusc的答案。

+0

我知道這種方法。如果用戶拒絕提供他的位置信息會怎麼樣?我的意思是某些用戶只會取消提示而不去查看它,並想到它的某些更新信息或其他內容。 – 2013-03-20 12:31:42

+0

完整的來源顯示在給定的鏈接中。他們首先嚐試獲取位置,如果失敗,他們將採取「西伯利亞」;-)。然後您應該嘗試使用BalusC提出的IP地址查找位置。 – 2013-03-20 12:38:06