franta-hg@100: package cz.frantovo.nekurak.ejb; franta-hg@100: franta-hg@100: import java.io.UnsupportedEncodingException; franta-hg@100: import java.net.URLEncoder; franta-hg@100: import java.util.logging.Level; franta-hg@100: import java.util.logging.Logger; franta-hg@100: import javax.xml.parsers.DocumentBuilder; franta-hg@100: import javax.xml.parsers.DocumentBuilderFactory; franta-hg@100: import org.w3c.dom.Document; franta-hg@100: import org.w3c.dom.Node; franta-hg@100: import org.w3c.dom.NodeList; franta-hg@100: franta-hg@100: /** franta-hg@100: * TODO: přesunout jinam a převést na EJB. franta-hg@100: * @author fiki franta-hg@100: */ franta-hg@100: public class Geo { franta-hg@100: franta-hg@100: private static final Logger log = Logger.getLogger(Geo.class.getSimpleName()); franta-hg@100: franta-hg@100: /** franta-hg@100: * Převede poštovní adresu na zeměpisné souřadnice. franta-hg@100: * @param adresa franta-hg@100: * @return souřadnice k dané adrese nebo null, v případě chyby. franta-hg@100: */ franta-hg@100: public Souradnice getSouradnice(String adresa) { franta-hg@100: try { franta-hg@100: franta-hg@100: /** franta-hg@100: * TODO: naprosto zprasené → předělat → franta-hg@100: * http://code.google.com/intl/cs/apis/maps/documentation/geocoding/#XMLParsing franta-hg@100: */ franta-hg@100: DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); franta-hg@100: Document d = db.parse(sestavURL(adresa)); franta-hg@100: NodeList mista = d.getElementsByTagName("location"); franta-hg@100: Node misto = mista.item(0); franta-hg@100: NodeList potomci = misto.getChildNodes(); franta-hg@100: String delka = null; franta-hg@100: String sirka = null; franta-hg@100: for (int i = 0; i < potomci.getLength(); i++) { franta-hg@100: Node p = potomci.item(i); franta-hg@100: System.out.println("XML:" + p.getNodeName() + "|" + p.getTextContent()); franta-hg@100: if ("lat".equals(p.getNodeName())) { franta-hg@100: sirka = p.getTextContent(); franta-hg@100: } franta-hg@100: if ("lng".equals(p.getNodeName())) { franta-hg@100: delka = p.getTextContent(); franta-hg@100: } franta-hg@100: } franta-hg@100: franta-hg@100: if (sirka == null || delka == null) { franta-hg@100: log.log(Level.WARNING, "Selhalo zjišťování souřadnic – šířka nebo délka jsou null – pro adresu: " + adresa); franta-hg@100: return null; franta-hg@100: } else { franta-hg@100: return new Souradnice(Double.parseDouble(sirka), Double.parseDouble(delka)); franta-hg@100: } franta-hg@100: } catch (Exception e) { franta-hg@100: log.log(Level.WARNING, "Selhalo zjišťování souřadnic pro adresu: " + adresa, e); franta-hg@100: return null; franta-hg@100: } franta-hg@100: } franta-hg@100: franta-hg@100: private static String sestavURL(String adresa) throws UnsupportedEncodingException { franta-hg@100: return "http://maps.google.com/maps/api/geocode/xml?sensor=false&address=" + URLEncoder.encode(adresa, "UTF-8"); franta-hg@100: } franta-hg@100: franta-hg@100: public class Souradnice { franta-hg@100: franta-hg@100: private double sirka; franta-hg@100: private double delka; franta-hg@100: franta-hg@100: @Override franta-hg@100: public String toString() { franta-hg@100: return "šířka = " + sirka + "; délka = " + delka + ";"; franta-hg@100: } franta-hg@100: franta-hg@100: public Souradnice(double sirka, double delka) { franta-hg@100: this.sirka = sirka; franta-hg@100: this.delka = delka; franta-hg@100: } franta-hg@100: franta-hg@100: public String getLoc() { franta-hg@100: return "Loc: " + sirka + ", " + delka; franta-hg@100: } franta-hg@100: franta-hg@100: public double getDelka() { franta-hg@100: return delka; franta-hg@100: } franta-hg@100: franta-hg@100: public double getSirka() { franta-hg@100: return sirka; franta-hg@100: } franta-hg@100: franta-hg@100: public void setDelka(double delka) { franta-hg@100: this.delka = delka; franta-hg@100: } franta-hg@100: franta-hg@100: public void setSirka(double sirka) { franta-hg@100: this.sirka = sirka; franta-hg@100: } franta-hg@100: } franta-hg@100: }