講義でgeopandasを使う機会があったのですが、
インストールで手こずったので、備忘録として残しておきます。
Anacondaを使ってgeopandasをインストールしています。
インストール手順は以下の通りです。
「geoenv」という仮想環境を新しくつくり、geopandasをインストールします。
$ conda create -n geoenv
$ activate geoenv
$ conda install -c conda-forge geopandas
ここからがエラー内容です。
インストールが成功した印である「done」の後に「指定されたパスが見つかりません。」というメッセージが表示され、
$ set "GDAL_DRIVER_PATH="
$ rem proj-data is installed because its license was copied over
というメッセージがプロンプト上に表示されました。
GDAL_DRIVER_PATHの設定やprojのアップデートをしてもこのエラーメッセージは直らず・・・・
スポンサーリンク
原因:anaconda自体のパスに半角スペースが含まれていたから!
結論からいうと、anacondaをインストールするユーザの名前に半角スペースを入れていたからでした。そういえばインストールするときに、以下のような警告があったことを思い出しました。
This can cause problems with several Conda packages.
Please consider removing the space.
(スペースを消さないとCondaのパッケージに支障がでるよ)
幸か不幸か、いままで何も問題なく使えていたので気にしませんでしたが・・・
スペースがないユーザー名を新しくつくり、再びインストールするとgeopandasが正常に動きました。
ユーザー名の変更はかなり手間がかかりそうなので、
よほどの事情がない以上は新しくユーザー名を作った方が手っ取り早いと思います。
蛇足:activateをしたときにエラーが表示される理由は?
エラー内容が表示されるタイミングを調べるとインストール直後以外にも
$ activate geoenv
を実行したときにも同じエラーメッセージが表示されます。
そこで「conda.bat」の中身をみてみると(conda activateでも環境を有効にできるので)
@IF [%1]==[activate] "%~dp0_conda_activate" %*
@IF [%1]==[deactivate] "%~dp0_conda_activate" %*
どうやら、「_conda_activate.bat」に詳しいことが書かれていることが分かります
「_conda_activate.bat」をみると、(コードハイライトが上手く表示できていませんが、無視してください)
@FOR %%A in ("%TMP%") do @SET TMP=%%~sA
@SET _sysp=!_sysp:~0,-1!
@SET PATH=!_sysp!;!_sysp!\Library\mingw-w64\bin;!_sysp!\Library\usr\bin;!_sysp!\Library\bin;!_sysp!\Scripts;!_sysp!\bin;%PATH%
@REM It seems that it is not possible to have "CONDA_EXE=Something With Spaces"
@REM and %* to contain: activate "Something With Spaces does not exist".
@REM MSDOS associates the outer "'s and is unable to run very much at all.
@REM @SET CONDA_EXES="%CONDA_EXE%" %_CE_M% %_CE_CONDA%
@REM @FOR /F %%i IN ('%CONDA_EXES% shell.cmd.exe %*') DO @SET _TEMP_SCRIPT_PATH=%%i not return error
@REM This method will not work if %TMP% contains any spaces.
スペースがあると上手く動きませんとコメント(@REMの行)していることが分かります。
おそらく「指定されたパスが見つかりません。」というのがanaconda自体の問題で、
GDAL_DRIVER_PATHとproj-dataはCondaパッケージの問題だと思います。
試しにプロンプト上で
$ echo %TMP%
C:\Users\username~1\AppData\Local\Temp
とすると、「~」がついたパスが表示されていることが分かります。TMP(一時ファイル)のパスを変えるのは簡単なので、All userでanacondaをインストールした場合はTMPのパスの変更でgeopandasを入れられるかもしれません(憶測ですが・・・)
試しにgeopandasで作図してみる
アイキャッチにある図は、国土交通省の国土数値情報(埼玉県の行政区域データと都道府県地価調査データ)を使って作図したものです。
行政区域データ(N03-20_11_200101.geojson)は
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v2_4.html
都道府県地価調査データ(L02-20_11.geojson)は
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-L02-v2_7.html
から入手しました。
作図に使ったPythonスクリプトを載せておきます。geopandasの動作テストとしてご利用ください。
#!/usr/bin/env python3
#必要なものを宣言
import matplotlib.pyplot as plt
import geopandas as gpd
#なくてもOK
import warnings
warnings.filterwarnings('ignore')
def main(df_geo, df_shape):
fig = plt.figure(figsize=(8,8), dpi = 200)
ax = fig.add_subplot(111)
#地形プロット
df_geo.plot(ax= ax, color='white', edgecolor='black')
#地価調査地点プロット
df_shape.plot(ax=ax, marker='.', color='c', markersize=20)
if __name__ == '__main__':
#行政地区データ(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v2_4.html)
df_geo = gpd.read_file(r'C:\Users\username\N03-20200101_11_GML\N03-20_11_200101.geojson')
#地価調査データ(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-L02-v2_7.html)
df_shape = gpd.read_file(r'C:\Users\username\L02-20_11_GML\L02-20_11.geojson',encoding='SHIFT-JIS')
main(df_geo, df_shape)
fileo1 = r'C:\Users\username\test_geopandas.png'
plt.savefig(fileo1, format='png')