java

 

javaでジオコーディング

Java API for Google geocoderを使って簡単にjavaで緯度・経度を取得します。サーバサイドからgoogleジオコーディングする際は自力でコーディングせず、是非このライブラリを使って楽しましょう!

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

googleのgeocoding apiですが、実はgoogleが公式にjavaのライブラリを提供しています。

Java API for Google geocoder

超便利で簡単です。

google公式のライブラリという事で、安心感も抜群です。

xmlやjsonをパースするのをやめて、これを使いましょう!

公式に書いてある通りにpom.xmlを編集してdependenciesを更新します。

<dependencies>
  <dependency>
    <groupId>com.google.code.geocoder-java</groupId>
    <artifactId>geocoder-java</artifactId>
    <version>0.11</version>
  </dependency>
  <!-- ... -->
</dependencies>
import java.util.List;

import com.google.code.geocoder.Geocoder;
import com.google.code.geocoder.GeocoderRequestBuilder;
import com.google.code.geocoder.model.GeocodeResponse;
import com.google.code.geocoder.model.GeocoderGeometry;
import com.google.code.geocoder.model.GeocoderRequest;
import com.google.code.geocoder.model.GeocoderResult;
import com.google.code.geocoder.model.GeocoderStatus;
import com.google.code.geocoder.model.LatLng;

public class GoogleGeocoder {

    public static void main(String[] args) {
        LatLng latlng = geocode("皇居");
        System.out.println(latlng.getLat() + "/" + latlng.getLng());
    }

    public static LatLng geocode(String address) {
        final Geocoder geocoder = new Geocoder();
        GeocoderRequest req = new GeocoderRequestBuilder().setAddress(address)
                .setLanguage("ja").getGeocoderRequest();
        GeocodeResponse res = geocoder.geocode(req);
        GeocoderStatus status = res.getStatus();
        switch (status) {
        case ZERO_RESULTS:
            return null;
        case OVER_QUERY_LIMIT:
        case REQUEST_DENIED:
        case INVALID_REQUEST:
        case UNKNOWN_ERROR:
        case ERROR:
            throw new RuntimeException(status.value());
        default:
        }

        List<GeocoderResult> results = res.getResults();
        for (GeocoderResult result : results) {
            GeocoderGeometry geometry = result.getGeometry();
            return geometry.getLocation();
        }
        return null;
    }
}

タイプセーフなので簡単にコードが書けます。簡単過ぎます。

jsonやxmlで局所的に値を取得する方がリソース消費・パフォーマンス的にもいいかもしれません。

しかし、geocoding apiは1秒間に1リクエスト、1日に最大2500件という制限があるので、パースするメリットは薄いと思います。

treeおすすめの書籍です!
【送料無料】実践ハイパフォ-マンスMySQL第2版

【送料無料】実践ハイパフォ-マンスMySQL第2版
価格:4,830円(税込、送料別)

【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド

【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド
価格:3,465円(税込、送料別)

【送料無料】基礎からのMySQL改訂版

【送料無料】基礎からのMySQL改訂版
価格:3,129円(税込、送料別)

◯ 広告