宙畑 Sorabatake

衛星データ

特定外来生物のデータを使ってヌートリアの出現スポットを探してみる

Tellusマーケットで公開されている、特定外来生物の発見データと、衛星データを組み合わせて、どのような場所で特定の生物が出没しやすいのか、考察しました。

記事作成時から、Tellusからデータを検索・取得するAPIが変更になっております。該当箇所のコードについては、以下のリンクをご参照ください。
https://www.tellusxdp.com/ja/howtouse/access/traveler_api_20220310_
firstpart.html

2022年8月31日以降、Tellus OSでのデータの閲覧方法など使い方が一部変更になっております。新しいTellus OSの基本操作は以下のリンクをご参照ください。
https://www.tellusxdp.com/ja/howtouse/tellus_os/start_tellus_os.html

現在、Tellus Marketでの新規購入の受付は終了しております。

Tellus Marketから無料購入して利用できるバイオーム(Biome)APIを使うと、日本全国の特定外来生物の出現情報を取得することができます。特定外来生物の中から、ヌートリアと呼ばれる動物の出現場所の特徴を衛星データと組み合わせて考察してみたいと思います。

1.ヌートリアとは

ヌートリアという動物を、ご存知でしょうか。主に西日本で分布域を広げているネズミの一種で、外来生物法(特定外来生物による生態系等に係る被害の防止に関する法律)による侵略的外来生物に指定されています。今後日本で広がった場合、生態系への影響が懸念される動物です。

ヌートリアの日本での分布域 (2010年-2017年) Source : 環境省自然環境局 生物多様性センター

ヌートリアは、南アメリカが原産です。1930年代に毛皮製品を作る目的で輸入されましたが、戦後になると毛皮需要が縮小したために飼育が放棄され、その後野生化しました。高い繁殖力に加え、日本では特に天敵がいないため個体数が年々増加しています。

土手や堤防等に複数の巣穴を掘り、水面上に水生植物を集めて「プラットホーム」という浮巣を作って暮らします。寒さには、それほど強くないといわれており、冬期に河川が凍結するような地域では生存できません。

草食性で、ホテイアオイ、ヨシ、ヒシなどの茎や根、葉を食べますが、貝や魚類を食べることもあります。また、ジャガイモやにんじんなどの農作物も食べるので、生息地周辺の農業への被害も深刻で、平成20年度の被害額は全国で1億2千万円以上にもなったそうです。

また、農作物以外でも、電源ケーブルをかじって断線させたり、穴を掘って堤防を壊したりする厄介者です。

ヌートリアに関しては、バイオーム社の下記の記事でも紹介されています。記事中でヌートリアの姿を捉えた写真も掲載されていますので、ぜひその姿を確認してみてください

日本に広がるヌートリアという生き物

このヌートリアの生息地について、バイオームデータと衛星データを使ってその特徴を考察してみたいと思います。

2.検出方法と使用するデータの説明

バイオームのAPIから、特定外来生物のうちヌートリアに該当するものだけを抽出します。次に地図上にヌートリアの出現場所をプロットし、その分布を確認します。その後ヌートリアがよく目撃されている場所付近の特徴を衛星データと照らし合わせて確認します。

今回はASNARO-1の衛星画像から植生分布を生成し、ヌートリアの出現場所と植生の関係について考察しました。

3.コードと結果のご紹介

まずバイオームのAPIを利用できるように、TellusMarket上でバイオームAPIを購入しておきます。

※2024年1月以降、新規購入の受付は終了しております。

購入すると商品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
ヌートリアが撮影された箇所 Credit : OpenStreetMap contributors

ヌートリアが撮影された場所を見ると、確かに西日本に偏っていることがわかります。

さらに、大阪周辺の河川(木津川・淀川・桂川)のデータを国土数値情報から取得し、地図に重ねてみます。これらの河川を結合したデータを下記の場所に置きましたので適宜利用してください。

大阪の河川(木津川・淀川・桂川)データ

ヌートリアが撮影された箇所と主要河川の関係 Credit : OpenStreetMap contributors

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

ヌートリアが撮影された箇所「淀川河川敷」と「山田池公園」 Credit : OpenStreetMap contributors

さらに、地図上でズームしていくと特定の場所で多く目撃されていることがわかります。今回はその中から「淀川河川敷」と「山田池公園」を対象にその植生を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)
ヌートリアが撮影された「淀川河川敷」周辺の植生 Credit : Original data provided by NEC

緑色で表示されている箇所が植生が高い(植物が多く繁茂している)箇所になります。淀川河川敷公園では、河川に沿って植生が高いことがわかります。淀川沿いには、大変多くのヨシが群生しているヨシ原があります。このヨシ原の保全を目的として毎年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)
ヌートリアが撮影された「山田池公園」周辺の植生 Credit : Original data provided by NEC

こちらの公園も高い植生を示していることがわかります。山田池公園もまた多くの自然を活用した公園となっており、多くの野鳥の生息地にもなっているようです。

山田池公園マップ

ここまでのことから、ヌートリアの生息地の特徴は、西日本の平野部で水生植物が多く茂っている箇所を中心としているということがいえそうです。

5.まとめ

今回はバイオームAPIとASNARO-1の衛星画像を使って、ヌートリアが目撃される場所(=生息地)の特徴について考察しました。ヌートリアは西日本の平野部でかつ水辺の植物が豊富な場所で目撃されることが多いということがあらためて確認できました。

いきものコレクションアプリ 『バイオーム』を使うと、日常で見かけたさまざまな生き物を投稿し、出現情報を共有することができます。関西方面で水辺を歩く際には、ヌートリアが泳いでいたりしないか、バイオームアプリ片手に散策してみるのも面白いかと思います。その際にはぜひ本記事を参考にしていただけましたら幸いです。

また、ヌートリアだけなく、様々な外来種が確認されています。
外来種の一覧は環境省で公開されていますので、こちらもご参照ください。
https://www.env.go.jp/nature/intro/2outline/iaslist.html