作者:阿振 写作时间:2020-06-13 又是一个周末 ---- 开篇 《Python空间数据处理实战》系列的博文好久都没有更新了,今天乘周末有点时间,补了个觉,然后写几篇博文。...关于Python空间数据处理,如果大家有什么想看到的内容,欢迎评论区留言,我会增加一些大家需要的内容! 今天我打算用四篇博客简要介绍一下如何对空间矢量数据的属性数据进行操作。...然后读取原始数据,新建一个属性字段Abbr,然后遍历数据中的每个Feature要素,取出NAME,再根据字典查询到当前NAME对应的Abbr填充进对应的字段即可。...使用ogr.FieldDefn()函数新建一个字段,然后添加到layer图层中。...接下来我们遍历layer中的feature,使用SetField()方法设置属性值。记得添加完属性值以后,需要使用SetFeature()方法将当前feature更新到涂层layer中去。
作者:阿振 开篇 GIS空间分析是通过对GIS系统中的空间地物的空间位置以及分布形态等空间特性进行分析推理等得到额外有用信息的过程。GIS空间分析包含广泛的内容,是GIS系统的核心功能。...从这篇博文开始,我们会简单介绍几种GIS系统中最常见最简单的空间分析功能,并使用Python的GDAL API进行实现。...首先,我们来看一下开源GIS软件QGIS中提供的几种简单的空间分析工具,我们接下来的几篇博文会介绍如何使用Python脚本实现这些功能。 ?...Buffer的参数是缓冲区的距离,距离的单位是投影坐标系中的默认单位。...最后使用CreateFeature()方法将该Feature添加到图层中。 如此循环,直到遍历完所有的Feature为止。
引言 在python与地理空间分析(1)与(2)中我们介绍了GIS中常用的数据类型、python在处理地理空间数据时用到的包以及给定经纬度计算空间距离的算法,本期我们主要介绍对地理空间分析中常用到的矢量数据...的字典和列表等数据类型一模一样,可以通过python自带的json库直接解析。...: # 创建要素 feature = ogr.Feature(layer.GetLayerDefn()) # 和设置字段内容进行关联 ,从数据源中写入数据 print(...kml文件 Conclusion 本期主要介绍了python GDAL/OGR对shp文件的读写和格式转换,下一部分将对shp文件的空间分析算法和常用操作进行介绍,例如判断两个shp的交并差补以及点插值为面等算法内容...Python命名空间和作用域介绍 中国地图的正确打开方式
作者:阿振 开篇 在前面四篇博客中我们主要讲了对于空间矢量数据的属性数据的增删改查,在这篇博文中我们要讲解空间查询–GIS系统很重要的一项功能。...实现思路是先从省的面状数据中找出湖北省,然后遍历城市的点数据看是否落在湖北省境内。...()函数读取Shapefile数据,使用GetLayer()获取当前图层,图层中包含了所有的Feature要素。...使用Python的内置filter()函数对省进行过滤,通过NAME字段找出湖北省。filter()函数的第一个参数是一个自定义函数,第二个参数是一个可迭代对象iterable。...接着我们使用Python内置函数sorted()根据每个城市到武汉市的距离进行排序。
> > # 从shapefile中读取点要素,以城市人口数据为例 import sys from osgeo import ogr # 打开数据源,打开图层 fn = 'E:/公众号/python...丰富的科学计算库分析数据,得出科学结论 有时候也需要自己生产数据,生成shapefile供其他GIS系统读写 生产数据可以在有GUI的GIS系统中手工操作,也可以通过编程语言批量操作 用python的优点...在GDAL/OGR中,不恰当的使用几何对象会导致python崩溃!...处理几何对象 使用python语言,批量输出几何对象,可代替在GIS软件中的要素创建和编辑操作,极大提高数据处理效率 下面介绍如何: 从零开始创建点、线、面几何对象 编辑已经存在的几何要素 GDAL支持的几何要素...# 创建点要素“火堆”,使用ogr.Geometry函数,设定要素类型为“点” firepit = ogr.Geometry(ogr.wkbPoint) # 设定点的坐标 # 向点对象中添加一个点的坐标
下面以两个案例进行介绍: 从给定数据中查询中学数量(HighSchool字段)大于1万所的省份 从给定数据中查询中学数量最多的省份 下面简单说一下使用GDAL进行属性数据查询的两种思路: 因为矢量数据的属性一般都是以关系表进行保存的...我们可以遍历图层Layer中包含的所有Feature要素,然后读取要素的属性数据进行筛选过滤得到我们想要的结果。 SQL查询方式 代码展示 Talk is cheap....from osgeo import ogr ogr.UseExceptions() ds: ogr.DataSource = ogr.Open('.....然后使用ExecuteSQL()方法执行查询,得到的查询结果仍然是一个ogr.Layer图层类,但是图层中的要素属性只包含我们查询语句中指定的字段 对于第二个案例,我们本来可以使用一个嵌套的SELECT...)) print(selected[0].GetField('HighSchool')) 方法总结 使用遍历Feature要素的方法进行查询是我们在获取了图层包含的所有Feature要素集合以后,使用Python
库,python中解析Shapefile文件的模块大都是基于OGR库的。...此外python中也提供了元素树(ElementTree)解析XML的工具,允许使用路径样式的语法对XML文档进行查询。...可以通过eval函数直接解析为python中的字典的数据形式,但是eval并不能支持所有JSON中的字符集,因此并不是一种可靠的处理方式。...库 OGR库是python处理矢量数据的通用库,也是许多处理矢量数据包的依赖项。...哭的数据访问功能提供了一套简洁的python api,大大提高了OGR库在python中的易用性。
方法介绍 跟栅格数据投影转换一样,使用GDAL库,我们有两种方法进行矢量数据的重投影: 使用命令工具及其对应的命令行API接口进行转换(简单,准确,实践中一定要用这种方法) GDAL提供了ogr2ogr...-t_srs选项制定输出数据投影,当然可以是ESPG,也可以是PROJ4或者OGC WKT格式的投影定义都OK GDAL对该命令的封装的C/C++函数是GDALVectorTranslate(),Python...中是gdal.VectorTranslate() 使用GDAL提供的基本API进行实现 如果要自己利用基本API函数实现的话,基本思路如下: 利用osgeo.ogr.Driver.CreateDataSource...()创建输出数据 根据源文件创建目标文件的属性字段定义 利用osgeo.osr.CoordinateTransformation对象将源文件中的Geometry对象转为目标文件中的Geometry对象(...)): field_def = layer_def.GetFieldDefn(i) dst_layer.CreateField(field_def) # 循环遍历源Shapefile中的几何体添加到目标文件中
GDAL库由OGR和GDAL项目合并而来,OGR主要用于空间要素矢量矢量数据的解析,GDAL主要用于空间栅格数据的读写。...该库在C/C++/python/ruby/VB/java/C#(这个暂时不完全支持)下都能用。 电脑环境准备 Anaconda版本: ? Python版本: ?...安装程序正在运行中: ? 这里输入 Y 表示同意 ? 当运行了结束后,出现下面这个画面: ? 检测一下,是否安装成功: ? 从上面的运行结果来看我们已经成功在Python3中安装GDAL库。...cp37表明对应python3.7版本,win32表明对应32位,win_amd64表明对应64位。 由于我的电脑是64位,python版本是python3.6 所以我选择下载这个文件 ?
3 PostgreSQL with PostGIS功能特点· 空间数据类型:PostgreSQL通过PostGIS扩展支持地理空间对象,允许在关系型数据库中存储、查询和管理地理空间数据。...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提供了强大的数据转换功能,适用于需要跨平台数据处理的场景。...应用场景· 地图制作和发布:MapServer可以制作各种不同类型的地图,并支持在Web浏览器中查看地图。
材料: PG数据库(postgreSQL),python,postgis(重点) 过程: Tip~首先,我想先说一下在python中运行出现的报错问题(如果你们遇到这个问题可以看一眼,如果你没遇到这个问题...不管怎么样,你需要安装好Python和PostresSQL数据库~这里不加展开了,然后你需要安装~~~~~~PostGIS~~~~~~由PostGIS官网下载: http://www.postgis.org...其次,将shp文件导入Geodataframe中。 再把Geodataframe写入pg数据库。...'geometry': Geometry(geometry_type ='POINT', srid=4326)} ) #"tsea"是表名 #dtype中的...代表具体字段,相当于'geometry'字段为地理信息 终于,顺利写入(鬼知道我在报错的过程中经历了什么): 更多的,利用GDAL写入shp也可以正常运行了: import os os.system('ogr2ogr
深感使用规范的存储系统来统一管理gis数据的好处,特别是数据量大了之后,优势便更加明显,你可以选择将很多需要做空间计算的步骤转移到Postgis数据库内进行计算,要知道Postgis提供的空间计算能力与R和Python...ropensci/geojsonio") library("geojsonio") library("rgdal") library("sf") library("maptools") 使用maptools包中的...文件单项导入的情况下,纯粹从时间上来看: sf > maptools > rgdal > geojsonio 这里值得一提的是,geojsonio包是封装的rgdal服务,性能上自然略逊rgdal一筹,以上四个包中,...sf包的超强IO能力所折服,sf包是一个非常强大的包,实现了基于simple features的所有特性,如果你了解一点儿Postgis的话,你会发现作者把大部分空间运算的函数名称设计的和Postgis中的函数一模一样...postgres' password='708965'" l_ply(input_list,task,conn) } #启动任务 Project_io("D:/R/mapdata/Province") Python-gis
作者:阿振 写作时间:2020-06-13 ---- 开篇 在上篇的《Shapfile属性操作之增》和《Shapefile属性操作之删》中我们分别介绍了对于空间矢量数据属性的增加(CREATE)和删除(...思路是我们遍历图层中的每一个Feature要素,然后通过ogr.Feature的SetField()方法更新属性值。 代码展示 Talk is cheap....Show me the code. from osgeo import ogr ogr.UseExceptions() # 打开一个Shapefile ds: ogr.DataSource = ogr.Open.../data/省级行政区.shp', update=True) layer: ogr.Layer = ds.GetLayer() # 填充属性值 for feature in layer: name...使用GetLayer()方法获取图层,然后使用for循环遍历图层中的要素。通过GetField()方法获取需要修改的字段,然后通过SetField()方法修改字段。
案例介绍 本文使用一个AOI区域(黄河流域区)区裁剪中国的县界(线要素),从而得到黄河流域区中的县界。...在上篇《GIS空间分析之Buffer》中我们是使用了Geometry类的Buffer()方法建立缓冲区的,而本篇中我们需要使用Layer图层类的Clip()方法进行矢量数据裁切。...代码展示 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...(fname) # 新建DataSource,Layer out_ds: ogr.DataSource = driver.CreateDataSource(fname) out_lyr: ogr.Layer
GDAL库由OGR和GDAL项目合并而来,OGR主要用于空间要素矢量矢量数据的解析,GDAL主要用于空间栅格数据的读写。此外,空间参考及其投影转换使用开源库 PROJ.4进行。...GDAL提供了C/C++借口,并且通过SWIG提供了Python,Java,C#等的调用借口。当我们在Python中调用GDAL的API函数时,其实底层执行的是C/C++编译的二进制文件。...类表示了空间参考信息,各种格式的空间参考的导入导出) Feature(OGRFeature类表示空间要素,一个空间要素是一个空间几何体及其属性的集合) Layer(OGRLayer表示一个图层,一个图层中可以包含很多个空间要素...) Dataset(GDALDataset抽象类表示一个矢量数据,一个Dataset可以包含多个图层) 总结一下:一个数据集(Dataset)可以包含多个图层(Layer),一个图层中可以包含多个空间要素...(Feature),一个Feature由一个空间几何体(Geometry)及其属性构成 参考资料:OGR Architecture
使用osgeo.ogr.DataSource的CreateLayer()方法创建一个图层 使用osgeo.ogr.FieldDefn()定义Shapefile文件的属性字段 创建osgeo.ogr.Feature...对象到当前图层 重复步骤4和5依次添加所有的Feature到当前图层即可 代码实现 下面的例子中,我们读取GeoJSON表示的中国省区数据,然后其转为Shapefile格式。...可以看到每个Feature都有一个properties字段和geometry字段,我们需要根据properties字段的信息创建Shapefile数据的属性表,根据geometry字段创建Shapefile中的几何数据...= ogr.FieldDefn('CenterX', ogr.OFTReal) layer.CreateField(fcx) fcy = ogr.FieldDefn('CenterY', ogr.OFTReal...) layer.CreateField(fcy) # 变量GeoJSON中的features for f in china['features']: # 新建Feature并且给其属性赋值
概述: 本文讲述如何在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
两种解决方案: 一、将整个shapefile转为GeoJSON然后直接导入mongoDB数据库中 首先,将shapefile数据转为WGS84地理坐标,然后使用GDAL的命令行工具ogr2ogr...进行格式的转换,转换命令如下: ogr2ogr -f geoJSON continents.json continents.shp 删除生成JSON文件的前两行{ "type": "FeatureCollection...工具进行导入: mongoimport --db world --collection continents < continents.json 这样子整个shapefile文件在mongodb中是以一个...二、更加细粒度的存储方法是将shapefile中的每个feature取出来转为GeoJSON存入mongodb 具体实现代码入下(Java版本): package cn.tzy.mongodb;...SimpleFeatureIterator sfIter = sfSource.getFeatures().features(); // 依次取出每一个Feature转为GeoJSON格式,然后插入到collection中
总结就是,暂时没有直接添加列的办法,只能先读入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('.....我们一般的业务需求是根据字段名称去进行删除操作,所以我自定义了一个get_field_index_by_name()函数用于从给定图层中查找给定字段名称对应的索引编号。...该函数实现的逻辑是遍历传入的图层中的字段的定义,找到和给定名称相同的字段并返回其索引。有一种特殊情况是传入的字段名称在当前图层中并不存在,对于这种情况,我们直接抛出一个ValueError错误。
领取专属 10元无门槛券
手把手带您无忧上云