3.コードと結果のご紹介
まずバイオームのAPIを利用できるように、TellusMarket上でバイオームAPIを購入しておきます。

購入すると商品ID(PRODUCT ID)が表示されるので、APIを呼び出す際にこちらを利用します。それではバイオームAPIからヌートリアに関する情報を取得してみたいと思います。
まずはじめに、マーケットトークンを発行します。
import requests, datetime, json
import pandas as pd
API_TOKEN = "[あなたのAPIトークン]"
product_id = “[プロダクトID]”
# マーケットトークン有効期限(30分後に設定)
# デフォルトでは5分、最長で60分まで設定可能
expires_at = (datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=+9))) +
datetime.timedelta(minutes=30)).isoformat()
def get_market_token(payload={}):
url = 'https://sdk.tellusxdp.com/api/manager/v2/auth/token/'
headers = {
'Authorization': 'Bearer ' + API_TOKEN,
'Content-type': 'application/json'
}
r = requests.post(url, headers=headers, data=json.dumps(payload))
if r.status_code != 200:
raise ValueError('status error({}).'.format(r.status_code))
return json.loads(r.content)
# マーケットトークンを発行する
ret = get_market_token({ 'product_id': product_id, 'expires_at':expires_at })
token = ret['token']
base_url = ret['base_url']
発行したマーケットトークンを用いてバイオームAPIにアクセスしてみます。
speciesというパラメータに「ヌートリア」のように探したい生き物の名前を指定することで対象の生き物に関するデータだけを取得することができます。詳細はバイオームAPIのドキュメントを参照してください。
# APIのエンドポイント
endpoint = base_url + 'tellus/foreign_species'
# APIトークンをセット
headers = { 'Authorization': 'Bearer ' + token }
params = { 'species': "ヌートリア ", 'sdate': "20190101", 'edate': "20201231" }
r = requests.get(endpoint, params=params, headers=headers)
print(r)
data = json.loads(r.content)
nutrias = pd.DataFrame(data)
nutrias.head()
nutrias.to_csv('./nutrias.csv', index=False)
ヌートリアのデータが取得できたので中身を確認してみます。
import pandas as pd
### Parameters
lat_key = "緯度"
lon_key = "経度"
### Read file
df = pd.read_csv("./nutrias.csv", engine="python").dropna()
df.head()

ヌートリアが撮影された日付や位置情報が格納されていることがわかります。
次にこれらのデータを地図上に表示して、撮影された場所の分布を確認してみます。
import folium
lats = df.latitude
lons = df.longitude
m = folium.Map(
# 北緯 34°41′11″ 東経 135°31′12″
location=[34.4, 135.3],
zoom_start=8,
)
for lat,lon in zip(lats, lons):
folium.Marker(
location=[lat,lon],
popup='Lat: {:.5f} Lon: {:.5f}'.format(lat,lon),
icon=folium.Icon(color='red')
).add_to(m)
m
folium.GeoJson('osaka_river.geojson', name='low_zone',
style_function = lambda x: {
'fillOpacity': 0.5,
'fillColor': 'Green',
'color': 'Blue'
}).add_to(m)
folium.LayerControl().add_to(m) # 地図表示切替ボタン
m

ヌートリアが撮影された場所を見ると、確かに西日本に偏っていることがわかります。
さらに、大阪周辺の河川(木津川・淀川・桂川)のデータを国土数値情報から取得し、地図に重ねてみます。これらの河川を結合したデータを下記の場所に置きましたので適宜利用してください。

平野部を通る淀川や桂川に対して、大阪から奈良にかけての山間地を通る木津川では目撃情報があまりないことがわかります。ヌートリアが寒さに耐性がないという特性から、主に平野部の水辺を好んで生息しているのだと思われます。

さらに、地図上でズームしていくと特定の場所で多く目撃されていることがわかります。今回はその中から「淀川河川敷」と「山田池公園」を対象にその植生をASNARO-1の衛星画像からナチュラルカラー画像を生成して確認してみたいと思います。
まず、ASNARO-1から画像データのリストを取得する関数を定義します。
import os, json, requests, math
from skimage import io
from io import BytesIO
import matplotlib.pyplot as plt
%matplotlib inline
def get_ASNARO_scene(min_lat, min_lon, max_lat, max_lon):
url = "https://gisapi.tellusxdp.com/api/v1/asnaro1/scene" \
+ "?min_lat={}&min_lon={}&max_lat={}&max_lon={}".format(min_lat, min_lon, max_lat, max_lon)
headers = {
"Authorization": "Bearer " + API_TOKEN
}
r = requests.get(url, headers=headers)
return r.json()
scenes = get_ASNARO_scene(
34.85567489,
135.38120896,
34.67871137,
135.69302917
)
def get_asnaro1_blend(productId,zoom, xtile, ytile, opacity=1, r=4, g=3, b=2, rdepth=1, gdepth=1, bdepth=1, preset=None):
url = "https://gisapi.tellusxdp.com/blend/asnaro1/{}/{}/{}/{}.png?opacity={}&r={}&g={}&b={}&rdepth={}&gdepth={}&bdepth={}".format\
(productId, zoom, xtile, ytile, opacity, r, g, b, rdepth, gdepth, bdepth)
if preset is not None:
url += '&preset='+preset
headers = {
"Authorization": "Bearer " + TOKEN
}
r = requests.get(url, headers=headers)
return io.imread(BytesIO(r.content))
それではまず淀川河川敷公園の植生を確認してみます。
ext_scene = scenes[4]
img_thumbs = io.imread(ext_scene['thumbs_url'])
io.imshow(img_thumbs)
# 淀川河川敷公園
xtile = 14364
ytile = 6500
z = 14
ext_scene_img_natural = get_asnaro1_blend(ext_scene['productId'],z, xtile, ytile, r=4,g=6,b=3)
io.imshow(ext_scene_img_natural)

緑色で表示されている箇所が植生が高い(植物が多く繁茂している)箇所になります。淀川河川敷公園では、河川に沿って植生が高いことがわかります。淀川沿いには、大変多くのヨシが群生しているヨシ原があります。このヨシ原の保全を目的として毎年2月に行われる「鵜殿のヨシ焼き」も有名です。このヨシ原がヌートリアの生息地として好まれているのではないかと思います。
次に山田池公園の植生もみてみようと思います。
# 山田池公園
xtile = 14367
ytile = 6499
z = 14
ext_scene_img_natural = get_asnaro1_blend(ext_scene['productId'],z, xtile, ytile, r=4,g=6,b=3)
io.imshow(ext_scene_img_natural)

こちらの公園も高い植生を示していることがわかります。山田池公園もまた多くの自然を活用した公園となっており、多くの野鳥の生息地にもなっているようです。
ここまでのことから、ヌートリアの生息地の特徴は、西日本の平野部で水生植物が多く茂っている箇所を中心としているということがいえそうです。
5.まとめ
今回はバイオームAPIとASNARO-1の衛星画像を使って、ヌートリアが目撃される場所(=生息地)の特徴について考察しました。ヌートリアは西日本の平野部でかつ水辺の植物が豊富な場所で目撃されることが多いということがあらためて確認できました。
いきものコレクションアプリ 『バイオーム』を使うと、日常で見かけたさまざまな生き物を投稿し、出現情報を共有することができます。関西方面で水辺を歩く際には、ヌートリアが泳いでいたりしないか、バイオームアプリ片手に散策してみるのも面白いかと思います。その際にはぜひ本記事を参考にしていただけましたら幸いです。
また、ヌートリアだけなく、様々な外来種が確認されています。
提供元・宙畑
【関連記事】
・衛星データには唯一無二の価値がある。メタバース空間のゼロ地点を作るスペースデータ佐藤さんを突き動かす衝動とは
・深刻化する「宇宙ごみ」問題〜スペースデブリの現状と今後の対策〜
・人工衛星の軌道を徹底解説! 軌道の種類と用途別軌道選定のポイント
・オープンデータ活用事例27選とおすすめデータセットまとめ【無料のデータでビジネスをアップデート! 】
・月面着陸から50年!アポロ計画の歴史と功績、捏造説の反証事例