以Primefaces gmap中的当前位置为中心

Bud*_*tne 3 jsf google-maps primefaces

是否可以使用Primefaces的gmap将google map放在客户当前位置的中心?

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

我们可以用Primefaces gmap做到吗?

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

Bal*_*usC 5

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

您可以通过抓取到具体GMAP JavaScript对象的引用widgetVarName.getMap(),其中widgetVarName<p:gmap widgetVar>。然后,您可以按常规方式在其上使用GMap JavaScript API方法,例如setCenter()

如果您想通过HTML5检查地理位置navigator.geolocation并使用Google Loader API作为后备广告,那么这是一个启动示例。

<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>
Run Code Online (Sandbox Code Playgroud)

注意:的初始中心位置41.381542, 2.122893是从PrimeFaces展示柜复制而来的,我认为这是他们最喜欢的俱乐部的足球场:)您可以自由将其更改为其他任何位置,例如您自己公司的位置。

还要注意,出于安全原因,一般的Web浏览器会要求最终用户确认共享位置。另请参阅主题的Google Chrome文档Mozilla Firefox文档。您无法关闭此部分。最终用户确实必须明确接受请求。如果最终用户不允许,它将停留在初始中心位置。