この記事について
仕事で GIS データを扱うことになったので、基本から学ぶことにしました。
以下の講座を受けながら、登場した geopandas の基本について、公式の introduction を参考にまとめてみます。
謎だったこと
GeoDataFrame
を作ったときに、列名を geometry
にしたときと別の列名にしたとき(geo_col
など)で挙動が変わることがあった。
どちらも型はジオメトリ型として認識されていたので、geometry
という列名に何か特殊な意味があるのか? と思い調査開始。
GeoPandas ことはじめ
GeoDataFrame とは
geopandas.GeoDataFrame
は Pandas の pandas.DataFrame
のサブクラスで、GeoPandas の格となるデータ構造です。
違いとしては、geopandas.GeoDataFrame
は地理空間関係の操作を行うための地理空間用カラムを持てること。この地理空間用カラムを扱うのは、Pandas の pandas.Series
のサブクラスである geopandas.GeoSeries
です。
したがって、GeoDataFrame
は伝統的なデータ型(数値、boolean、テキスト等)を持つ pandas.Series
と、地理空間用のジオメトリ型データ(point、polygon等)を持つ geopandas.GeoSeries
の組み合わせです。
一般的なデスクトップのGISソフトウェアと異なり、地理空間用データの列は好きな数だけ持つことができます。
GeoSeries とは
GeoSeries
には任意のジオメトリ型のデータを持つことができ、ひとつの配列の中に複数のジオメトリ型を混在させることもできます。
GeoSeries
は GeoSeries.crs
という属性を保ち、参照系の情報を保持します。
座標参照系(CRS)ってなに? という話をこちらの記事に記載しています。
アクティブなジオメトリ列 - GeoDataFrame の中の特殊なGeoSeries
GeoDataFrame
の中では、ひとつの GeoSeries
だけが アクティブなジオメトリ列 とみなされ、地理空間関係の操作はすべてこのカラムに対して行われます。
この アクティブなジオメトリ列 には、 GeoDataFrame.geometry
属性でアクセスすることができます。
たぶん謎が解けました
やはり geometry
という名前には特別な意味があったらしい。
列名を geometry
にしておくことで、デフォルトでその列に GeoDataFrame.geometry
属性によってアクセスできるようになり、 アクティブなジオメトリ列 として認識してくれるっぽい。
おそらく任意の列名を アクティブなジオメトリ列 に指定する方法もあるのかもしれないけど、一旦 アクティブなジオメトリ列 にしたい列は geometry
という名前で持ちましょう、という結論でいいっぽい。