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