ValueError: Cannot transform naive geometries. Please set a crs on the object first.が発生した件

環境

python==3.9
mac
geopandas

状況

以下のgeopandas上でのwebメルカトル変換記事を参照しながらcrsの設定をwebメルカトル変換していた時のこと。

以下のエラーが発生。

ValueError: Cannot transform naive geometries. Please set a crs on the object first.

※crsについて↓

座標参照系(CRS:Coordinate Reference System)は、GIS の中で一般的に使用されている位置を表す決まり

貼り付け元  <https://www.aeroasahi.co.jp/fun/column/19/>

 

原因

エラー行見ているとどうやら「geopandasgeojsonを読み込み、DataFrameにしたあとcrsのepsg設定をしなおしている」ところで発生している。

※以下の所でerror

df = gdf.to_crs(epsg=3857)  # Webメルカトルに変換

eqsgについて

QGIS で座標参照系を設定する際に、” EPSG XXXX “ という表記もみられます。 「EPSG( European Petroleum Survey Group )コード」と呼ばれるもので、各国の様々な測地系や投影法に対して、ユニークな ID 番号を振り分けたものです。

座標参照系の社員番号や学籍番号のようなものと捉えていただければ大丈夫です。

貼り付け元  <https://www.aeroasahi.co.jp/fun/column/19/>

 

 

いつもは以下の形式で同じ階層のgeojsonを読み込んでいた。

gdf = gpd.read_file(’ファイル名.geojson’)

今回は以下の形でdict形式で読み込んでいた。

 

gpd.GeoDataFrame.from_features(geojson["features"])

推測だが、ファイルを読み込む形式とは違い、dictでの読み込みだとcrsが何も設定されず変換ができなかったのでは・・?

 

解決

以下のように読み込み後DataFrameにする段階でcrs=4326を設定する対策を施すと無事解決した。

 

gpd.GeoDataFrame.from_features(es_geojson["features"],crs=4326)

その後Webメルカトルに変換してもエラーは発生しない。

df = gdf.to_crs(epsg=3857)  # Webメルカトルに変換