1 package cz.frantovo.nekurak.ext;
3 import java.io.UnsupportedEncodingException;
4 import java.net.URLEncoder;
5 import java.util.logging.Level;
6 import java.util.logging.Logger;
7 import javax.xml.parsers.DocumentBuilder;
8 import javax.xml.parsers.DocumentBuilderFactory;
9 import org.w3c.dom.Document;
10 import org.w3c.dom.Node;
11 import org.w3c.dom.NodeList;
14 * TODO: přesunout jinam a převést na EJB.
19 private static final Logger log = Logger.getLogger(Geo.class.getSimpleName());
22 * Převede poštovní adresu na zeměpisné souřadnice.
24 * @return souřadnice k dané adrese nebo null, v případě chyby.
26 public Souradnice getSouradnice(String adresa) {
30 * TODO: naprosto zprasené → předělat →
31 * http://code.google.com/intl/cs/apis/maps/documentation/geocoding/#XMLParsing
33 DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
34 Document d = db.parse(sestavURL(adresa));
35 NodeList mista = d.getElementsByTagName("location");
36 Node misto = mista.item(0);
37 NodeList potomci = misto.getChildNodes();
40 for (int i = 0; i < potomci.getLength(); i++) {
41 Node p = potomci.item(i);
42 if ("lat".equals(p.getNodeName())) {
43 sirka = p.getTextContent();
45 if ("lng".equals(p.getNodeName())) {
46 delka = p.getTextContent();
50 if (sirka == null || delka == null) {
51 log.log(Level.WARNING, "Selhalo zjišťování souřadnic – šířka nebo délka jsou null – pro adresu: " + adresa);
54 return new Souradnice(Double.parseDouble(sirka), Double.parseDouble(delka));
56 } catch (Exception e) {
57 log.log(Level.WARNING, "Selhalo zjišťování souřadnic pro adresu: " + adresa, e);
62 private static String sestavURL(String adresa) throws UnsupportedEncodingException {
63 return "http://maps.google.com/maps/api/geocode/xml?sensor=false&address=" + URLEncoder.encode(adresa, "UTF-8");
66 public class Souradnice {
72 public String toString() {
73 return "šířka = " + sirka + "; délka = " + delka + ";";
77 public boolean equals(Object o) {
78 if (o instanceof Souradnice) {
79 Souradnice s = (Souradnice) o;
80 return s.sirka == sirka && s.delka == delka;
87 public int hashCode() {
89 hash = 79 * hash + (int) (Double.doubleToLongBits(this.sirka) ^ (Double.doubleToLongBits(this.sirka) >>> 32));
90 hash = 79 * hash + (int) (Double.doubleToLongBits(this.delka) ^ (Double.doubleToLongBits(this.delka) >>> 32));
94 public Souradnice(double sirka, double delka) {
99 public String getLoc() {
100 return "Loc: " + sirka + ", " + delka;
103 public double getDelka() {
107 public double getSirka() {
111 public void setDelka(double delka) {
115 public void setSirka(double sirka) {