ジオコーダってのは、住所から緯度経度に変換するアレ。

たとえば、名古屋城の緯度経度を求める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

Ref. 次世代地図サービス ALPSLAB base

tags: zlashdot Java ALPSLAB Geocoding

Posted by NI-Lab. (@nilab)