,,python geopandas读取、创建shapefile文件的方法

,,python geopandas读取、创建shapefile文件的方法

Shapefile是GIS中非常重要的数据类型,在ArcGIS中称为要素类。它主要包括点、线和折线。本文重点介绍python geopandas读取和创建shapefiles的方法。请有需要的朋友参考。

Shapefile是GIS中非常重要的数据类型,在ArcGIS中称为要素类。它主要包括点、线和折线。geopandas作为一种非常常见的矢量文件格式,为shapefile的读写提供了良好的支持,其DataFrame结构相当于GIS数据中的一个属性表,使得直接操作矢量数据的属性表成为可能,使得在python中操作地理数据更加方便。本文将向您介绍如何读写Shapefile文件(。shp,shx,dbf和其他格式)。

开发准备

由于geopanda有几个依赖库,建议您使用Miniconda或Anaconda来安装geopanda。

安装命令:

conda install-c conda-forge geo pandas

国内形象:

conda install-c https://mirrors . tuna . Tsinghua . edu . cn/anaconda/cloud/conda-forge geo pandas

用途:导入geopandas

我这里用的是geopandas 0.7的版本,版本之间差别不大。最新的0.8版本在查询和仓储方面增加了一些功能。

shapefile文件信息的读取

与pyshp库相比,geopandas库的数据读取、显示、分析和扩展效果更好。可以读取ArcGIS中zip、GeoJson、gdb中的shapefile和QGIS中GeoPackage中存储的矢量数据。

将geopandas作为gpd导入

从matplotlib导入pyplot作为plt

data=GPD . Read _ file(r ' e:\ GIS data \行政区划数据2019\ province.shp') #读取磁盘上的矢量文件

# data=GPD . Read _ file(' shape file/China . gdb ',layer=' province') #读取gdb中的矢量数据

Print(data.crs) #查看数据对应的投影信息

Print(data.head()) #查看前5行数据

data.plot()

Plt.show()#简单显示

显示效果:

shapefile文件的创建

创建类的效率非常高,不仅可以创建特征实体,还可以写入属性信息和定义投影。下面简单介绍下三个要素类的创建方法。

创建点要素类

核心代码:

#对应于shapely.geometry中的点,用于表示单个点。让我们创建一个由几个点对象组成的点对象。

cq=geopandas。GeoSeries(【几何。点(110,60),

几何。点(110.5,50.4),

几何。点(120,55),

几何。点(107.8,54.6),

几何。点(114.6,50)],

Crs='EPSG:4326 ',#指定的坐标系是WGS 1984

index=[' 1号',' 2号',' 3号',' 4号',' 5号'],#相关索引

)

#将数据导出为shapefile文件

cq.to_file('。/output/{}。嘘。格式(os.path.basename(__file__)。替换('。py ','')),

驱动程序='ESRI形状文件',

编码='utf-8 ')

创建线状要素类

核心代码:

#这里shapely . geometry . linestring([(x1,y1),(x2,y2),])用于创建多个点依次相连的线段。

cq=geopandas。GeoSeries(【几何。LineString([(0,0),(1,1),(1,0)]),

几何。LineString([(0.5,2),(0,1),(-1,0)]),

EPSG:4326,

Index=[' Line 1 ',' b'])

cq.to_file('。/output/{}。嘘。格式(os.path.basename(__file__)。替换('。py ','')),

驱动程序='ESRI形状文件',

编码='utf-8 ')

创建面要素类

核心代码:

#对应于shapely.geometry中的多边形,用于表示表面。让我们创建一个由几个多边形对象组成的多边形。

cq=geopandas。GeoSeries(【几何。多边形([(14,14),(13,18),(20,11),(18,10)]),

几何。多边形([(0,0),(10,0),(10,10),(0,10)],

[((1, 3), (5, 3), (5, 1), (1, 1)),

((9, 9), (9, 8), (8, 8), (8, 9))]),

几何。多边形([(11,2),(11,10),(12,10),(12,2)])

],

索引=['简单面', '复杂面,' c区'], # 构建一个索引字段

crs='EPSG:4326 ',#坐标系是:WGS 1984年年

)

cq.to_file(./output/{} .嘘。格式(os.path.basename(__file__).替换('。py ','')),

驱动程序='ESRI形状文件,

编码='utf-8 ')

拓展应用实例

展高程点

高程点文件存储格式与卡斯中读取的数据;数字录音带格式一致,示例:【1、ZDH 450000.000、DYG 4100000.002、450000.000、4100000.002】其中,"1"代表的是"点号”,“ZDH”代表的是"代码",之后的分别是"东坐标、北坐标、高程值"即y、X、H或者是x、Y、H

美国电脑软件公司公司的计算机辅助设计软件中展点效果

地质公园中展点效果

实现代码

# -*-编码:utf-8 -*-

进口熊猫作为螺纹中径

将地质公园作为每日加仑数(gallons per day)导入

从匀称的.几何学导入点

从matplotlib导入pyplot作为plt

从matplotlib.ticker导入函数格式化程序

# 读取数据

文件路径='。/数据-使用/高程数据csv '

rankings_colname=['名称','标记','经度','纬度','高度'];

df=pd.read_csv(文件路径,标题=无,名称=排名_列名)

# print(df.head(5))#输出前五行数据查看

xy=[zip中正常男性染色体组型的点(xy )( df['经度],df['纬度'])]

pts=gpd .地理系列(xy) #创建点要素数据集

#保存为自行榴弹炮(自行榴弹炮)文件

pts.to_file(./输出/展高程点' shp ',驱动程序='ESRI形状文件,编码='utf-8 ')

''无花果是用来设置图像大小参数,斧头是行列有多少个点'''

fig,ax=plt.subplots(figsize=(8,6)) #返回一个包含数字和轴线对象的元组

ax=pts.plot(ax=ax,

facecolor='white ',

edgecolor='black ',

标记='X ',

线宽=0.5,#内外符号比例系数

markersize=12,

标签='高程点)

# 地图标注

new_texts=[plt.text(x_ 1,y_ 1,text,fontsize=8) for x_,y_,text in

zip(df['经度],df['纬度],df['名称'])]

# 设置坐标轴

def formatnum(x,pos):

#返回'$%.1f$x$10^{4}$' % (x/10000)#科学计数法显示

return int(x) #取整显示

formatter=func formatter(格式编号)

ax.yaxis.set_major_formatter(格式化程序)

# 美观起见隐藏顶部与右侧边框线

ax.spines['右']。set_visible(False)

ax.spines['top'].set_visible(False)

plt.grid(True,alpha=0.4) #显示网格,透明度为50%

ax.legend(title='图例,loc='右下,ncol=1,shadow=True) #添加图例

plt.title('展高程点,fontdict={'weight': 'normal ',' size': 20}) #设置图名改变图标题字体

# 保存图片

' plt.savefig('图像/展高程点. png ',dpi=300,bbox_inches='tight ',pad_inches=0)

plt.show()

点集转面

将一系列点的集合转为面状要素类,下面以甘肃省的地震带为例(字段对应:名称,面索引,点索引,经度,纬度)。

数据预览

效果预览

实现代码

将地质公园作为每日加仑数(gallons per day)导入

进口熊猫作为螺纹中径

从匀称的.几何学导入多边形

从matplotlib导入pyplot作为plt

raw=pd.read_excel(' ./数据-使用/甘肃省地震带. xls') #原始数据

# 转换为面要素

output=raw.groupby('id') \。应用(lambda df: Polygon([(x,y) for x,y in zip(df['经度],df['纬度']))))\。to_frame(name='geometry ')

# 转换为地理数据框架

输出=gpd .地理数据框架(输出,crs='EPSG:4326 ')

output.plot()

# 地图标注

new _经度=raw。group by(' name ',as_index=False),['经度'].平均值()

new_latitude=raw.groupby('name ',as_index=False)['latitude'].平均值()

new_df=pd.merge(pd .数据帧(新经度),pd .数据框架(新纬度))

new_texts=[plt.text(x_,y_,text,fontsize=8) for x_,y_,text in

zip(new_df['经度],new_df['纬度],new_df['名称'])]

# 导出shapefile

输出到文件('输出/地震带shp’.

plt.show()

创建缓冲区、多环缓冲区

实现代码:

导入操作系统

匀称地进口

将地质公园作为每日加仑数(gallons per day)导入

将matplotlib.pyplot作为plt导入

polygon=shapely . geometry . polygon([(0,0),(1,0),(1,1),(0,1)])

#分别绘制多边形和多边形前向缓冲区。坐标系为WGS1984,单位为度。

cq=gpd。地理系列([多边形,

多边形.缓冲区(距离=1),

多边形.缓冲区(距离=3)],

crs='EPSG:4326 ')

#将数据导出为shapefile文件

cq.to_file('。/output/{}。嘘。格式(os.path.basename(__file__)。替换('。py ','')),

驱动程序='ESRI形状文件',

编码='utf-8 ')

ax=cq.plot(alpha=0.2)

Ax.axis('off') #取消坐标轴的显示

plt.show()

写在最后

随着相关完整代码的下载,还有更多有趣的内容,有兴趣的朋友可以自己实践一下。喜欢的朋友可以关注一下,后续会继续更新,精彩无限——

链接:https://pan.baidu.com/s/1g7G8sQ17-9XIhojyQ1M7Ww

提货代码:59vz

最后给你一个强安利学习博客:https://www.cnblogs.com/feffery/tag/geopandas/.

以上是python geopandas读取和创建shapefile文件方法的详细内容。关于python读取shapefile文件的更多信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: