Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

CSVファイルに地物情報を付加させて別形式で出力させる(Python3, GeoPandas)

More than 1 year has passed since last update.

はじめに

何かと必要な情報は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

jam-goat
地学分野とPythonとかはかなり相性が良いと思う。。。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away