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



在Gmap中,我们可以通过传递自定义纬度和经度来标记所需的位置。是否有任何方法添加标记到地图的用户的当前位置。有办法获得用户的经纬度吗?以前有人这样做过吗?请分享你的想法?

您需要计算用户的IP地址,然后将其提供给一些IP地理定位工具/API,以便获得纬度/经度的地理位置。最后,在你的谷歌地图上使用这些信息。

JSF所能做的就是给你用户的IP地址,如下所示:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
String ip = request.getRemoteAddr();
// ...

如果您也想考虑代理,那么检查X-Forwarded-For header:

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地理位置"到谷歌就可以开始了。

除了BalusC的回答之外,还引用了Google Maps API文档(Primefaces在底层使用该API):

新的浏览器开始支持W3C地理定位标准。这个标准是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的答案。

相关内容

  • 没有找到相关文章

最新更新