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 Весь код буду грузить туда. Заходите, качайте, коментируйте. Всему буду только рад |