記事
· 2023年2月24日 4m read

iris-geo-map(インタラクティブに地図を生成し、地理データを視覚化するツール):InterSystems デベロッパーツールコンテスト2023入賞作品のご紹介

開発者の皆さん、こんにちは!

InterSystems デベロッパーツールコンテスト2023 の21の応募作品の中から、Experts Nomination 第4位に輝いた @Muhammad Waseem さんのiris-geo-map(インタラクティブに地図を生成し、地理データを視覚化するツール)についてご紹介します。

このツールは、Embedded Pythonを利用していて Folium Python ライブラリを使用されています。

特徴については @Muhammad Waseem さんの Open Exchange のREADMEもぜひご参照ください。

 

それでは、さっそく、使用開始までの手順です。(とても簡単です)

IPM(InterSystems Package Mangaer:以前はZPMとも呼ばれていました)のクライアントツールを管理ポータルかスタジオからインポートしたら、以下コマンドを実行するだけでツールの準備が整います。

クライアントツールのインポートはどのネームスペースでも大丈夫です。管理ポータルからインポートされる場合は、以下メニューを利用します。

管理ポータル→システムエクスプローラ→クラス→インポート対象ネームスペースを選択→インポートボタンクリック

ツールを配置したいネームスペースに移動し、ZPMコマンドを利用してインストールします。

zpm "install iris-geo-map"
 
ZPMインストール時の出力例

インストールによって準備される  dc.IrisGeoMap.Folium クラスの GetGeoDetails()メソッドを使って、住所情報から緯度経度の情報を取得してみましょう。

例は、インターシステムズジャパンの東京オフィスの住所です。

USER>do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("6-10-1 Nishi-Shinjuku, Shinjuku-ku,Tokyo,160-0023")
Location: 35 40m 53.5184s N, 139 42m 51.223s E
Address: 外苑西通り, 大京町, 新宿区, 東京都, 160-0015, 日本
Latitude: 35.6815329
Longitude: 139.7142286

使用されているコードは以下の通りです。(Embedded Pythonを使用しています)

ClassMethod GetGeoDetails(addr As %String) [ Language = python ]
{
    from geopy.geocoders import Nominatim
    geolocator = Nominatim(user_agent="IrisGeoApp")
    try:
    	location = geolocator.geocode(addr)
    	print("Location:",location.point)
    	print("Address:",location.address)
    	point = location.point
    	print("Latitude:", point.latitude)
    	print("Longitude:", point.longitude)
    except:
    	print("Not able to find location")
}

こんな具合で緯度経度情報を取得できるので、この結果を利用していくつかの場所にピンを指した地図を作成してみましょう(結果はHTMLで出力されます)。

この処理には、dc.IrisGeoMap.Folium クラスの MarkGeoDetails() メソッドを使用します。

do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("6-10-1 Nishi-Shinjuku,Fujiyoshida,Gion,Sapporo,Fukuoka,Osaka","irisgeomap_locations.html")

実行が完了すると第2引数で指定したディレクトリ、ファイル名でHTMLが生成されるので開いてみます。

インターシステムズ東京オフィス、富士吉田市、祇園、札幌市、大阪市、福岡市を地点に指定した結果が表示されました!

コードは以下の通りです。

GetGeoDetails()メソッドと同様に、第1引数に指定された住所情報から緯度経度情報を取得し、folium.Mapでマップオブジェクトを作ってから、folium.Markerで地図にピンを指しています。

Pythonを使うことで、こんなに簡単に地図にピンがさせてしまうのですね!

Python便利です。

ぜひ皆さんのお手元でも試してみてください!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください