作者:阿振 写作时间:2020-06-13 又是一个周末 ---- 开篇 《Python空间数据处理实战》系列的博文好久都没有更新了,今天乘周末有点时间,补了个觉,然后写几篇博文。...关于Python空间数据处理,如果大家有什么想看到的内容,欢迎评论区留言,我会增加一些大家需要的内容! 今天我打算用四篇博客简要介绍一下如何对空间矢量数据的属性数据进行操作。...Show me the code. from osgeo import ogr ogr.UseExceptions() # 首先定义每个省全称到简称的映射字典 names = { '北京':...defn.GetName()} -> {defn.GetType()} -> {defn.GetWidth()}') # 添加一个省简称的字段 field: ogr.FieldDefn = ogr.FieldDefn...注意我们这里新建的字段的类型是字符串类型ogr.OFTString,当然我们还可以新建其他类型的字段,例如整形ogr.OFTInteger,实数形ogr.OFTReal,日期型ogr.OFTDate等。
引言 在python与地理空间分析(1)与(2)中我们介绍了GIS中常用的数据类型、python在处理地理空间数据时用到的包以及给定经纬度计算空间距离的算法,本期我们主要介绍对地理空间分析中常用到的矢量数据...的字典和列表等数据类型一模一样,可以通过python自带的json库直接解析。...python中提供了多种处理Shapefile文件的第三方包,例如PyShp,Shapely,Fiona,GeoPandas以及basemap和cartopy包对shp文件的可视化,但大多都是基于OGR...kml文件 Conclusion 本期主要介绍了python GDAL/OGR对shp文件的读写和格式转换,下一部分将对shp文件的空间分析算法和常用操作进行介绍,例如判断两个shp的交并差补以及点插值为面等算法内容...Python命名空间和作用域介绍 中国地图的正确打开方式
从这篇博文开始,我们会简单介绍几种GIS系统中最常见最简单的空间分析功能,并使用Python的GDAL API进行实现。...首先,我们来看一下开源GIS软件QGIS中提供的几种简单的空间分析工具,我们接下来的几篇博文会介绍如何使用Python脚本实现这些功能。 ?...from pathlib import Path import ogr ogr.UseExceptions() in_ds: ogr.DataSource = ogr.Open('.....) def_feature: ogr.FeatureDefn = out_lyr.GetLayerDefn() # 遍历原始的Shapefile文件给每个Geometry做Buffer操作 for feature...这里我们的空间投影直接从原始的Shapefile中进行读取,输入的空间几何体类型设置为ogr.wkbPolygon。
代码演示 import ogr ogr.UseExceptions() ds_province: ogr.DataSource = ogr.Open('.....使用Python的内置filter()函数对省进行过滤,通过NAME字段找出湖北省。filter()函数的第一个参数是一个自定义函数,第二个参数是一个可迭代对象iterable。...代码演示 import ogr ogr.UseExceptions() ds: ogr.DataSource = ogr.Open('.....city.GetGeometryRef())) for i in range(1, 4): print(selected[i].GetField('name')) del ds 方法总结 跟案例一一样,我们使用Python...接着我们使用Python内置函数sorted()根据每个城市到武汉市的距离进行排序。
丰富的科学计算库分析数据,得出科学结论 有时候也需要自己生产数据,生成shapefile供其他GIS系统读写 生产数据可以在有GUI的GIS系统中手工操作,也可以通过编程语言批量操作 用python的优点...、删除或更新之后进行获取 如果先获取图层信息,后插入,基于过时信息插入的要素,会与事实不符,导致python崩溃 # 将一个shp文件中的要素写入另一个文件 import sys from osgeo...在GDAL/OGR中,不恰当的使用几何对象会导致python崩溃!...处理几何对象 使用python语言,批量输出几何对象,可代替在GIS软件中的要素创建和编辑操作,极大提高数据处理效率 下面介绍如何: 从零开始创建点、线、面几何对象 编辑已经存在的几何要素 GDAL支持的几何要素...python处理矢量数据就到这里啦!
首先,我们来看看使用SQL进行查询的代码。 from osgeo import ogr ogr.UseExceptions() ds: ogr.DataSource = ogr.Open('.....')) # 选择出中学数量最多的省份 # 我尝试使用MAX函数和嵌套的SELECT语句进行实现,但是执行报错,应该是OGR不支持嵌套的SQL查询 query: str = f'SELECT NAME,...然后使用ExecuteSQL()方法执行查询,得到的查询结果仍然是一个ogr.Layer图层类,但是图层中的要素属性只包含我们查询语句中指定的字段 对于第二个案例,我们本来可以使用一个嵌套的SELECT...from osgeo import ogr ogr.UseExceptions() ds: ogr.DataSource = ogr.Open('.....Feature要素集合以后,使用Python内置的函数对该集合进行过滤,排序等操作得到我们想要的查询结果。
可供选择的矢量格式数目很饿的,开源矢量库OGR支持超过86种矢量格式,FME支持超过188种矢量格式。...文件格式,例如OGR库,python中解析Shapefile文件的模块大都是基于OGR库的。...常用的python地理空间分析工具 python是一门非常强大的编程语言,对于地理空间分析方面的应用有多种包提供支持,常见的python python的标记、标签解析器 python的minidom模块是一个历史悠久...) geojs=geojson.dump(p) OGR库 OGR库是python处理矢量数据的通用库,也是许多处理矢量数据包的依赖项。...;计算5个单位的缓冲区分析,并计算缓冲区的面积 Fiona Fiona模块为OGR哭的数据访问功能提供了一套简洁的python api,大大提高了OGR库在python中的易用性。
方法介绍 跟栅格数据投影转换一样,使用GDAL库,我们有两种方法进行矢量数据的重投影: 使用命令工具及其对应的命令行API接口进行转换(简单,准确,实践中一定要用这种方法) GDAL提供了ogr2ogr...命令行工具进行矢量数据投影转换,命令如下:ogr2ogr -t_srs "+proj=aea +lat_1=25 +lat_2=47 +lat_0=30 +lon_0=105 +x_0=0 +y_0=0...OK GDAL对该命令的封装的C/C++函数是GDALVectorTranslate(),Python中是gdal.VectorTranslate() 使用GDAL提供的基本API进行实现 如果要自己利用基本...API函数实现的话,基本思路如下: 利用osgeo.ogr.Driver.CreateDataSource()创建输出数据 根据源文件创建目标文件的属性字段定义 利用osgeo.osr.CoordinateTransformation...对象将源文件中的Geometry对象转为目标文件中的Geometry对象(其实质是进行不同投影系统下空间几何体的坐标转换) 遍历源文件,依次将所有几何体的Geometry及其属性写入目标文件 代码实现
GDAL库由OGR和GDAL项目合并而来,OGR主要用于空间要素矢量矢量数据的解析,GDAL主要用于空间栅格数据的读写。...该库在C/C++/python/ruby/VB/java/C#(这个暂时不完全支持)下都能用。 电脑环境准备 Anaconda版本: ? Python版本: ?...从上面的运行结果来看我们已经成功在Python3中安装GDAL库。...选择你想下载的Gdal版本 可能你会问怎么找对应的版本? cp37表明对应python3.7版本,win32表明对应32位,win_amd64表明对应64位。...由于我的电脑是64位,python版本是python3.6 所以我选择下载这个文件 ? 下载大小为32.6M: ? 5.打开Anaconda Prompt切换到whl文件所在的相应文件目录。
4 GDAL/OGR功能特点· 多格式支持:GDAL/OGR支持多种栅格和矢量地理空间数据格式,包括ESRI Shapefiles、S-57、SDTS、PostGIS、Oracle Spatial等。...· 多语言支持:GDAL/OGR提供了多种编程语言的绑定,如C、C++、Perl、Python、Java、C#等。· 高性能:GDAL/OGR使用面向对象的C++语言编写,具有很高的执行效率。...应用场景· 遥感数据处理:GDAL/OGR适用于遥感数据的处理和分析,支持多种卫星数据和地理信息系统数据格式。...· 地理空间数据转换:GDAL/OGR提供了强大的数据转换功能,适用于需要跨平台数据处理的场景。...QGIS、GeoServer、PostgreSQL with PostGIS、GDAL/OGR、MapServer和CesiumJS等开源项目在各自的应用领域中表现出色,广泛应用于政府、企业、科研等多个领域
,优势便更加明显,你可以选择将很多需要做空间计算的步骤转移到Postgis数据库内进行计算,要知道Postgis提供的空间计算能力与R和Python这种应用导向的工具相比,优势要大得多。...rstudy/CHN_adm/bou2_4p.shp", encoding="utf-8", use_iconv=TRUE )) OGR...use_iconv=TRUE, encoding = "utf-8", stringsAsFactors = FALSE )) OGR...mapdata/china.topojson", encoding="utf-8", use_iconv=TRUE )) OGR...postgres' password='708965'" l_ply(input_list,task,conn) } #启动任务 Project_io("D:/R/mapdata/Province") Python-gis
材料: PG数据库(postgreSQL),python,postgis(重点) 过程: Tip~首先,我想先说一下在python中运行出现的报错问题(如果你们遇到这个问题可以看一眼,如果你没遇到这个问题...不管怎么样,你需要安装好Python和PostresSQL数据库~这里不加展开了,然后你需要安装~~~~~~PostGIS~~~~~~由PostGIS官网下载: http://www.postgis.org...准备就绪后进入pg数据库的sql界面,输入: CREATE EXTENSION postgis; (这步可以忽略,如果python运行出错,回头运行也可以) 确认PosrGIS(如下图) 首先,你需要有一个...('ogr2ogr '+'-overwrite '+'-f '+'"'+"PostgreSQL"+'"'+' PG:'+'"'+"host=localhost user=user dbname=dbname...password=password"+'"'+' '+'"'+"D:/Thesis/fjsouthwest/grid/mxn/mxn.shp"+'"') 往期 Python-gdal离线文档下载
DELETE)操作,这篇我们聊聊数据的更新操作(UPDATE)。...案例介绍 这里我们要处理的数据是中国地图分省的矢量Shapefile,是一个面状数据。该数据有一个NAME字段,给出了每个省的名称。...思路是我们遍历图层中的每一个Feature要素,然后通过ogr.Feature的SetField()方法更新属性值。 代码展示 Talk is cheap....Show me the code. from osgeo import ogr ogr.UseExceptions() # 打开一个Shapefile ds: ogr.DataSource = ogr.Open...使用GetLayer()方法获取图层,然后使用for循环遍历图层中的要素。通过GetField()方法获取需要修改的字段,然后通过SetField()方法修改字段。
概述: 本文讲述如何在Python中用GDAL实现根据输入矢量边界对栅格数据的裁剪。...-*- """ @author lzugis @date 2017-06-02 @brief 利用shp裁剪影像 """ from osgeo import gdal, gdalnumeric, ogr...rasterized clipper shapefile # to a mask for use within GDAL. def imageToArray(i): """ Converts a Python..., i.im.size[0] return a def arrayToImage(a): """ Converts a gdalnumeric array to a Python...info srcImage = gdal.Open(raster_path) geoTrans = srcImage.GetGeoTransform() # Create an OGR
代码展示 from pathlib import Path import ogr ogr.UseExceptions() # 读取被裁剪的数据 in_ds: ogr.DataSource = ogr.Open.../data/County.shp') in_lyr: ogr.Layer = in_ds.GetLayer() # 读取裁剪范围数据 method_ds: ogr.DataSource = ogr.Open.../data/YellowRiver.shp') method_lyr: ogr.Layer = method_ds.GetLayer() fname: str = 'Clipped.shp' # 创建被裁剪以后的输出文件...(fname) # 新建DataSource,Layer out_ds: ogr.DataSource = driver.CreateDataSource(fname) out_lyr: ogr.Layer...方法总结 首先我们使用ogr.Open()函数分别读取被裁剪的数据以及裁剪范围数据;使用GetLayer()方法获取数据的图层。裁剪范围数据在GDAL中被称为Method Layer。
GDAL库由OGR和GDAL项目合并而来,OGR主要用于空间要素矢量矢量数据的解析,GDAL主要用于空间栅格数据的读写。此外,空间参考及其投影转换使用开源库 PROJ.4进行。...GDAL提供了C/C++借口,并且通过SWIG提供了Python,Java,C#等的调用借口。当我们在Python中调用GDAL的API函数时,其实底层执行的是C/C++编译的二进制文件。...对一个上北下南的图像,GT(2)和GT(4)等于0, GT(1)是像元的宽度, GT(5)是像元的高度。(GT(0),GT(3))坐标对表示左上角像元的左上角坐标。...OGR矢量数据模型中比较重要的几个概念: Geometry(OGRGeometry类表示了一个空间几何体,包含几何体定义,空间参考,以及作用在几何体之上的空间操作,几何体和OGC WKB,WKT格式直接的导入导出...总结一下:一个数据集(Dataset)可以包含多个图层(Layer),一个图层中可以包含多个空间要素(Feature),一个Feature由一个空间几何体(Geometry)及其属性构成 参考资料:OGR
基本思路 使用GDAL创建Shapefile数据的基本步骤如下: 使用osgeo.ogr.Driver的CreateDataSource()方法创建osgeo.ogr.DataSource矢量数据集...使用osgeo.ogr.DataSource的CreateLayer()方法创建一个图层 使用osgeo.ogr.FieldDefn()定义Shapefile文件的属性字段 创建osgeo.ogr.Feature...对象,设置每个属性字段的值,使用Feature对象的SetGeometry()定义几何属性 创建Feature对象以后,使用osgeo.ogr.Layer的CreateFeature()添加Feature...中的几何数据。...= ogr.FieldDefn('CenterX', ogr.OFTReal) layer.CreateField(fcx) fcy = ogr.FieldDefn('CenterY', ogr.OFTReal
两种解决方案: 一、将整个shapefile转为GeoJSON然后直接导入mongoDB数据库中 首先,将shapefile数据转为WGS84地理坐标,然后使用GDAL的命令行工具ogr2ogr...进行格式的转换,转换命令如下: ogr2ogr -f geoJSON continents.json continents.shp 删除生成JSON文件的前两行{ "type": "FeatureCollection...最后,使用mongodb的mongoimport工具进行导入: mongoimport --db world --collection continents 的。...二、更加细粒度的存储方法是将shapefile中的每个feature取出来转为GeoJSON存入mongodb 具体实现代码入下(Java版本): package cn.tzy.mongodb;
总结就是,暂时没有直接添加列的办法,只能先读入python,利用pandas写一个dataframe,加入新的列,再将整备好的dataframe写入数据库。...前提是二者之间的数据结构,长度形状一致。...参考:https://stackoverflow.com/questions/53850316/insert-python-numpy-array-into-postgresql-database 以上的不好用...,跟想象中不一样,得到的结果会在列方向上出现很多null值 from osgeo import gdal,ogr import struct import os import numpy as np path...src_ds.GetGeoTransform() rb=src_ds.GetRasterBand(1) shp_filename = 'D:/minxinan/zhandianpoint/121paixuwgs.shp' ds=ogr.Open
Show me the code. from osgeo import ogr ogr.UseExceptions() # 从给定图层中读取字段的定义,根据给定字段名称找到该字段的索引编号 def...get_field_index_by_name(layer: ogr.Layer, name: str): defs: ogr.FeatureDefn = layer.GetLayerDefn(...= ogr.Open('.....(layer, 'Abbr_1') layer.DeleteField(index) ds = None 方法总结 GDAL的图层ogr.Layer类提供了DeleteField()方法用于删除字段,但是该方法传入的参数必须是要删除字段的索引编号...该函数实现的逻辑是遍历传入的图层中的字段的定义,找到和给定名称相同的字段并返回其索引。有一种特殊情况是传入的字段名称在当前图层中并不存在,对于这种情况,我们直接抛出一个ValueError错误。
领取专属 10元无门槛券
手把手带您无忧上云