4

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

4

2 回答 2

4

您需要计算出用户的 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 即可开始使用。

于 2013-03-20T11:12:27.307 回答
3

除了 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 的回答。

于 2013-03-20T12:11:40.810 回答