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-- |
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 |
} |