在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的答案。