Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

of

iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 1 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 2 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 3 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 4 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 5 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 6 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 7 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 8 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 9 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 10 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 11 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 12 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 13 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 14 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 15 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 16 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 17 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 18 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 19 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 20 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 21 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 22 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 23 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 24 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 25 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 26 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 27 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 28 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 29 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 30 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 31 iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 Slide 32
Upcoming SlideShare
iTamabi 13  第3回:iPhoneアプリ実践開発講座 1 画像ファイルの読み込み 画像でアニメーションを作成する
Next
Download to read offline and view in fullscreen.

1 Like

Share

Download to read offline

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

Download to read offline

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

  1. 1. iTamabi 13  第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得 2013年11月25日 多摩美術大学 PBL科目 担当:田所 淳
  2. 2. 今日の内容 ‣ 今回から、前回提出のアプリケーションのスケッチに役に立つ 内容を紹介していく ‣ 今回は、衛星の位置から国名などの情報を取得する方法
  3. 3. ジオコーディング
  4. 4. ジオコーディング ‣ ジオコーディング(Geocoding)とは? ‣ 住所を地理座標(緯度、経度)に変換する処理 ‣ GoogleからAPIが提供されている ‣ https://developers.google.com/maps/documentation/ geocoding/?hl=ja
  5. 5. ジオコーディング ‣ Google Geocode API
  6. 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. 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. 8. ジオコーディング ‣ 実験! ‣ 「address=」以降の住所を多摩美八王子キャンパスの住所に 書き換えてみる http://maps.googleapis.com/maps/api/geocode/json?address=東京都八王子市 1723&sensor=false 水2-
  9. 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. 10. ジオコーディング ‣ 返信されたJSON形式のデータを読み解いてみる ‣ どんな内容が入っているのか?
  11. 11. ジオコーディング ‣ ジオコーディングで、住所から緯度と経度が取得できることが わかった ! ‣ しかし、今回やりたいのはこの逆 ‣ 緯度と経度から、住所を取得する ! ‣ 逆ジオコーディング!
  12. 12. ジオコーディング ‣ 逆ジオコーディングの使いかた ‣ 例えば、Google Geocoding APIの仕事では http://maps.googleapis.com/maps/api/geocode/json? latlng=40.714224,-73.961452&sensor=false
  13. 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. 14. ジオコーディング ‣ 実験! ‣ いろいろな場所の緯度経度を、Geocodeingで調べる ‣ そこで得られた、緯度経度で、逆Geocodingで元の住所が調べ られるか確認
  15. 15. ジオコーディング ‣ 例えば、先程取得した多摩美の緯度経度 http://maps.googleapis.com/maps/api/geocode/json? latlng=35.6133349802915,139.3518454802915&sensor=false
  16. 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. 17. ジオコーディングとARTSAT APIを組合せる
  18. 18. ジオコーディングとARTSAT APIを組合せる ‣ では、いよいよARTSAT APIとGeocodingを組み合わせてみる ‣ 今回は、ARTSAT Web APIと、Google Geocoding APIを使う
  19. 19. ジオコーディングとARTSAT APIを組合せる ‣ まず初めに、ARTSAT Web APIで、緯度経度を取得する ‣ 以前作成したサンプルをそのまま活用
  20. 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. 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. 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. 23. ジオコーディングとARTSAT APIを組合せる ‣ 実行結果
  24. 24. ジオコーディングとARTSAT APIを組合せる ‣ 取得した、緯度と経度を使用して、逆Geocodinに挑戦!
  25. 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. 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. 27. ジオコーディングとARTSAT APIを組合せる ‣ testApp.mm //-------------------------------------------------------------void testApp::update(){ ! } ! //-------------------------------------------------------------void testApp::draw(){ ofSetColor(63); // JSONデータを画面に表示 ofDrawBitmapString(geocodingResponse.getRawString(), 20, 20); } ! (…後略)
  28. 28. ジオコーディングとARTSAT APIを組合せる ‣ 実行結果
  29. 29. ジオコーディングとARTSAT APIを組合せる ‣ GeocodingのJSONデータをパース(解析)してみる ‣ 例として、住所を抽出してみる ! ‣ testApp.mm の draw() を変更
  30. 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. 31. ジオコーディングとARTSAT APIを組合せる ‣ 実行結果
  32. 32. ジオコーディングとARTSAT APIを組合せる ‣ JSONデータから必要な情報を取り出せば、いろいろな地理情 報がとりだし可能!!
  • TakeshiWatanabe2

    Nov. 25, 2013

Views

Total views

2,172

On Slideshare

0

From embeds

0

Number of embeds

363

Actions

Downloads

10

Shares

0

Comments

0

Likes

1

×