ユーザー定義APIを使用する
はじめに
本記事ではTellusのJupyterLabを使って空間データを保存する方法と保存された空間データを取得する方法を紹介します。APIの詳細についてはこちらをご覧ください。
APIでGeoJSONファイルを読み込む/保存する
以下のサンプルをテキストエディタでsample.geojsonとして保存し、Tellus OSで読み込みます。
{ "type": "Polygon", "coordinates": [ [ [139.72659302176908,35.657491515138794], [139.72659302176908,35.673223047495064], [139.74787903251126,35.673223047495064], [139.74787903251126,35.657491515138794], [139.72659302176908,35.657491515138794] ] ] }
Tellus OSでは多角形ツールを使用してGeoJSONファイルを作成することができます。作成したファイルはそのままダウンロードすることができますが、APIを使用してこのファイルを取得することができます。
JupyterLabでこのGeoJSONファイルを取得するには、Tellus公式ユーザーAPIを使います。
APIについては開発ドキュメントをご確認ください。▼ Tellus公式ユーザーAPI
https://www.tellusxdp.com/ja/market-service/service/guide/dev-docs/20200219_000200.html
https://api.tellusxdp.com/v2/geojson-files
import json, requests, urllib.parse TOKEN = "ここには自分のアカウントのトークンを貼り付ける" URL = "https://api.tellusxdp.com/v2/geojson-files/" def get(id=""): headers = { "Authorization": "Bearer " + TOKEN } r = requests.get(URL + id + "/", headers=headers) return r.json() geojsons = get() print(geojsons)
関数を実行すると、TellusにアップロードしたGeoJSONファイルに関する情報(ID、ファイル名、アップされた日時やTellus OS上で表示する際の透過率など)のリストを取得できます。 ここで取得したID(2a0cab31-3032-4f51-8d68-26491675e82b、この値は変化します)を使ってGeoJSONファイルの中身を呼び出します。
geojson = get(geojsons["results"][0]["id"]) r = requests.get(geojson["url"]) print(r.json())
作成したsample.geojsonと同じ内容が表示されているのがわかるかと思います。また、JupyterLabからTellus OSへGeoJSONファイルを登録することも可能です。
from io import StringIO UPLOAD_URL = URL + "upload/" def post(option,files): headers = { 'Authorization': 'Bearer ' + TOKEN, } r = requests.post(UPLOAD_URL, headers=headers, data=option, files=files) print(r.status_code) print(r.content) geojson = { "type": "Point", "coordinates": [140.59194660134384, 40.73440677988237] } data = StringIO(json.dumps(geojson)) files = { "file": ("test", data, "application/json"), } option = { "options": "", "opacity": 0.1, "window_number": 1, "is_shape": False, "is_visible": True, } post(option, files)
図形として登録するにはpropertiesにdrawtypeを指定する必要があることに注意してください。drawtypeはmarker, rectangle, circle, polygon, polylineのいずれかを指定してます。
登録に成功すると、GeoJSONファイル登録時のIDが返却されます。この状態でTellus OSを開いてみると(既に開いた状態であった方はリロードが必要です)、APIで登録したGeoJSONファイルの内容が表示されます(図形の名前はfiles内で定義します)。
再度リストを取得すると、新しく登録したGeoJSONファイルの情報が含まれていることを確認できます。
geojsons = get() print(geojsons)
count数が1から2になっていることが確認できます。さらに、登録したGeoJSONファイルを削除することもできます。
def delete(Id): headers = { "Authorization": "Bearer " + TOKEN } r = requests.delete(URL+Id+"/", headers=headers) print(r.status_code) delete(Id) ## すべて消したい場合 #ids = [results['id'] for results in geojsons['results']] #for id in ids: # delete(id) print(get())
今度は2つ登録されていたGeoJSONファイルが1つに減っていることが確認できます。
以上がTellusのJupyterLabを使って空間データを保存する方法と、保存された空間データを取得/消去する方法でした。
空間データを保存/取得することで、特定領域の情報を抽出したりマスキングするのに利用することができます。これは雲や影など、障害物が映り込んでしまう衛星データを扱う上で必要なものです。
さらに、対象物の座標が判明していれば、ある範囲の中にその対象物がどのくらい含まれているかもわかります。例えば、公衆トイレの場所の緯度経度を取り込み、市町村区域のgeojson(またはshape)ファイルも取り込めば、各市町村のポリゴン内に登録したポイント(トイレ座標)の情報が含まれるか否かで、その個数を調べることもできます。
import json, requests, urllib.parse TOKEN = "ここには自分のアカウントのトークンを貼り付ける" URL = "https://api.tellusxdp.com/v2/geojson-files/" def get(id=""): headers = { "Authorization": "Bearer " + TOKEN } r = requests.get(URL + id + "/", headers=headers) return r.json() geojsons = get() print(geojsons) geojson = get(geojsons["results"][-1]["id"]) print(get(geojson["url"])) from io import StringIO UPLOAD_URL = URL + "upload/" def post(option,files): headers = { 'Authorization': 'Bearer ' + TOKEN, } r = requests.post(UPLOAD_URL, headers=headers, data=option, files=files) print(r.status_code) print(r.content) geojson = { "type": "Point", "coordinates": [140.59194660134384, 40.73440677988237] } data = StringIO(json.dumps(geojson)) files = { "file": ("test", data, "application/json"), } option = { "options": "", "opacity": 0.1, "window_number": 1, "is_shape": False, "is_visible": True, } post(option, files) geojsons = get() print(geojsons) def delete(Id): headers = { "Authorization": "Bearer " + TOKEN } r = requests.delete(URL+Id+"/", headers=headers) print(r.status_code) delete(Id) ## すべて消したい場合 #ids = [results['id'] for results in geojsons['results']] #for id in ids: # delete(id)