如何在Primefaces Gmap上标记用户的当前位置?

时间:2013-03-20 07:27:29

标签: jsf primefaces

在Gmap中,我们可以通过传递自定义纬度和经度来标记所需位置。 有没有办法为用户的CURRENT LOCATION添加标记来映射。 有没有办法获得用户的经纬度? 有人曾经做过吗? 请分享你的想法?

2 个答案:

答案 0 :(得分: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即可开始使用。

答案 1 :(得分: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的回答。