1. 需求分析

将带有坐标和参数的表格信息(.xls,.xlsx)转换成地图图层(.shapefile)。
封装好的exe文件下载地址:
https://download.csdn.net/download/ashtyukjhf/19589740

2. 依赖模块

2.1 表格读取

Python用于表格读取的模块很多,由于此项目功能要求简单,只需要读取表格中的文本内容即可,应当选择尽量轻量级的模块,这里选用xlrd进行表格的读取,需要注意版本为“1.2”。
安装时输入:

pip install xlrd==1.2

2.2 图层写入

图层的写入同样尽量选择轻量级的模块,这里选用pyshp,安装时输入:

pip install pyshp

但是引用时要输入

import shapefile

3 功能实现

3.1 图层生成类的封装

由于生成shapefile图层的步骤比较复杂,这里单独写成一个类,对其功能进行封装。

class ShapeFileWriter(object):def __init__(self,name:str,project=4326):self.name=name#自定义图名self.shp=shapefile.Writer(name+'.shp')self.proj(project)#自定义投影坐标系def __del__(self):self.shp.close()passdef addField(self,key:str,keytype:str,length:str,decimal:str or int='6'):if keytype=='F':self.shp.field(key,keytype,length,decimal=int(decimal))else:self.shp.field(key,keytype,length)def addPoint(self,x:float,y:float,values:list):self.shp.point(x, y)self.shp.record(*values)def proj(self,p=4326):wkt = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]'f = open(self.name+'.prj', 'w') f.write(wkt)#写入投影信息f.close()#关闭操作流

完整代码

# -*- coding: utf-8 -*-
import shapefile # 使用pyshp
import xlrd #版本为1.2
import osclass ShapeFileWriter(object):def __init__(self,name:str,project=4326):self.name=nameself.shp=shapefile.Writer(name+'.shp')self.proj(project)def __del__(self):self.shp.close()passdef addField(self,key:str,keytype:str,length:str,decimal:str or int='6'):if keytype=='F':self.shp.field(key,keytype,length,decimal=int(decimal))else:self.shp.field(key,keytype,length)def addPoint(self,x:float,y:float,values:list):self.shp.point(x, y)self.shp.record(*values)def proj(self,p=4326):wkt = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]'f = open(self.name+'.prj', 'w') f.write(wkt)#写入投影信息f.close()#关闭操作流class Transform():def __init__(self,name):try:os.makedirs(name)except :passself.name = nameself.shape=ShapeFileWriter(name+'/'+name)self.define()self.load()def define(self):with open('字段定义.txt', mode='r', encoding='utf-8') as f:a=f.readline().split('=')b=f.readline().split('=')self.x=int(a[1])self.y=int(b[1])#print(x,y)fileds=f.readlines()for filed in fileds:filed=filed.replace('\n','').split(',')self.shape.addField(*filed)#print(filed)def load(self):try:wb=xlrd.open_workbook(self.name+'.xlsx')except :try:wb=xlrd.open_workbook_xls(self.name+'.xls')except :pass#print(wb)table = wb.sheet_by_index(0)#print (table)for i in range(1,table.nrows):values= (table.row_values(i))try:x=float(values[self.x])y=float(values[self.y])self.shape.addPoint(x, y, values)except :passpassname=input("文件名:")
name = name.split('.')[0]
Transform(name)
input('转换完成')

使用说明

使用方法

首先准备好xlsx或xls格式的数据表,表头只能有一行。
根据数据表表头编写字段定义文件字段定义.txt并与程序放在同一个文件夹。
运行程序,输入待转换的数据表文件名。

字段定义格式

投影定义

第一行,为投影类型,可选参数如下:

3857:球面墨卡托投影,用于谷歌地图、Bing地图、ESRI地图等;
4326:WGS-84坐标系,用于GPS坐标;
4610:西安80系;
4214:北京54系;
4490:中国大地坐标系2000。
如参数不在以上之列,则自动设置投影系为WGS-84。

坐标字段

第二、三行,为经纬度字段的位置,位置对应表格A列为0,B列为1……,以此类推。

字段属性

第四行及以后,根据数据表的表头,按顺序定义每一列的字段属性,每一行对应表格中的一列。

每一行第一词为字段名,尽量简短;
第二词为字段类型,'C’为字符型,'N’为整数型,'F’为浮点型,‘D’为日期;
第三词为字段长度,建议不要小于10;
若字段类型为’F’,可添加第四词,表示精确到小数点后的位数,留空则默认为6位。

示例

PROJECT=4326
X=2
Y=3
ID,N,20
NAME,C,20
LNG,F,20
LAT,F,20
VALUE1,F,30
VALUE2,F,30

注意事项

  1. 本程序只能读取数据表的第一个sheet,数据表存在多个sheet时可能读取失败;
  2. 字段定义文件的编码应为“UTF-8”,如果出现编码错误,用记事本打开,然后选择另存为,更改编码为“UTF-8”并替换原文件;
  3. 数据表文件名中如有空格,斜杆和多余的点号,会影响文件的读取和保存。

Python实现表格转shapefile方法相关推荐

  1. python中读取word信息_Python实现批量读取word中表格信息的方法

    本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...

  2. python word 表格 框线_python设置表格边框的具体方法

    安装 xlwings 直接安装用 pip install xlwings,用 anaconda 的,已经内置了,见下图. 导入 xlwings import xlwings as xw 打开 Exce ...

  3. python 打印表格边框_python设置表格边框的具体方法

    安装 xlwings 直接安装用 pip install xlwings,用 anaconda 的,已经内置了,见下图. 导入 xlwings import xlwings as xw 打开 Exce ...

  4. python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍

    Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...

  5. python 读取 word 表格_Python实现批量读取word中表格信息的方法

    本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...

  6. python word 表格 缩进_python win32com 处理word 里面表格的简单方法

    在处理word里面表格的时候,发现和网上的方法不太一样,也不知道是不是python版本的问题 使用win32com处理Word里面的表格时,表格的表示方法为Tables(1),括号里面的数字表示wor ...

  7. python处理excel案例_使用Python处理Excel表格的简单方法

    使用Python处理Excel表格的简单方法 Excel 中的每一个单元,都会有这些属性:颜色(colors).number formatting.字体(fonts).边界(borders).alig ...

  8. python表格怎么复制内容_PyQT5 实现快捷键复制表格数据的方法示例

    本文主要介绍了PyQT5 实现快捷键复制表格数据的方法示例,分享给大家,具体如下: 表格数据如下: # -*- coding:utf-8 -*- import pyperclip from PyQt5 ...

  9. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  10. python处理表格-python如何处理表格?

    python如何处理表格? python处理表格的方法: python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库.可从这里下载https:/ ...

最新文章

  1. 导出勾选密码永不过期的AD账户信息
  2. matlab程序和程序文件
  3. Spring学习8之静态代理
  4. mongoose多个连接_连接(connections)
  5. java string返回_Java的String字符串内容总结
  6. 光电转换模块_关于光电倍增管(PMT)模块的选型与使用
  7. Docker学习总结(48)——Docker 四种网络模式温故
  8. [视频]产品营销之拍出好电子产品,Peter Belanger是如何为苹果产品拍照的
  9. 债务回收解决方案行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  10. spring配置文件约束
  11. ios网络相关问题-HTTP特点
  12. 解决Cannot resolve com.lowagie:itext:2.1.7.js6以及.net.jf.jasperresport下com.lowagie:itext标红的问题
  13. 17.3 构建LinuxPC端QT软件上的ARM编译套件并进行测试
  14. win10系统在文件夹中图片不显示内容问题
  15. 数三角(triangle)
  16. chrome浏览器91版本,Chrome中跨域请求无法携带Cookie的解决方案
  17. 【HTML教程(一)】HTML标签、模板和实例
  18. 信息武器化——认知安全的必要性
  19. Memory Analyzer Tool 1 Shallow heap Retained heap dominator tree(控制树)
  20. 瀑布模型,冯.诺依曼结构——摘自百科

热门文章

  1. .net session 有效时间_【面试题】|干货!.NET C# 简答题Part 07
  2. 一招判断三元催化堵塞_三元催化堵塞,许多老司机不知道如何处理,教你一妙招,油耗低...
  3. python抢演唱会门票_韩国演唱会抢票系统生产环境(Linux)配置记录
  4. linux拨号日志,Linux系统日志管理:(1)连接时间日志
  5. winform 图片压缩大小为原图的一半_图片压缩指定大小?!这款神奇的工具有必要了解一下...
  6. TypeScript实战:下棋游戏
  7. 实战:详解Reaact+AntD+Node后台管理系统
  8. React:Redux简介
  9. jquery选择器的介绍和使用
  10. GIS_GeoTools栅格数据分析之图像变化检测