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. Сейчас я приведу примера класса с этими операциями. Его реализацию можно найти в нете, что я и сделал и чуток подогнал его под себя:

  1.  public class GeocodingHelper {
  2.    private static final String GEOCODER_REQUEST_PREFIX_FOR_XML =    "http://maps.google.com/maps/api/geocode/xml";
  3.    private Logger logger = Logger.getLogger(GeocodingHelper.class);
  4.    private float latitude;
  5.    private float length;
  6.    
  7.    public GeocodingHelper(String address) throws IOException,  XPathExpressionException,      ParserConfigurationException, SAXException {
  8.      logger.info("Address:"+address);
  9.      URL url = new URL(GEOCODER_REQUEST_PREFIX_FOR_XML + "?address=" + URLEncoder.encode(address, "UTF-8") + "&sensor=false");
  10.      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  11.      Document geocoderResultDocument = null;
  12.      try {
  13.         conn.connect();
  14.         InputSource geocoderResultInputSource = new InputSource(conn.getInputStream());
  15.         geocoderResultDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(geocoderResultInputSource);
  16.      } finally {
  17.         conn.disconnect();
  18.      }
  19.      
  20.      XPath xpath = XPathFactory.newInstance().newXPath();
  21.      NodeList resultNodeList = null;
  22.      
  23.      // get address
  24.      resultNodeList = (NodeList) xpath.evaluate( "/GeocodeResponse/result/formatted_address", geocoderResultDocument, XPathConstants.NODESET);
  25.      for (int i = 0; i < resultNodeList.getLength(); ++i) {
  26.         logger.info(resultNodeList.item(i).getTextContent());
  27.      }
  28.      // get Province
  29.      resultNodeList = (NodeList) xpath .evaluate( "/GeocodeResponse/result[1]/address_component[type/text()='locality']/long_name",geocoderResultDocument, XPathConstants.NODESET);
  30.      for (int i = 0; i < resultNodeList.getLength(); ++i) {
  31.         logger.info(resultNodeList.item(i).getTextContent());
  32.      }
  33.      // get coordinates
  34.      resultNodeList = (NodeList) xpath.evaluate( "/GeocodeResponse/result[1]/geometry/location/*", geocoderResultDocument, XPathConstants.NODESET);
  35.      float lat = Float.NaN;
  36.      float lng = Float.NaN;
  37.      for (int i = 0; i < resultNodeList.getLength(); ++i) {
  38.         Node node = resultNodeList.item(i);
  39.         if ("lat".equals(node.getNodeName()))
  40.           lat = Float.parseFloat(node.getTextContent());
  41.         if ("lng".equals(node.getNodeName()))
  42.           lng = Float.parseFloat(node.getTextContent());
  43.       }
  44.       this.latitude=lat;
  45.       this.length=lng;
  46.       logger.info("lat/lng=" + lat + "," + lng);
  47.   }
  48. public float getLatitude() {
  49.   return latitude;
  50. }
  51. public float getLength() {
  52.   return length;
  53. }
  54. public void setLatitude(float latitude) {
  55.   this.latitude = latitude;
  56. }
  57. public void setLength(float length) {
  58.   this.length = length;
  59. }
  60. @Override
  61. public String toString() {
  62.   return "GeocodingHelper [latitude=" + latitude + ", length=" + length + "]";
  63. }
  64. }

 

 

 

<script src="http://maps.google.com/maps/api/js?sensor=false"
type="text/javascript"></script>

 

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

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

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

  1.  GeocodingHelper geoCoord = new GeocodingHelper(address); 

 

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

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

 

 

После всего этого мы имеем все необходимое для нашего компонента и можем им наслаждаться)))

Пример кода класса можно скачать с GitHub https://github.com/Man4ester/BLOG Весь код буду грузить туда. Заходите, качайте, коментируйте. Всему буду только рад

comments powered by Disqus

Интересное

Стив Джобс о Mac OS X:
«Я убежден в том, что половина того что отделяет успешных предпринимателей от неудачников — это настойчивость.».
Марк Эллиот Цукерберг:
«Люди всегда немного скептически относятся к чему-то быстрорастущему, но им нужно просто взглянуть на то, что делается.».
Марк Эллиот Цукерберг:
"Множество конфиденциальных вещей намного проще держать в централизованной системе."
Стив Джобс о операционной системе Google Android:
Мы не лезем в поиск, но они решили заняться телефонами. Не надо заблуждаться, они хотят уничтожить iPhone. Мы им не позволим.
Стив Джобс о Mac OS X:
«Мы сделали значки на экране такими красивыми, что вам захочется их лизнуть».


Курсы валют

bank-ua.com bank-ua.com bank-ua.com

Стоит взглянуть