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