Python+GIS-shapefile転送geojson(コアコードは2行のみ)

2645 ワード

背景
geojsonは地図可視化システムで最もよく使われる地理データフォーマットであり、ほとんどの主流の地図可視化ライブラリまたはフレームワークはgeojsonデータのロードをサポートしている.geojsonデータは通常他のデータから変換され、最も一般的なのはESRIShpfileデータ転送geojsonであり、専門GISソフトウェアの中でQGIS、FMMなどは両方の相互変換をサポートしているが、これらのソフトウェアは膨大すぎるだけでなく、専門性が強く、GIS専門としての私も使いたくない.以前javaで両者変換のツールを書いたことがありますが、コードはあまりにも煩雑です.pythonのgeopandasライブラリが使用されるまで.
ステップ
1.geopandasのインストール
最も簡単な方法:
conda install geopandas

pipを使用してインストールすることもできますが、他の依存ライブラリを事前にインストールする必要があります(numpy,pandas,shapely,fiona,pyprojなど).これは後述しません.
2.コード
import geopandas as gpd

def shp2gj(input_file, output_file):
    data = gpd.read_file(input_file)
    data.to_file(output_file, driver="GeoJSON", encoding='utf-8') #   utf-8  ,      
    print('Success: File '+input_file.split('\\') [-1] + ' conversion completed')

2つのパラメータ、input_file(入力ファイル、xxx.shp)、output_file(出力ファイル、xxx.json).主なコードは2行しかありません:データを読む(read_file)、データを書く(to_file);データを書くときはdriver="GeoJSON"を指定すればいい.中国語の文字化けしを防ぐため、encoding='utf-8'を指定します.
3.拡張
上記のコードはshapefileをgeojsonに変換します.同様にshapefileまたはgeojsonを他のフォーマットに変更することもできます.例えば、geojsonをshapefileに変更するには、driverパラメータをESRI Shapefileに変更するだけです.
data = gpd.read_file(r'yourPath\xxx.json')
data.to_file(r'yourPath\xxx.shp', driver="ESRI Shapefile", encoding='utf-8') #   utf-8  ,      

geojsonにはスペースリファレンスがない場合があります.スペースリファレンスを指定する必要があります.
import geopandas as gpd
from fiona.crs import from_epsg

data = gpd.read_file(r'yourPath\xxx.josn')
data.crs = from_epsg(4326) #        4326(WGS84  )
data.to_file(r'yourPath\xxx.shp', driver="ESRI Shapefile", encoding='utf-8')

driverがサポートするデータ型は、次のコードで表示できます.
>>> import fiona
>>> fiona.supported_drivers
{'ESRI Shapefile': 'raw', 'ARCGEN': 'r', 'PCIDSK': 'r', 'SUA': 'r', 
'DGN': 'raw', 'SEGY': 'r', 'MapInfo File': 'raw', 'GeoJSON': 'rw', 'PDS': 'r', 
'FileGDB': 'raw', 'GPX': 'raw', 'DXF': 'raw', 'GMT': 'raw', 'Idrisi': 'r', 
'GPKG': 'rw', 'OpenFileGDB': 'r', 'BNA': 'raw', 'AeronavFAA': 'r', 
'GPSTrackMaker': 'raw'}