1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/Geo.java Wed Apr 14 00:12:32 2010 +0200
1.3 @@ -0,0 +1,102 @@
1.4 +package cz.frantovo.nekurak.ejb;
1.5 +
1.6 +import java.io.UnsupportedEncodingException;
1.7 +import java.net.URLEncoder;
1.8 +import java.util.logging.Level;
1.9 +import java.util.logging.Logger;
1.10 +import javax.xml.parsers.DocumentBuilder;
1.11 +import javax.xml.parsers.DocumentBuilderFactory;
1.12 +import org.w3c.dom.Document;
1.13 +import org.w3c.dom.Node;
1.14 +import org.w3c.dom.NodeList;
1.15 +
1.16 +/**
1.17 + * TODO: přesunout jinam a převést na EJB.
1.18 + * @author fiki
1.19 + */
1.20 +public class Geo {
1.21 +
1.22 + private static final Logger log = Logger.getLogger(Geo.class.getSimpleName());
1.23 +
1.24 + /**
1.25 + * Převede poštovní adresu na zeměpisné souřadnice.
1.26 + * @param adresa
1.27 + * @return souřadnice k dané adrese nebo null, v případě chyby.
1.28 + */
1.29 + public Souradnice getSouradnice(String adresa) {
1.30 + try {
1.31 +
1.32 + /**
1.33 + * TODO: naprosto zprasené → předělat →
1.34 + * http://code.google.com/intl/cs/apis/maps/documentation/geocoding/#XMLParsing
1.35 + */
1.36 + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
1.37 + Document d = db.parse(sestavURL(adresa));
1.38 + NodeList mista = d.getElementsByTagName("location");
1.39 + Node misto = mista.item(0);
1.40 + NodeList potomci = misto.getChildNodes();
1.41 + String delka = null;
1.42 + String sirka = null;
1.43 + for (int i = 0; i < potomci.getLength(); i++) {
1.44 + Node p = potomci.item(i);
1.45 + System.out.println("XML:" + p.getNodeName() + "|" + p.getTextContent());
1.46 + if ("lat".equals(p.getNodeName())) {
1.47 + sirka = p.getTextContent();
1.48 + }
1.49 + if ("lng".equals(p.getNodeName())) {
1.50 + delka = p.getTextContent();
1.51 + }
1.52 + }
1.53 +
1.54 + if (sirka == null || delka == null) {
1.55 + log.log(Level.WARNING, "Selhalo zjišťování souřadnic – šířka nebo délka jsou null – pro adresu: " + adresa);
1.56 + return null;
1.57 + } else {
1.58 + return new Souradnice(Double.parseDouble(sirka), Double.parseDouble(delka));
1.59 + }
1.60 + } catch (Exception e) {
1.61 + log.log(Level.WARNING, "Selhalo zjišťování souřadnic pro adresu: " + adresa, e);
1.62 + return null;
1.63 + }
1.64 + }
1.65 +
1.66 + private static String sestavURL(String adresa) throws UnsupportedEncodingException {
1.67 + return "http://maps.google.com/maps/api/geocode/xml?sensor=false&address=" + URLEncoder.encode(adresa, "UTF-8");
1.68 + }
1.69 +
1.70 + public class Souradnice {
1.71 +
1.72 + private double sirka;
1.73 + private double delka;
1.74 +
1.75 + @Override
1.76 + public String toString() {
1.77 + return "šířka = " + sirka + "; délka = " + delka + ";";
1.78 + }
1.79 +
1.80 + public Souradnice(double sirka, double delka) {
1.81 + this.sirka = sirka;
1.82 + this.delka = delka;
1.83 + }
1.84 +
1.85 + public String getLoc() {
1.86 + return "Loc: " + sirka + ", " + delka;
1.87 + }
1.88 +
1.89 + public double getDelka() {
1.90 + return delka;
1.91 + }
1.92 +
1.93 + public double getSirka() {
1.94 + return sirka;
1.95 + }
1.96 +
1.97 + public void setDelka(double delka) {
1.98 + this.delka = delka;
1.99 + }
1.100 +
1.101 + public void setSirka(double sirka) {
1.102 + this.sirka = sirka;
1.103 + }
1.104 + }
1.105 +}