ジオコーダってのは、住所から緯度経度に変換するアレ。
たとえば、名古屋城の緯度経度を求めるURLはこんな感じ。
「名古屋城」はUTF-8でエンコーディングしている。
http://base.alpslab.jp/position.rb?adr=%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%9F%8E
返ってくるXMLがコレ。
<?xml version="1.0" encoding="UTF-8"?>
<result>
<coordinates>35/10/56.463,136/54/7.733</coordinates>
<scale>25000</scale>
</result>
Javaから使ってみるサンプルコード。
XMLの処理部分は2パターン作ってみた。
import java.net.*;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class AlpslabBaseGeocoder {
public static void main(String[] args) throws Exception {
String adr = "名古屋城";
System.out.println("XPath: " + getPositionByXPath(adr));
System.out.println("DOM: " + getPositionByDom(adr));
}
private static Document getDocument(String adr) throws Exception {
String url =
"http://base.alpslab.jp/position.rb?adr=" +
URLEncoder.encode(adr, "UTF-8");
System.out.println("url=" + url);
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbfactory.newDocumentBuilder();
Document doc = db.parse(url);
return doc;
}
public static String getPositionByXPath(String adr) throws Exception {
Document doc = getDocument(adr);
XPath xpath = XPathFactory.newInstance().newXPath();
String pos = xpath.evaluate("result/coordinates", doc);
return pos;
}
public static String getPositionByDom(String adr) throws Exception {
Document doc = getDocument(adr);
NodeList nodes = doc.getElementsByTagName("coordinates");
Node node = nodes.item(0);
String pos = node.getFirstChild().getNodeValue();
return pos;
}
}
サンプルの実行結果
url=http://base.alpslab.jp/position.rb?adr=%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%9F%8E
XPath: 35/10/56.463,136/54/7.733
url=http://base.alpslab.jp/position.rb?adr=%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%9F%8E
DOM: 35/10/56.463,136/54/7.733
tags: zlashdot Java ALPSLAB Geocoding
Posted by NI-Lab. (@nilab)