私ごとですが、先日北野天満宮に自転車で移動をした際に、行きと帰りで勾配に差があったように感じたので、標高を取得して確認してみた際の備忘録です。
標高APIからJSONで標高取得
標高API - 地理院地図に公開されているAPIを使ってみます。形式はJSONです。
まず、JavaでJSONを使うために
http://wiki.fasterxml.com/JacksonDownloadからjarファイルをゲットしました。
この3つのjarファイル
- jackson-core
- jackson-databind
- jackson-annotations
をゲットすればいいです(coreとdatabindだけで今回のプログラムは動きます)。
のように、Maven等がなくても3つ全てダウンロードできました。
あとは、このjarファイルにパスを通して、標高を取得しました。
実際のコード
Javaのコードは以下となります。
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class UseJson { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); URL apiUrl=null; double start_lon =135.779286; double start_lat = 35.028779; // double stop_lon = 135.735928; // double stop_lat = 35.028131; String json2 = null; String json = null; try { String url_base = "http://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?"; String url_lon = "lon="+ Double.toString(start_lon); String url_lat = "lat="+Double.toString(start_lat); String url = url_base+ url_lon+"&"+url_lat+"&outtype=JSON"; apiUrl = new URL(url); BufferedReader reader = new BufferedReader(new InputStreamReader(apiUrl.openStream(),"UTF-8")); String line = null; while((line = reader.readLine()) != null){ json+=line; } reader.close(); json2 = json.substring(4,json.length()); JsonNode rootNode = mapper.readTree(json2); for(JsonNode node:rootNode){ System.out.println(node); } } catch (IOException e) { e.printStackTrace(); } } }
このサンプルの出力結果は
55.8 "5m(レーザ)"
といった形式で出力されます。
JSON形式の標高値elevationが上でいう55.8 です。ちなみに、経緯度は手動で入れてます...*1
ちなみに、プログラムの
json2 = json.substring(4,json.length());
はjsonにnull{"elevation":55.8,"hsrc":"5m\uff08\u30ec\u30fc\u30b6\uff09"}が入っていてnull部分を泥臭く消しています。
スタートとゴールの間を100で刻んで取得した標高は以下のようになりました。
やっぱり少し坂のようになっていたことが確認できました。以上、同様のデータを取得する際はご参考ください。
*1:経緯度はGoogleMapで右クリックをすれば「この場所について」でその地点の経緯度が見れました