GMap

GMap компонент основан на Google Maps API Version 3. Раскажу как его подключать, как работать с ним, добавить маркеры и саме глвное получить координаты зная только адресс!
Для начала будет справедливо расказать что много итнформации можно получитьпо http://www.primefaces.org/showcase. Там расписаны базовые вещи по компоненту И так для подключения нам нужно использовать компонент<p:gmap center=”41.381542, 2.122893″ zoom=”15″ type=”HYBRID” style=”width:600px;height:400px” />  Но спешу заметить что после добавления этого тега и компонента Вы ничего не увидите у себя на странице. А все потому, что для работы этого компонента нам нужно также подключить скрипты Googla, про которые почему то ничего не сказано в доках Primefaces<script src=”http://maps.google.com/maps/api/js?sensor=false” type=”text/javascript”></script>Только после этого Вы увидите долгожданную карту))

Ну возниакате вопросс, что делать если у нас нет координат для карты, а только адресс. Нам нужно адресс перевести в координаты. очень хорошо что для этого у нас есть api Google. Сейчас я приведу примера класса с этими операциями. Его реализацию можно найти в нете, что я и сделал и чуток подогнал его под себя:

public class GeocodingHelper {
   private static final String GEOCODER_REQUEST_PREFIX_FOR_XML =    "http://maps.google.com/maps/api/geocode/xml";
   private Logger logger = Logger.getLogger(GeocodingHelper.class);
   private float latitude;
   private float length;
   
   public GeocodingHelper(String address) throws IOException,  XPathExpressionException,      ParserConfigurationException, SAXException {
     logger.info("Address:"+address);
     URL url = new URL(GEOCODER_REQUEST_PREFIX_FOR_XML + "?address=" + URLEncoder.encode(address, "UTF-8") + "&sensor=false");
     HttpURLConnection conn = (HttpURLConnection) url.openConnection();
     Document geocoderResultDocument = null;
     try {
        conn.connect();
        InputSource geocoderResultInputSource = new InputSource(conn.getInputStream());
        geocoderResultDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(geocoderResultInputSource);
     } finally {
        conn.disconnect();
     }
     
     XPath xpath = XPathFactory.newInstance().newXPath();
     NodeList resultNodeList = null;
     
     // get address
     resultNodeList = (NodeList) xpath.evaluate( "/GeocodeResponse/result/formatted_address", geocoderResultDocument, XPathConstants.NODESET);
     for (int i = 0; i < resultNodeList.getLength(); ++i) {
        logger.info(resultNodeList.item(i).getTextContent());
     }
     // get Province
     resultNodeList = (NodeList) xpath .evaluate( "/GeocodeResponse/result[1]/address_component[type/text()='locality']/long_name",geocoderResultDocument, XPathConstants.NODESET);
     for (int i = 0; i < resultNodeList.getLength(); ++i) {
        logger.info(resultNodeList.item(i).getTextContent());
     }
     // get coordinates
     resultNodeList = (NodeList) xpath.evaluate( "/GeocodeResponse/result[1]/geometry/location/*", geocoderResultDocument, XPathConstants.NODESET);
     float lat = Float.NaN;
     float lng = Float.NaN;
     for (int i = 0; i < resultNodeList.getLength(); ++i) {
        Node node = resultNodeList.item(i);
        if ("lat".equals(node.getNodeName()))
          lat = Float.parseFloat(node.getTextContent());
        if ("lng".equals(node.getNodeName()))
          lng = Float.parseFloat(node.getTextContent());
      }
      this.latitude=lat;
      this.length=lng;
      logger.info("lat/lng=" + lat + "," + lng);
  }
public float getLatitude() {
  return latitude;
}
public float getLength() {
  return length;
}
public void setLatitude(float latitude) {
  this.latitude = latitude;
}
public void setLength(float length) {
  this.length = length;
}
@Override
public String toString() {
  return "GeocodingHelper [latitude=" + latitude + ", length=" + length + "]";
}
}

Для нас очень полезными будут: latitude, length. Эти поля мы будем использовать дальше для вставки их значений в компонент для карт.

Приставим что используем Bean и в нем нам нужно получить координаты зня только адресс String address=””, допустим там у нас уже есть адресс как строка.

Дальше нам нужно только написать

GeocodingHelper geoCoord = new GeocodingHelper(address); 

Так как мы добавили контструктор с параметром для нашего класса. geoCoord обьект у которого уже есть значения координат, котли мы хотим добавить маркеторые можно вставить в наш компонент для отобраджение карты. Если мы хотим добавить маркер нам достаточно только написать:

 LatLng coord1 = new LatLng(geoCoord.getLatitude(), geoCoord.getLength());
 
 simpleGMapModel.addOverlay(new Marker(coord1,"Описание чего нибудь");

После всего этого мы имеем все необходимое для нашего компонента и можем им наслаждаться)))Пример кода класса можно скачать с GitHub https://github.com/Man4ester/BLOG Весь код буду грузить туда. Заходите, качайте, коментируйте. Всему буду только рад
Please follow and like us:

Leave a Comment