読者です 読者をやめる 読者になる 読者になる

(O+P)ut

習うより慣れろ、Practice makes perfect。この言葉をモットーに、Slerで働く若手インフラエンジニアが、学んだ知識を【 (O+P)ut = OutPut 】していく場です。

【Java】JSONで標高をゲットしてみる

大学から北野天満宮にチャリ移動をした時に,行きはきつくて帰りは楽だった気がしたので標高を取得してどんなもんか確認してみたのでそれらに関してまとめます.
標高API - 地理院地図に公開されているAPIを使ってみます.形式はJSONでした.
JavaJSONを使うために,
JacksonDownload - FasterXML Wikiからjarファイルをゲットしました.
この3つのjarファイル

  • jackson-core
  • jackson-databind
  • jackson-annotations

をゲットすればいいです(coreとdatabindだけで今回のプログラムは動きます).
f:id:mtiit:20150305142522p:plainのように,Mavenとかがなくても3つ全てダウンロードできる.

このjarファイルにパスを通して,標高をゲットしてみます.

コードはこんな感じ.

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部分を泥臭く消しています..*2

スタートとゴールの間を100で刻んで取得した標高はこんな感じ
f:id:mtiit:20150305143628p:plain
やっぱりちょっと標高高いんですね...疲れたのも気のせいじゃなかったみたいです.お疲れさまでした...

*1:経緯度はGoogleMapで右クリックをすれば「この場所について」でその地点の経緯度が見れます.プログラムで取得する方法も検討してみよう...

*2:ここは最初から消せないんですかね