はじめに
はじめまして!データサイエンティストの丸山虹樹です。株式会社GEOTRA(@GEOTRA)にてGIS(Geographic Information System:地理情報システム)データを用いた分析、機械学習モデルの構築等を行っています。
本記事の内容
本記事では、Python
を用いて、任意の緯度経度を中心とする円を作成する方法を紹介します。
処理内容
Pythonのバージョン
python --version # Python 3.8.10
ライブラリのバージョン
geopandas.__version__ # 0.13.2
shapely.__version__ # 2.0.2
pyproj.__version__ # 3.3.1
pandas.__version__ # 1.4.2
必要なライブラリのインポート
import geopandas as gpd
from shapely.geometry import Point
from shapely.ops import transform
import pyproj
from functools import partial
import pandas as pd
緯度経度と円の半径、平面直角座標系を定義
ここでは、中心となる緯度経度と、円の半径(メートル)、平面直角座標系を定義しています。
- 平面直角座標系とは、地球表面を平面上で表現するための座標系の一つです。
- 地球の曲面を扱う地理座標系(緯度・経度)とは異なり、平面上の直交するX軸(東向き)とY軸(北向き)を用いて位置を表現します。すなわち、地理座標系(緯度・経度)が角度で表現するに対して、平面直角座標系はメートルで表現されます。
- 平面直角座標系の取得は、https://lemulus.me/column/epsg-list-gis から取得できます。東京23区が「
epsg:6677
」と定義されるのに対して、大阪は「epsg:6674
」と定義され、地域ごとによって異なる点に注意が必要です。
# 中心座標を定義
lon,lat = (139.74479267884593,35.67599877752559) #国会議事堂
# 半径(m)を定義
radius = 700 # 700m
# 平面直角座標系を定義
crs_code = 'epsg:6677'
円を作成する関数
中心の緯度経度、半径、平面直角座標系から円のPolygon
を作成する関数です。
-
project1
は地理座標系(epsg:4326
, 経度緯度)から、指定された平面直角座標系に変換する設定です。project2
は逆にその平面直角座標系から、地理座標系に変換する設定です。 -
transform
を用いて、地理座標系と平面直角座標系の変換を行っています。 -
buffer(radius)
は、指定された半径で円(実際は多角形に近い形状)を作成します。
def create_circle(lon,lat,radius, crs_code):
# 中心点の座標
center = Point(lon,lat)
# 座標系の変換を定義
project1 = partial(
pyproj.transform,
pyproj.Proj(init='epsg:4326'),
pyproj.Proj(init=crs_code))
project2 = partial(
pyproj.transform,
pyproj.Proj(init=crs_code),
pyproj.Proj(init='epsg:4326'))
# 平面直角座標系へ変換
center = transform(project1, center)
# 円形のポリゴンを作成
circle = Point(center).buffer(radius)
# 地理座標系へ変換
return transform(project2, circle)
実行例
ここでは実際に、国会議事堂
を中心とする半径700m
の円を出力します。
# 円形polygonを作成
polygon = create_circle(lon=lon,lat=lat,radius=radius,crs_code=crs_code)
# csvとして保存
polygon_df = pd.DataFrame({"geometry":[polygon],"lon":[lon],"lat":[lat]})
polygon_df.to_csv("circle_polygon.csv",index=False)
kepler.glで表示
kepler.glとは、Uber社が開発した地理空間データを可視化するためのツールです。このサイトでGET STARTED
をクリックし、先ほど作成したcircle_polygon.csv
をアップロードすることで、ブラウザ上で今回作成した円を可視化できます。
- 以下を確認すると、Google Mapから取得した
国会議事堂
(赤点)を中心に、円を作成できていることがわかります。
本当に半径700mなのかを確認
上記のkepler.gl
で可視化した円が本当に半径700m
なのかをGoogle Map
を用いて確認します。
- 上記の
kepler.gl
を確認すると、左に見える東京メトロ
の赤坂見附駅
が国会議事堂
から約700mだとわかります。 -
Google Map
の距離測定機能を用いて、確認しました。距離測定はマウスを手動で動かすので、誤差はありますが、Google Map
からも赤坂見附駅
と国会議事堂
の直線距離が約700mだと確認できます。
結論
Pythonを用いて、任意の緯度・経度を中心とする円のポリゴンを作成することができました。
おわりに
最後までお読みくださりありがとうございました。
また、こちらの記事を読んでGEOTRAに興味を持ってくださった方は、是非Wantedlyから会社紹介記事もご覧ください!GEOTRAは、学生インターンを含め、現在一緒に働く仲間を募集しております。興味をお持ちの方は、Wantedly上の募集ページやストーリー、各種サイトをご確認ください!
企業HP: https://www.geotra.jp/
note: https://note.com/2022geotra/
Wantedly: https://www.wantedly.com/stories/s/geotra_introduction
LinkedIn: https://www.linkedin.com/company/%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BEgeotra/
GEOTRAのQiitaでは、引き続き地理空間情報に関する情報を中心に技術系のテクニックを発信していきます。今後も皆さんのお役に立てるコンテンツを配信できればと思っておりますので、皆様のいいね・フォローをお待ちしています!