使用pyshp库可以轻松地对shapefile进行操作,这里简单记录一下使用pyshp如何将shapefile转为geojso。本来使用ArcGIS也可以实现,但是速度是在太慢了。
安装库
pip install pushup
python代码
import shapefile
import codecs
from json import dumps
# read the shapefile
def shp2geo(file="出产.shp"):
reader = shapefile.Reader(file)
fields = reader.fields[1:]
field_names = [field[0] for field in fields]
buffer = []
for sr in reader.shapeRecords():
record = sr.record
record = [r.decode('gb2312', 'ignore') if isinstance(r, bytes)
else r for r in record]
atr = dict(zip(field_names, record))
geom = sr.shape.__geo_interface__
buffer.append(dict(type="Feature", geometry=geom, properties=atr))
# write the GeoJSON file
geojson = codecs.open(file.split('.')[0] + "geo.json", "w", encoding="gb2312")
geojson.write(dumps({"type": "FeatureCollection", "features": buffer}, indent=2) + "\n")
geojson.close()
if __name__ == '__main__':
shp2geo(file='./dt_cbdkcj/dt_cbdkcj.shp')