java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/Geo.java
changeset 100 01be78803f73
     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 +}