java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/ejb/Geo.java
author František Kučera <franta-hg@frantovo.cz>
Wed Apr 14 00:12:32 2010 +0200 (2010-04-14)
changeset 100 01be78803f73
permissions -rw-r--r--
Webové služby, zjišťování souřadnic podniků.
     1 package cz.frantovo.nekurak.ejb;
     2 
     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;
    12 
    13 /**
    14  * TODO: přesunout jinam a převést na EJB.
    15  * @author fiki
    16  */
    17 public class Geo {
    18 
    19     private static final Logger log = Logger.getLogger(Geo.class.getSimpleName());
    20 
    21     /**
    22      * Převede poštovní adresu na zeměpisné souřadnice.
    23      * @param adresa
    24      * @return souřadnice k dané adrese nebo null, v případě chyby.
    25      */
    26     public Souradnice getSouradnice(String adresa) {
    27 	try {
    28 
    29 	    /**
    30 	     * TODO: naprosto zprasené → předělat →
    31 	     * http://code.google.com/intl/cs/apis/maps/documentation/geocoding/#XMLParsing
    32 	     */
    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();
    38 	    String delka = null;
    39 	    String sirka = null;
    40 	    for (int i = 0; i < potomci.getLength(); i++) {
    41 		Node p = potomci.item(i);
    42 		System.out.println("XML:" + p.getNodeName() + "|" + p.getTextContent());
    43 		if ("lat".equals(p.getNodeName())) {
    44 		    sirka = p.getTextContent();
    45 		}
    46 		if ("lng".equals(p.getNodeName())) {
    47 		    delka = p.getTextContent();
    48 		}
    49 	    }
    50 
    51 	    if (sirka == null || delka == null) {
    52 		log.log(Level.WARNING, "Selhalo zjišťování souřadnic – šířka nebo délka jsou null – pro adresu: " + adresa);
    53 		return null;
    54 	    } else {
    55 		return new Souradnice(Double.parseDouble(sirka), Double.parseDouble(delka));
    56 	    }
    57 	} catch (Exception e) {
    58 	    log.log(Level.WARNING, "Selhalo zjišťování souřadnic pro adresu: " + adresa, e);
    59 	    return null;
    60 	}
    61     }
    62 
    63     private static String sestavURL(String adresa) throws UnsupportedEncodingException {
    64 	return "http://maps.google.com/maps/api/geocode/xml?sensor=false&address=" + URLEncoder.encode(adresa, "UTF-8");
    65     }
    66 
    67     public class Souradnice {
    68 
    69 	private double sirka;
    70 	private double delka;
    71 
    72 	@Override
    73 	public String toString() {
    74 	    return "šířka = " + sirka + "; délka = " + delka + ";";
    75 	}
    76 
    77 	public Souradnice(double sirka, double delka) {
    78 	    this.sirka = sirka;
    79 	    this.delka = delka;
    80 	}
    81 
    82 	public String getLoc() {
    83 	    return "Loc: " + sirka + ", " + delka;
    84 	}
    85 
    86 	public double getDelka() {
    87 	    return delka;
    88 	}
    89 
    90 	public double getSirka() {
    91 	    return sirka;
    92 	}
    93 
    94 	public void setDelka(double delka) {
    95 	    this.delka = delka;
    96 	}
    97 
    98 	public void setSirka(double sirka) {
    99 	    this.sirka = sirka;
   100 	}
   101     }
   102 }