电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python geopandas讀取、創(chuàng)建shapefile文件的方法

瀏覽:95日期:2022-06-15 16:01:38

shapefile是GIS中非常重要的一種數(shù)據(jù)類(lèi)型,在ArcGIS中被稱為要素類(lèi)(Feature Class),主要包括點(diǎn)(point)、線(polyline)和多邊形(polygon)。作為一種十分常見(jiàn)的矢量文件格式,geopandas對(duì)shapefile提供了很好的讀取和寫(xiě)出支持,其DataFrame結(jié)構(gòu)相當(dāng)于GIS數(shù)據(jù)中的一張屬性表,使得可以直接操作矢量數(shù)據(jù)屬性表,使得在python中操作地理數(shù)據(jù)更方便。本文給大家介紹下用Python腳本中對(duì)Shapefile文件(.shp,.shx,.dbf等格式)進(jìn)行讀寫(xiě)操作。

開(kāi)發(fā)準(zhǔn)備

由于geopandas有好幾個(gè)依賴庫(kù),推薦大家使用 Miniconda或是 Anaconda來(lái)安裝geopandas。

安裝命令:

conda install -c conda-forge geopandas

國(guó)內(nèi)鏡像:

conda install -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge geopandas

使用導(dǎo)入:import geopandas

我這里用的是geopandas 0.7的版本,版本間差異是不太大,最新0.8版本新增了一些查詢、入庫(kù)方面的特性。

shapefile文件信息的讀取

相比pyshp庫(kù),geopandas庫(kù)的數(shù)據(jù)讀取、展示、分析、拓展的效果要更好。它可以讀取zip中的shapefile,還可以讀取GeoJson、ArcGIS中地理數(shù)據(jù)庫(kù)gdb,以及QGIS中GeoPackage 存放的矢量數(shù)據(jù)。

import geopandas as gpdfrom matplotlib import pyplot as pltdata = gpd.read_file(r’E:gisData行政區(qū)劃數(shù)據(jù)2019省.shp’)#讀取磁盤(pán)上的矢量文件#data = gpd.read_file(’shapefile/china.gdb’, layer=’province’)#讀取gdb中的矢量數(shù)據(jù)print(data.crs) # 查看數(shù)據(jù)對(duì)應(yīng)的投影信息print(data.head()) # 查看前5行數(shù)據(jù)data.plot()plt.show()#簡(jiǎn)單展示

顯示效果:

python geopandas讀取、創(chuàng)建shapefile文件的方法

shapefile文件的創(chuàng)建

要素類(lèi)的創(chuàng)建效率很高,既能創(chuàng)建要素實(shí)體,也能寫(xiě)入屬性信息和定義投影。下面先簡(jiǎn)單介紹下三種要素類(lèi)的創(chuàng)建方法。

點(diǎn)狀要素類(lèi)的創(chuàng)建

python geopandas讀取、創(chuàng)建shapefile文件的方法

核心代碼:

# 對(duì)應(yīng)shapely.geometry中的Point,用于表示單個(gè)點(diǎn),下面我們創(chuàng)建一個(gè)由若干Point對(duì)象組成cq = geopandas.GeoSeries([geometry.Point(110, 60), geometry.Point(110.5, 50.4), geometry.Point(120, 55), geometry.Point(107.8, 54.6), geometry.Point(114.6, 50)], crs=’EPSG:4326’, # 指定坐標(biāo)系為WGS 1984 index=[’一號(hào)’, ’二號(hào)’, ’三號(hào)’, ’四號(hào)’, ’五號(hào)’], # 相關(guān)的索引 )# 導(dǎo)出數(shù)據(jù)為shapefile文件cq.to_file(’./output/{}.shp’.format(os.path.basename(__file__).replace(’.py’, ’’)), driver=’ESRI Shapefile’, encoding=’utf-8’)

線狀要素類(lèi)的創(chuàng)建

python geopandas讀取、創(chuàng)建shapefile文件的方法

核心代碼:

# 這里shapely.geometry.LineString([(x1, y1), (x2, y2), ...])用于創(chuàng)建多點(diǎn)按順序連接而成的線段cq = geopandas.GeoSeries([geometry.LineString([(0, 0), (1, 1), (1, 0)]), geometry.LineString([(0.5, 2), (0, 1), (-1, 0)])], crs=’EPSG:4326’, index=[’一號(hào)線’, ’b’])cq.to_file(’./output/{}.shp’.format(os.path.basename(__file__).replace(’.py’, ’’)), driver=’ESRI Shapefile’, encoding=’utf-8’)

面狀要素類(lèi)的創(chuàng)建

python geopandas讀取、創(chuàng)建shapefile文件的方法

核心代碼:

# 對(duì)應(yīng)shapely.geometry中的Polygon,用于表示面,下面我們創(chuàng)建一個(gè)由若干Polygon對(duì)象組成cq = geopandas.GeoSeries([geometry.Polygon([(14, 14), (13, 18), (20, 11), (18, 10)]), geometry.Polygon([(0, 0), (10, 0), (10, 10), (0, 10)], [((1, 3), (5, 3), (5, 1), (1, 1)), ((9, 9), (9, 8), (8, 8), (8, 9))]), geometry.Polygon([(11, 2), (11, 10), (12, 10), (12, 2)]) ], index=[’簡(jiǎn)單面’, ’復(fù)雜面’, ’c區(qū)’], # 構(gòu)建一個(gè)索引字段 crs=’EPSG:4326’, # 坐標(biāo)系是:WGS 1984 )cq.to_file(’./output/{}.shp’.format(os.path.basename(__file__).replace(’.py’, ’’)), driver=’ESRI Shapefile’, encoding=’utf-8’)拓展應(yīng)用實(shí)例

展高程點(diǎn)

高程點(diǎn)文件存儲(chǔ)格式與CASS中讀取的DAT格式一致,示例:【1,ZDH ,450000.000,4100000,20002,DYG,450000.000,4100000,2000 】其中,“1”代表的是“點(diǎn)號(hào)”,“ZDH”代表的是“代碼”,之后的分別是“東坐標(biāo)、北坐標(biāo)、高程值”即“Y、X、H ”或者是“X、Y、H ”

AutoCAD中展點(diǎn)效果

python geopandas讀取、創(chuàng)建shapefile文件的方法

geopandas中展點(diǎn)效果

python geopandas讀取、創(chuàng)建shapefile文件的方法

實(shí)現(xiàn)代碼

# -*- coding: utf-8 -*-import pandas as pdimport geopandas as gpdfrom shapely.geometry import Pointfrom matplotlib import pyplot as pltfrom matplotlib.ticker import FuncFormatter# 讀取數(shù)據(jù)file_path = ’./data-use/高程數(shù)據(jù).csv’rankings_colname = [’name’, ’mark’, ’longitude’, ’latitude’, ’height’];df = pd.read_csv(file_path, header=None, names=rankings_colname)# print(df.head(5))#輸出前五行數(shù)據(jù)查看xy = [Point(xy) for xy in zip(df[’longitude’], df[’latitude’])]pts = gpd.GeoSeries(xy) # 創(chuàng)建點(diǎn)要素?cái)?shù)據(jù)集#保存為SHP文件pts.to_file(’./output/展高程點(diǎn).shp’, driver=’ESRI Shapefile’, encoding=’utf-8’)'''fig是用來(lái)設(shè)置圖像大小參數(shù),ax是行列有多少個(gè)點(diǎn)'''fig, ax = plt.subplots(figsize=(8, 6)) # 返回一個(gè)包含figure和axes對(duì)象的元組ax = pts.plot(ax=ax, facecolor=’white’, edgecolor=’black’, marker=’X’, linewidth=0.5, # 內(nèi)外符號(hào)比例系數(shù) markersize=12, label=’高程點(diǎn)’)# 地圖標(biāo)注new_texts = [plt.text(x_ + 1, y_ + 1, text, fontsize=8) for x_, y_, text in zip(df[’longitude’], df[’latitude’], df[’name’])]# 設(shè)置坐標(biāo)軸def formatnum(x, pos): # return ’$%.1f$x$10^{4}$’ % (x / 10000)#科學(xué)計(jì)數(shù)法顯示 return int(x) # 取整顯示formatter = FuncFormatter(formatnum)ax.yaxis.set_major_formatter(formatter)# 美觀起見(jiàn)隱藏頂部與右側(cè)邊框線ax.spines[’right’].set_visible(False)ax.spines[’top’].set_visible(False)plt.grid(True, alpha=0.4) # 顯示網(wǎng)格,透明度為50%ax.legend(title='圖例', loc=’lower right’, ncol=1, shadow=True) # 添加圖例plt.title(’展高程點(diǎn)’, fontdict={’weight’: ’normal’, ’size’: 20}) # 設(shè)置圖名&改變圖標(biāo)題字體# 保存圖片plt.savefig(’images/展高程點(diǎn).png’, dpi=300, bbox_inches=’tight’, pad_inches=0)plt.show()

點(diǎn)集轉(zhuǎn)面

將一系列點(diǎn)的集合轉(zhuǎn)為面狀要素類(lèi),下面以甘肅省的地震帶為例(字段對(duì)應(yīng):名稱,面索引,點(diǎn)索引,經(jīng)度,緯度)。

數(shù)據(jù)預(yù)覽

python geopandas讀取、創(chuàng)建shapefile文件的方法

效果預(yù)覽

python geopandas讀取、創(chuàng)建shapefile文件的方法python geopandas讀取、創(chuàng)建shapefile文件的方法

實(shí)現(xiàn)代碼

import geopandas as gpdimport pandas as pdfrom shapely.geometry import Polygonfrom matplotlib import pyplot as pltraw = pd.read_excel(’./data-use/甘肅省地震帶.xls’) # 原始數(shù)據(jù)# 轉(zhuǎn)換為面要素output = raw.groupby(’id’) .apply(lambda df: Polygon([(x, y) for x, y in zip(df[’longitude’], df[’latitude’])])) .to_frame(name=’geometry’)# 轉(zhuǎn)換為GeoDataFrameoutput = gpd.GeoDataFrame(output, crs=’EPSG:4326’)output.plot()# 地圖標(biāo)注new_longitude = raw.groupby(’name’, as_index=False,)[’longitude’].mean()new_latitude = raw.groupby(’name’, as_index=False)[’latitude’].mean()new_df = pd.merge(pd.DataFrame(new_longitude),pd.DataFrame(new_latitude))new_texts = [plt.text(x_ , y_ , text, fontsize=8) for x_, y_, text in zip(new_df[’longitude’], new_df[’latitude’], new_df[’name’])]# 導(dǎo)出shapefileoutput.to_file(’output/地震帶.shp’) plt.show()

創(chuàng)建緩沖區(qū)、多環(huán)緩沖區(qū)

python geopandas讀取、創(chuàng)建shapefile文件的方法

實(shí)現(xiàn)代碼:

import osimport shapelyimport geopandas as gpdimport matplotlib.pyplot as pltpolygon = shapely.geometry.Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])# 分別繪制多邊形、多邊形正向緩沖區(qū),坐標(biāo)系是WGS1984,單位是度cq = gpd.GeoSeries([polygon, polygon.buffer(distance=1), polygon.buffer(distance=3)], crs=’EPSG:4326’)# 導(dǎo)出數(shù)據(jù)為shapefile文件cq.to_file(’./output/{}.shp’.format(os.path.basename(__file__).replace(’.py’, ’’)), driver=’ESRI Shapefile’, encoding=’utf-8’)ax = cq.plot(alpha=0.2)ax.axis(’off’) # 取消坐標(biāo)軸的顯示plt.show()寫(xiě)在最后

附相關(guān)完整代碼的下載,還有更多有趣的內(nèi)容,感興趣的朋友們可以自行實(shí)踐。喜歡的朋友們可以點(diǎn)個(gè)關(guān)注,后續(xù)將持續(xù)更新,精彩無(wú)限^ - ^

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

提取碼: 59vz

最后給大家強(qiáng)烈安利一個(gè)geopandas學(xué)習(xí)博客: https://www.cnblogs.com/feffery/tag/geopandas/

以上就是python geopandas讀取、創(chuàng)建shapefile文件的方法的詳細(xì)內(nèi)容,更多關(guān)于python讀取shapefile文件的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | 流水线电子称-钰恒-上下限报警电子秤-上海宿衡实业有限公司 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 标策网-专注公司商业知识服务、助力企业发展 | hc22_hc22价格_hc22哈氏合金—东锜特殊钢 | 立式硫化罐-劳保用品硫化罐-厂家直销-山东鑫泰鑫硫化罐厂家 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 碎石机设备-欧版反击破-欧版颚式破碎机(站)厂家_山东奥凯诺机械 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 | 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 线粒体膜电位荧光探针-细胞膜-标记二抗-上海复申生物科技有限公司 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 山东艾德实业有限公司| 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 洛阳装修公司-洛阳整装一站式品牌-福尚云宅装饰 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 磁力抛光机_磁力研磨机_磁力去毛刺机_精密五金零件抛光设备厂家-冠古科技 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 胀套-锁紧盘-风电锁紧盘-蛇形联轴器「厂家」-瑞安市宝德隆机械配件有限公司 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 税筹星_灵活用工平台_企业财务顾问_财税法薪综合服务平台 |