Your SlideShare is downloading. ×
  • Like
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得

  • 976 views
Published

 

Published in Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
976
On SlideShare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
6
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. iTamabi 13  第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 2013年11月25日 多摩美術大学 PBL科目 担当:田所 淳
  • 2. 今日の内容 ‣ 今回から、前回提出のアプリケーションのスケッチに役に立つ 内容を紹介していく ‣ 今回は、衛星の位置から国名などの情報を取得する方法
  • 3. ジオコーディング
  • 4. ジオコーディング ‣ ジオコーディング(Geocoding)とは? ‣ 住所を地理座標(緯度、経度)に変換する処理 ‣ GoogleからAPIが提供されている ‣ https://developers.google.com/maps/documentation/ geocoding/?hl=ja
  • 5. ジオコーディング ‣ Google Geocode API
  • 6. ジオコーディング ‣ ジオコーディングを使ってみる ‣ Google APIに載っている例 ‣ 住所「1600 Amphitheatre Parkway, Mountain View, CA」の 情報を取得 http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre +Parkway,+Mountain+View,+CA&sensor=false
  • 7. ジオコーディング ‣ 以下のようなJSON形式のファイルが取得される { "results" : [ { "address_components" : [ { "long_name" : "1600", "short_name" : "1600", "types" : [ "street_number" ] }, { "long_name" : "Amphitheatre Parkway", "short_name" : "Amphitheatre Pkwy", "types" : [ "route" ] }, { "long_name" : "Mountain View", "short_name" : "Mountain View", "types" : [ "locality", "political" ] }, { "long_name" : "California", "short_name" : "CA", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "United States", "short_name" : "US", "types" : [ "country", "political" ] }, { "long_name" : "94043", "short_name" : "94043", "types" : [ "postal_code" ] } ], "formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA", "geometry" : {
  • 8. ジオコーディング ‣ 実験! ‣ 「address=」以降の住所を多摩美八王子キャンパスの住所に 書き換えてみる http://maps.googleapis.com/maps/api/geocode/json?address=東京都八王子市 1723&sensor=false 水2-
  • 9. ジオコーディング ‣ 多摩美の情報が正しく返された! { "results" : [ { "address_components" : [ { "long_name" : "1723", "short_name" : "1723", "types" : [ "sublocality_level_4", "sublocality", "political" ] }, { "long_name" : "2 Chome", "short_name" : "2 Chome", "types" : [ "sublocality_level_2", "sublocality", "political" ] }, { "long_name" : "Yarimizu", "short_name" : "Yarimizu", "types" : [ "sublocality_level_1", "sublocality", "political" ] }, { "long_name" : "Hachioji", "short_name" : "Hachioji", "types" : [ "locality", "political" ] }, { "long_name" : "Tokyo", "short_name" : "Tokyo", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "Japan", "short_name" : "JP", "types" : [ "country", "political" ] } ], "formatted_address" : "2 Chome-1723 Yarimizu, Hachioji, Tokyo, Japan", "geometry" : {
  • 10. ジオコーディング ‣ 返信されたJSON形式のデータを読み解いてみる ‣ どんな内容が入っているのか?
  • 11. ジオコーディング ‣ ジオコーディングで、住所から緯度と経度が取得できることが わかった ! ‣ しかし、今回やりたいのはこの逆 ‣ 緯度と経度から、住所を取得する ! ‣ 逆ジオコーディング!
  • 12. ジオコーディング ‣ 逆ジオコーディングの使いかた ‣ 例えば、Google Geocoding APIの仕事では http://maps.googleapis.com/maps/api/geocode/json? latlng=40.714224,-73.961452&sensor=false
  • 13. ジオコーディング ‣ 実行結果: 住所が出てくる! { "results" : [ { "address_components" : [ { "long_name" : "277", "short_name" : "277", "types" : [ "street_number" ] }, { "long_name" : "Bedford Avenue", "short_name" : "Bedford Ave", "types" : [ "route" ] }, { "long_name" : "Williamsburg", "short_name" : "Williamsburg", "types" : [ "neighborhood", "political" ] }, { "long_name" : "Brooklyn", "short_name" : "Brooklyn", "types" : [ "sublocality", "political" ] }, { "long_name" : "Kings", "short_name" : "Kings", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "New York", "short_name" : "NY", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "United States", "short_name" : "US",
  • 14. ジオコーディング ‣ 実験! ‣ いろいろな場所の緯度経度を、Geocodeingで調べる ‣ そこで得られた、緯度経度で、逆Geocodingで元の住所が調べ られるか確認
  • 15. ジオコーディング ‣ 例えば、先程取得した多摩美の緯度経度 http://maps.googleapis.com/maps/api/geocode/json? latlng=35.6133349802915,139.3518454802915&sensor=false
  • 16. ジオコーディング ‣ 実行結果 { "results" : [ { "address_components" : [ { "long_name" : "10", "short_name" : "10", "types" : [ "sublocality_level_5", "sublocality", "political" ] }, { "long_name" : "1923", "short_name" : "1923", "types" : [ "sublocality_level_4", "sublocality", "political" ] }, { "long_name" : "Yarimizu", "short_name" : "Yarimizu", "types" : [ "sublocality_level_1", "sublocality", "political" ] }, { "long_name" : "Hachioji", "short_name" : "Hachioji", "types" : [ "locality", "political" ] }, { "long_name" : "Tokyo", "short_name" : "Tokyo", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "Japan", "short_name" : "JP", "types" : [ "country", "political" ] } ], "formatted_address" : "1923-10 Yarimizu, Hachioji, Tokyo, Japan", "geometry" : {
  • 17. ジオコーディングとARTSAT APIを組合せる
  • 18. ジオコーディングとARTSAT APIを組合せる ‣ では、いよいよARTSAT APIとGeocodingを組み合わせてみる ‣ 今回は、ARTSAT Web APIと、Google Geocoding APIを使う
  • 19. ジオコーディングとARTSAT APIを組合せる ‣ まず初めに、ARTSAT Web APIで、緯度経度を取得する ‣ 以前作成したサンプルをそのまま活用
  • 20. ジオコーディングとARTSAT APIを組合せる ‣ testApp.h #pragma once ! #include #include #include #include ! "ofMain.h" "ofxiOS.h" "ofxiOSExtras.h" "ofxJSONElement.h" class testApp : public ofxiOSApp{ public: void void void void setup(); update(); draw(); exit(); void void void void void touchDown(ofTouchEventArgs & touch); touchMoved(ofTouchEventArgs & touch); touchUp(ofTouchEventArgs & touch); touchDoubleTap(ofTouchEventArgs & touch); touchCancelled(ofTouchEventArgs & touch); void void void void lostFocus(); gotFocus(); gotMemoryWarning(); deviceOrientationChanged(int newOrientation); ofxJSONElement response; string responseStr; };
  • 21. ジオコーディングとARTSAT APIを組合せる ‣ testApp.mm #include "testApp.h" ! ! //-------------------------------------------------------------void testApp::setup(){ ofBackground(224); ofSetFrameRate(30); // ARTSAT WebAPIにアクセスしてJSONデータを取得 bool result = response.open("http://api.artsat.jp/web/v2/invader/sensor_data.json"); // 取得結果をコンソールに出力 if (!result) { // もし取得できなかったら、エラーを出力 cout << "faild to get JSON data!" << endl; } else { // 取得に成功したら、JSONデータを出力 cout << response.getRawString() << endl; } } ! //-------------------------------------------------------------void testApp::update(){ ! }
  • 22. ジオコーディングとARTSAT APIを組合せる ‣ testApp.mm ! //-------------------------------------------------------------void testApp::draw(){ ofSetColor(63); int lineHeigt = 15; // JSONデータをパースして、画面に表示 string available_time = response["results"][0] ["closest_available_time_iso_string"].asString(); ofDrawBitmapString(available_time, 10, lineHeigt*1); float lat = response["results"][0]["sensors"]["lat"]["value"].asFloat(); ofDrawBitmapString("lat = " + ofToString(lat,12), 10, lineHeigt*2); float lon = response["results"][0]["sensors"]["lon"]["value"].asFloat(); ofDrawBitmapString("lon = " + ofToString(lon,12), 10, lineHeigt*3); } ! (…後略)
  • 23. ジオコーディングとARTSAT APIを組合せる ‣ 実行結果
  • 24. ジオコーディングとARTSAT APIを組合せる ‣ 取得した、緯度と経度を使用して、逆Geocodinに挑戦!
  • 25. ジオコーディングとARTSAT APIを組合せる ‣ testApp.h #pragma once #include "ofMain.h" #include "ofxiOS.h" #include "ofxiOSExtras.h" #include "ofxJSONElement.h" ! class testApp : public ofxiOSApp{ public: void setup(); void update(); void draw(); void exit(); void void void void void touchDown(ofTouchEventArgs & touch); touchMoved(ofTouchEventArgs & touch); touchUp(ofTouchEventArgs & touch); touchDoubleTap(ofTouchEventArgs & touch); touchCancelled(ofTouchEventArgs & touch); void void void void lostFocus(); gotFocus(); gotMemoryWarning(); deviceOrientationChanged(int newOrientation); ofxJSONElement artsatResponse; ofxJSONElement geocodingResponse; string responseStr; };
  • 26. ジオコーディングとARTSAT APIを組合せる ‣ testApp.mm #include "testApp.h" ! //-------------------------------------------------------------void testApp::setup(){ ofBackground(224); ofSetFrameRate(30); // ARTSAT WebAPIにアクセスしてJSONデータを取得 bool result = artsatResponse.open("http://api.artsat.jp/web/v2/invader/ sensor_data.json"); // 取得結果をコンソールに出力 if (!result) { // もし取得できなかったら、エラーを出力 cout << "faild to get JSON data!" << endl; } else { // Artsat API取得に成功 cout << artsatResponse.getRawString() << endl; // 取得した緯度経度で、逆Geocode float lat = artsatResponse["results"][0]["sensors"]["lat"]["value"].asFloat(); float lon = artsatResponse["results"][0]["sensors"]["lon"]["value"].asFloat(); string url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + ofToString(lat) + "," + ofToString(lon)+"&sensor=false"; bool geoResult = geocodingResponse.open(url); cout << url << endl; } }
  • 27. ジオコーディングとARTSAT APIを組合せる ‣ testApp.mm //-------------------------------------------------------------void testApp::update(){ ! } ! //-------------------------------------------------------------void testApp::draw(){ ofSetColor(63); // JSONデータを画面に表示 ofDrawBitmapString(geocodingResponse.getRawString(), 20, 20); } ! (…後略)
  • 28. ジオコーディングとARTSAT APIを組合せる ‣ 実行結果
  • 29. ジオコーディングとARTSAT APIを組合せる ‣ GeocodingのJSONデータをパース(解析)してみる ‣ 例として、住所を抽出してみる ! ‣ testApp.mm の draw() を変更
  • 30. ジオコーディングとARTSAT APIを組合せる ‣ testApp.mm void testApp::draw(){ ofSetColor(63); // JSONデータ解析して表示 //取得した時間 string available_time = artsatResponse["results"][0] ["closest_available_time_iso_string"].asString(); ofDrawBitmapString(available_time, 20, 20); ! //アドレスを表示 string formatted_address = geocodingResponse["results"][0] ["formatted_address"].asString(); ofDrawBitmapString("ARTSAT is flying here! : ", 20, 40); ofDrawBitmapString(formatted_address, 20, 60); }
  • 31. ジオコーディングとARTSAT APIを組合せる ‣ 実行結果
  • 32. ジオコーディングとARTSAT APIを組合せる ‣ JSONデータから必要な情報を取り出せば、いろいろな地理情 報がとりだし可能!!