<script type="text/javascript"> function geocode() { PF('geoMap').geocode(document.getElementById('address').value); } function reverseGeocode() { var lat = document.getElementById('lat').value, lng = document.getElementById('lng').value; PF('revGeoMap').reverseGeocode(lat, lng); } </script> <a:form prependId="false"> <h3 style="margin-top:0">Geocode</h3> <h:panelGrid columns="3" style="margin-bottom:10px" cellpadding="5"> <a:outputLabel for="address" value="Address:" /> <a:inputText id="address" /> <a:commandButton value="Geocode" icon="ui-icon-search" onclick="geocode()" type="button" /> </h:panelGrid> <a:gmap id="geoGmap" widgetVar="geoMap" center="#{geocodeView.centerGeoMap}" zoom="2" type="ROADMAP" model="#{geocodeView.geoModel}" style="width:100%;height:400px"> <a:ajax event="geocode" listener="#{geocodeView.onGeocode}" update="@this" /> </a:gmap> <h3>Reverse Geocode</h3> <h:panelGrid columns="5" style="margin-bottom:10px" cellpadding="5"> <a:outputLabel for="lat" value="Lat:" /> <a:inputText id="lat" /> <a:outputLabel for="lng" value="Lng:" /> <a:inputText id="lng" /> <a:commandButton value="Reverse Geocode" icon="ui-icon-search" onclick="reverseGeocode()" type="button"/> </h:panelGrid> <a:gmap id="revGeoGmap" widgetVar="revGeoMap" center="#{geocodeView.centerRevGeoMap}" zoom="2" type="ROADMAP" model="#{geocodeView.revGeoModel}" style="width:100%;height:400px"> <a:ajax event="reverseGeocode" listener="#{geocodeView.onReverseGeocode}" update="@this" /> </a:gmap> </a:form>
package com.jarch.showcase.view.data.gmap; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import org.primefaces.event.map.GeocodeEvent; import org.primefaces.event.map.ReverseGeocodeEvent; import org.primefaces.model.map.DefaultMapModel; import org.primefaces.model.map.GeocodeResult; import org.primefaces.model.map.LatLng; import org.primefaces.model.map.MapModel; import org.primefaces.model.map.Marker; @ManagedBean public class GeocodeView { private MapModel geoModel; private MapModel revGeoModel; private String centerGeoMap = "41.850033, -87.6500523"; private String centerRevGeoMap = "41.850033, -87.6500523"; @PostConstruct public void init() { geoModel = new DefaultMapModel(); revGeoModel = new DefaultMapModel(); } public void onGeocode(GeocodeEvent event) { List<GeocodeResult> results = event.getResults(); if (results != null && !results.isEmpty()) { LatLng center = results.get(0).getLatLng(); centerGeoMap = center.getLat() + "," + center.getLng(); for (int i = 0; i < results.size(); i++) { GeocodeResult result = results.get(i); geoModel.addOverlay(new Marker(result.getLatLng(), result.getAddress())); } } } public void onReverseGeocode(ReverseGeocodeEvent event) { List<String> addresses = event.getAddresses(); LatLng coord = event.getLatlng(); if (addresses != null && !addresses.isEmpty()) { centerRevGeoMap = coord.getLat() + "," + coord.getLng(); revGeoModel.addOverlay(new Marker(coord, addresses.get(0))); } } public MapModel getGeoModel() { return geoModel; } public MapModel getRevGeoModel() { return revGeoModel; } public String getCenterGeoMap() { return centerGeoMap; } public String getCenterRevGeoMap() { return centerRevGeoMap; } }