Excel 不用多介绍,几乎每天都在使用,无处不在、易用性好,并且它们可以方便地存储结构化数据。电子表格作为一种收集数据的GIS格式非常流行。
相信工作或者学习中都会碰到,将电子表格的数据转化为Shapefile文件。接下来将演示把一个电子表格转换为Shapefile文件。电子表格包含代表经度的x字段属性列和代表纬度的y字段属性列。如下表所示:
将其导入一个Shapefile文件,将执行如下步骤:
(1)打开电子表格;
(2)创建一个shapefile文件写者对象;
(3)获取电子表格的第一行作为dbf文件的表头;
(4)循环遍历电子表格每一行,将属性拷贝到dbf文件中;
(5)根据电子表格中的x和y字段中的值创建一个点。
import xlrd
import shapefile
# > (1)打开电子表格;
xls = xlrd.open_workbook(r"data/NYC_MUSEUMS_GEO.xlsx")
sheet = xls.sheet_by_index(0)
# > (2)创建一个shapefile文件写者对象;
with shapefile.Writer(r"data/NYC_MUSEUMS_GEO_toShp", shapefile.POINT) as w:
# column是列,row是行
# > (3)获取电子表格的第一行作为dbf文件的表头;
for i in range(sheet.ncols):
# print(sheet.cell(0,i))
# cell(行号,列号)
w.field(str(sheet.cell(0, i)), "C", 40)
# > (4)循环遍历电子表格每一行,将属性拷贝到dbf文件中;
for i in range(1,sheet.nrows):
values = []
for j in range(sheet.ncols):
values.append(sheet.cell(i,j).value)
w.record(*values)
# > (5)从最后两列获取经纬度信息,并创建点。
w.point(float(values[-2]),float(values[-1]))
结果如图所示:
总结
注意:最新的xlrd居然不支持Excel xlsx文件的读取。
方法:卸载最新的xlrd库,安装历史版本的xlrd库。pip install xlrd == 版本号
pip install xlrd==1.2.0
《Python地理空间分析指南 第2版》学习笔记,仅供学习,如有侵权请联系删除。