中心到Primefaces gmap中的当前位置

时间:2013-10-08 09:01:56

标签: google-maps jsf primefaces

是否可以使用Primefaces的gmap将google地图置于客户当前位置的中心位置?

我使用JSF,JPA和primefaces来开发公共卫生信息系统。具有GPS功能的移动设备的现场官员需要记录位置,以便将数据记录到数据库进行分析。

我们可以使用Primefaces gmap吗?

如果不可能,我可以使用哪些其他工具和技术来实现此功能?

1 个答案:

答案 0 :(得分:5)

是的,这很有可能,但这反过来又取决于客户的网络浏览器supports HTML5 navigator.geolocation和/或您是否使用Google Loader API作为后备。

您可以在widgetVarName.getMap() widgetVarName之前获取对具体GMap JavaScript对象的引用。<p:gmap widgetVar>setCenter()。然后,您可以按常规方式使用GMap JavaScript API方法,例如navigator.geolocation

这是一个启动示例,前提是您要通过HTML5 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <p:gmap widgetVar="w_gmap" type="HYBRID" center="41.381542, 2.122893" zoom="15" style="width:600px;height:400px" /> <script type="text/javascript"> if (navigator.geolocation) { checkGeolocationByHTML5(); } else { checkGeolocationByLoaderAPI(); // HTML5 not supported! Fall back to Loader API. } function checkGeolocationByHTML5() { navigator.geolocation.getCurrentPosition(function(position) { setMapCenter(position.coords.latitude, position.coords.longitude); }, function() { checkGeolocationByLoaderAPI(); // Error! Fall back to Loader API. }); } function checkGeolocationByLoaderAPI() { if (google.loader.ClientLocation) { setMapCenter(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude); } else { // Unsupported! Show error/warning? } } function setMapCenter(latitude, longitude) { w_gmap.getMap().setCenter(new google.maps.LatLng(latitude, longitude)); } </script> 检查地理位置,并使用Google Loader API作为后备。

41.381542, 2.122893

注意:{{1}}的初始中心位置来自PrimeFaces showcase,我认为这代表了他们最喜欢的俱乐部的足球场:)您可以将其更改为其他任何内容,例如你自己公司的位置。

另请注意,平均webbrowser出于安全原因请求最终用户确认共享位置。另请参阅有关该主题的Google Chrome documentationMozilla Firefox documentation。您无法关闭此部分。最终用户确实明确接受了请求。如果最终用户不允许它,它将坚持在初始中心位置。