背景介绍 geojson是地图可视化系统中最常用的地理数据格式,几乎所有主流的地图可视化库或框架都支持加载geojson数据。Geojson数据通常是从其他数据转换而来,最常见的是ESRIShpfile数据转geojson,专业的GIS软件如QGIS、FME等都支持两者相互转换,但是这些软件不仅体积太大,而且还比较多professional强,作为GIS专业的我都不想用。之前用java写过一个两者转换的工具,但是代码太繁琐了。直到使用了python的geopandas库。Step1.安装geopandas最简单的方法:condainstallgeopandas也可以使用pip安装,但是需要提前安装一些其他的依赖库(numpy、pandas、shapely、fiona、pyproj等),所以我不会'此处不赘述。2.codeimportgeopandasasgpddefshp2gj(input_file,output_file):data=gpd.read_file(input_file)data.to_file(output_file,driver="GeoJSON",encoding='utf-8')#指定utf-8编码防止中文乱码打印('Success:File'+input_file.split('\\')[-1]+'转换完成')两个参数,input_file(输入文件,xxx.shp),output_file(输出文件,xxx.json).主要代码只有两行:读取数据(read_file),写入数据(to_file);写入数据时指定driver="GeoJSON";指定encoding='utf-8'防止中文乱码。3.扩展 上面的代码,将shapefile转geojson。也可以将shapefile或geojson转成其他格式,如:要将geojson转成shapefile,只需将driver参数改成ESRIShapefile即可。data=gpd.read_file(r'yourPath\xxx.json')data.to_file(r'yourPath\xxx.shp',driver="ESRIShapefile",encoding='utf-8')#指定utf-8编码,防止中文乱码有时geojson没有空间参考,需要指定空间参考:importgeopandasasgpdfromfiona.crsimportfrom_epsgdata=gpd.read_file(r'yourPath\xxx.josn')data.crs=from_epsg(4326)#指定空间参考为4326(WGS84坐标)data.to_file(r'yourPath\xxx.shp',driver="ESRIShapefile",encoding='utf-8')驱动支持的数据类型可以通过以下代码查看:>>>importfiona>>>fiona.supported_drivers{'ESRIShapefile':'raw','ARCGEN':'r','PCIDSK':'r','SUA':'r','DGN':'raw','SEGY':'r','MapInfoFile':'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'}
