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