#はじめに
何かと必要な情報はCSVで転がっているが、地物情報を付加させるのにひと手間必要でもう疲れた。のでフォルダ内全てのCSVをGeoJSONに変換することを検討した。
#使用モジュール
geopandas
pandas
shapely
os
#プログラム
読み込むフォルダーはhogefolder
ファイルは
20200222_1.csv
20200222_2.csv
....
と構成されており、それぞれのCSVファイルは
date | londitude | latitude | data |
---|---|---|---|
2019-01-01 | 133.0000 | 33.0000 | hoge |
2019-01-02 | 132.0000 | 34.0000 | hoge |
... | ... | ... | ... |
のような形になっているものとする。
import geopandas as gpd
import pandas as pd
from shapely.geometry import Point
import os
file_list = os.listdir('./hogefolder')
for file in file_list:
name = file[-14:-4]
opfile = './OutputCSV/'+opfile
df = pd.read_csv(file,header = 0)
Geometry = [Point(xy) for xy in zip(df.longitude, df.latitude)]
df = df.drop(['longitude', 'latitude'], axis=1)
Crs = {'init': 'epsg:4326'}
gdf = gpd.GeoDataFrame(df, crs=Crs, geometry=Geometry)
outputname = './OutputJSON/'+str(name)+".geojson"
gdf.to_file(outputname, driver='GeoJSON')
CSVファイルを直接geopandasには読み込めないためpandasを経由している。
pandasで読み込ませたデータフレームからlongitudeとlatitudeを読み込み、Point(XY)というgeopandasで読み込めるGeometry形式に書き換えをしている。
元のlon, latは今回drop
で削除しているが、残しておいても問題ない。
CRS(今回はWGS84)を指定し、geopandasに読ませている。
出力は出力先と形式を指定すればよい。(シェープファイルやGeoPackageにも出力できる。)
様々な形に応用ができるので、活用してほしい。
簡単にでしたが以上です
何かご意見等ございましたら
twitterまでご連絡ください@ohcelot
2020/02/22 新規作成
参考サイト
GeoPandas公式
https://gist.github.com/nygeog/2731427a74ed66ca0e420eaa7bcd0d2b