GDAL API入门
GDAL_API Tutorial
GDAL API TutorialBefore opening a GDAL supported raster datastore it is necessary to register drivers.在打开一个GDAL支持的栅格资料之前,必需要注册驱动。
There is a driver for each supported format.每个驱动对应各自支持的格式。
Normally this is accomplished with the GDALAllRegister() function which attempts to register all known drivers, including those auto-loaded from .so files usingGDALDriverManager::AutoLoadDrivers().通常这个会被GDALAllRegister()函数完成,试图去注册所有已知的驱动包括使用GDALDriverManager::AutoLoadDrivers()从.so文件来加载。
If for some applications it is necessary to limit the set of drivers it may be helpful to review the code from gdalallregister.cpp.如果一些程序有必要去限制驱动集合,检查gdalallregister.cpp的代码将会有所帮助,Python automatically calls GDALAllRegister() when the gdal module is imported.当gdal模块被导入时,Python会自动调用GDALAllRegister()。
Once the drivers are registered, the application should call the free standing GDALOpen() function to open a dataset, passing the name of the dataset and the access desired(GA_ReadOnly or GA_Update).一但驱动被注册,程序将会调用独立的GDALOpen()函数通过dataset的名称和需要的存取方式(GA_ReadOnly或GA_Update)来打开dataset.Note that if GDALOpen() returns NULL it means the open failed, and that an error messages will already have been emitted via CPLError().注意如果GDALOpen()返回NULL,意味着打开失败了,这个错误信息将会通过CPLError ()释放出。
gdal影像分块读取处理和写出的程序
gdal影像分块读取处理和写出的程序1.引言1.1 概述概述部分的内容可以简要介绍本文将要探讨的内容,即gdal影像分块读取处理和写出的程序。
可以提及gdal是一种功能强大的地理数据抽象库,它提供了许多用于处理栅格和矢量数据的函数和工具。
在本文中,我们将重点关注gdal在影像数据处理中的应用。
首先,我们将介绍gdal影像分块读取处理的原因和意义。
在处理大型影像数据时,一次性将整个影像加载到内存中可能会导致内存溢出或性能下降的问题。
因此,我们需要将影像划分为多个块,并逐块进行读取和处理。
接下来,我们将详细介绍gdal如何进行影像的分块读取处理,包括块的定义、读取方式和处理方法等。
其次,我们将讨论gdal影像写出的程序。
将处理后的影像数据写出到硬盘中是一个重要的步骤,方便我们后续的分析和应用。
我们将介绍gdal 如何进行影像数据的写出,包括文件格式的选择、参数设置和输出路径的指定等。
最后,我们将总结本文的主要内容,并展望gdal在影像数据处理领域的未来发展。
gdal作为一个开源的地理数据处理工具,具有广泛的应用前景和不断增长的用户群体。
希望本文对读者了解gdal的影像分块读取处理和写出的程序有所帮助,并能够在实际应用中发挥其优势和功能。
1.2 文章结构文章结构部分(文章1.2)的内容如下:本篇长文主要分为以下几个部分:引言、正文和结论。
通过这个结构,将全面探讨GDAL影像分块读取处理和写出的程序。
引言部分将对本文的主题进行概述和解释。
我们将介绍GDAL (Geospatial Data Abstraction Library)的概念和功能,并介绍影像分块读取处理和写出的背景和意义。
同时,我们还会强调本文的目的和重要性。
正文部分将重点探讨GDAL影像分块读取处理和写出的程序。
在2.1小节中,我们将详细介绍GDAL对影像的分块读取处理方法,包括读取原始影像、设置分块大小和处理单个块的具体步骤。
在2.2小节中,我们将介绍GDAL影像写出程序的开发流程,包括对处理后的影像进行写出、设置输出格式和写出完成后的处理。
很好的GDAL初学者资料
很好的GDAL初学者资料1、编译加使用:/gisblog/archive/2008/10/06/3021933.aspx如何在CSharp中使用GDAL?收藏GDAL库的简洁、高效深受开发人员的喜爱,很多开源的GIS软件甚至是商业GIS软件都使用了这个库。
GDAL使用C++,在Visual studio环境下开发,对C,C++的支持当然不会有什么问题。
但对于C#、Python、Java来说,过程就相对繁琐一些,对初学者造成了不少的麻烦。
本文以GDAL1.50为例,详细说明在CSharpe语言中使用GDAL的环境配置问题,至于Python的环境配置问题,在另一篇文章“如何在CSharpe中使用GDAL”中另行讨论。
希望对初用GDAL的人员有所帮助。
GDAL从1.4.1开始添加了swig,以支持.NET环境下的C#语言。
在swig 文件夹中包含了C#源代码。
以下是主要的处理步骤:1、准备一个C++编译器。
建议使用Visual studio2005。
2、下载源代码。
地址:/gdal/gdal150.zip。
3、把gdal150.zip解压至“C:\gdal-1.5.0”,当然放在其它文件夹也可以。
4、修改源代码中的错误。
源文件“C:\gdal-1.5.0\frmts\leveller\levellerdataset.cpp”的第171行的内容如下:{ "?, kPI / 180.0, UNITLABEL_DEGREE },在?号后面加上双引呈",改成如下形式:{ "?", kPI / 180.0, UNITLABEL_DEGREE },你可以使用任何一种文本文件的编辑工具来进行修改。
笔者尝试过下载GDAL1.52的版本,存在同样的问题,真想不到GDAL库也会犯如此低级的错误。
5、创建安装的目标文件夹“C:\gdal-runtime”,稍后的编译配置中,我们将配置GDAL把编译后将会安装到这个文件夹内。
基于GDAL/OGR的测绘成果检查方法
基于GDAL/OGR的测绘成果检查方法测绘内业成果通常都有着严格的要求,包括字段名称、字段类型及赋值等方面。
为了提高内业成果的审核效率,可以开发专用工具来实现自动检查。
本文以开源的GIS库GDAL/OGR为例,详细介绍测绘成果审核的流程、方法及实行方式。
同时介绍GDAL/OGR库,抛砖引玉,拓展开源GIS技术在测绘行业中的应用。
标签:GDAL/OGR 开源GIS0引言测绘内业成果结果多为shape file、coverage、ESRI Geodatabase等通用的矢量数据格式,对这些格式的数据进行读取操作需要使用成熟的GIS平台,比如ArcGIS、SuperMap和GDAL/OGR等。
由于ArcGIS、SuperMap是商业软件,且有严格的版本限制;GDAL/OGR是一套开源的GIS库,使用GDAL/OGR可以摆脱授权、版本等依赖,不影响现有的作业环境。
因此我们选用GDAL/OGR来开发数据审核工具。
1 GDAL/OGR介绍GDAL/OGR是一套开源的GIS库,提供各种GIS算法和多种开发语言的支持,如c++、.Net、Java、Perl、Python等,广泛用于多个GIS平台,如ESRI的ARCGIS ,Google Earth和跨平台的GRASS GIS系统。
利用GDAL/OGR库,可以使基于Linux的地理空间数据管理系统提供对矢量和栅格文件数据的支持。
2设计思路2.1数据审核流程内业成果数据的审核,其核心只有一个,就是对所有数据进行规则匹配,如果全部满足规则要求,则是合格数据;如果有一条规则不符合,则视为不合格数据。
因此数据的审核流程就是对所有数据,对照设计规则一一比对,首先审核规则一、如果符合规则一,则继续比对规则二、否则退出。
如此循环,直到比对完规则库中所有的规则,如果全部符合,则判定为合格的数据,否则判定为不合格数据。
2.2 GDAL/OGR数据读取方法GDAL/OGR库目前最新版本为1.11,可上GDAL的网站http://www.gdal.ogr 去下载最新的源代码及编译后的成果。
GDAL、Prj.4和GEOS库的编译与引用
GDAL的编译官方网站:/下载地址:/gdal/编译版本:GDAL1.8.0编译平台:Window XP(32位)+Visual Studio2008编译步骤:1、解压下载文件gdal180.zip到C:\gdal-1.8.0。
2、点击“开始—运行”,输入“cmd”,进入控制台界面。
3、编译C++版本gdal,依次输入以下命令:1)C:\Program Files\Microsoft Visual Studio9.0\VC\bin\vcvars32.bat2)cd C:\gdal-1.8.03)nmake/f makefile.vc4)nmake/f makefile.vc install5)nmake/f makefile.vc devinstall4、如需编译C#版本gdal,接着输入以下命令:1)cd C:\gdal-1.8.1\swig\csharp2)nmake/f makefile.vc工程引用:1、C++工程引用GDAL1)从C:\warmerda\bld\lib目录下复制gdal_i.lib文件,从C:\warmerda\bld\bin目录下复制gdal18.dll文件,以及复制C:\warmerda\bld\include整个文件夹到C++工程目录下。
2)以Visual C++6.0为例,点击“Project-Settings”菜单,在C/C++页面,在[Category]项选择[Preprocessor]选项,在[Additional include directories]项下添加“include”值,即将编译的gdal的头文件目录添加到工程中。
转到Link页面,在[Object/library modules]选项下添加“gdal_i.lib”3)在需要使用gdal的时候添加相应的头文件。
2、C#工程引用GDAL1)从C:\gdal-1.8.0\swig\csharp目录下复制gdal_csharp.dll、gdal_wrap.dll、gdalconst_csharp.dll、gdalconst_wrap.dll、ogr_csharp.dll、ogr_wrap.dll、osr_csharp.dll、osr_wrap.dll,以及从C:\warmerda\bld\bin目录下复制gdal18.dll共9个文件到C#工程中。
GDAL开发文档
GDAL开发文档这里列出所有相关的页面:∙GDAL数据模型∙GDAL驱动实现向导∙GDAL API入门∙OGR API 使用向导翻译:柴树杉(chaishushan@)出处:opencv-extension-libraryGDAL数据模型翻译:柴树杉(chaishushan@)原文:/gdal_datamodel.html该文档简要描述了GDAL的数据模型,该模型可以容纳其他各种信息。
数据集(Dataset)一个dataset(对应GDALDataset类)是一个光栅数据以及和它有关系的信息的集合。
特别地dataset包含了光栅数据的大小(像素、线等)。
dataset同时也为对应的光栅数据指定了坐标系统。
dataset本身还可以包含元数据,它们以一种键/值对的方式来组织。
GDAL的数据集是基于OpenGIS Grid Coverages的格式定义的。
坐标系统Dataset的坐标系统由OpenGIS WKT字符串定义,它包含了:∙一个全局的坐标系名称。
∙一个地理坐标系名称。
∙一个基准标识符。
∙椭球体的名字。
长半轴(semi-major axis)和反扁率(inverse flattening)。
∙初子午线(prime meridian)名和其与格林威治子午线的偏移值。
∙投影方法类型(如横轴莫卡托)。
∙投影参数列表(如中央经线等)。
∙一个单位的名称和其到米和弧度单位的转换参数。
∙轴线的名称和顺序。
∙在预定义的权威坐标系中的编码(如EPSG)。
更多信息请参考OpenGIS WKT坐标系统定义,以及osr教程文档和OGRSpatialReference类的描述文档。
在GDAL中,返回坐标系统的函数是GDALDataset::GetProjectionRef()。
它返回的坐标系统描述了地理参考坐标,暗含着仿射地理参考转换,这地理参考转换是由GDALDataset::GetGeoTransform()来返回。
GDAL(1.7版本)影像读取
gdal图像处理/* 版权所有者:赵文 */一.gdal进行数据操作在安装好gdal后,即可调用gdal库中的函数。
(需要包含的头文件:gdal_priv.h)1.打开数据集使用gdal库进行数据(影像)操作的第一步就是打开一个数据集。
对于“数据集”这个名词大家可能不会太习惯,但是对于一般的格式来说,一个“数据集”就是一个文件,比如一个TIFF文件就是一个以tiff为扩展名的文件。
但是对于众多RS数据来说,一个数据集包含的绝对不仅仅是一个文件。
对于很多RS数据,他们把一张图像分成数个图像文件,然后放在一个文件夹中,用一些额外的文件来组织它们之间的关系,形成一个“数据集”(有点难以理解,暂且放过)。
下面我们由给定的文件路径文件名打开一个tiff(GeoTIFF)文件。
(任何支持的格式,打开方式都是这样)CString strFilePath;StrFilePath=’d:/rsdata/2005_234.tif’;GDALDataSet *poDataset; //GDAL数据集GDALAllRegister();poDataset = (GDALDataset *) GDALOpen(strFilePath, GA_ReadOnly );这样我们就打开了这个文件。
通过数据集poDataset即可调用各功能函数,如: GetRasterCount();//获取图像波段数;GetRasterXSize();//获取图像宽度GetRasterYSize();//获取图像高度GetRasterBand();//获取图像某一波段GetGeoTransform(double *p);//获取图像地理坐标信息长度为六的数组RasterIO();//对图像数据进行缩放读和写……(更具体的API列表可以看这里)。
2.获取图像信息、读取图像打开文件后,下面要做的就是获取文件的相关信息保存在相应变量中,将图像数据读入内存中,等待后续处理了。
GDAL python教程基础篇OGR空间计算
GDAL python教程基础篇OGR空间计算GDAL是一个用于地理空间数据读写的库,它支持多种常见的地理格式,如GeoTIFF和ESRI Shapefile等。
而OGR则是GDAL中的一个子库,它支持矢量数据格式,如ESRI Shapefile和GeoJSON等。
本文主要介绍如何使用OGR进行空间计算。
首先需要安装GDAL和OGR,可以通过pip来安装:```bashpip install gdal```接着可以在Python中使用OGR来读取矢量数据,如下所示:```pythonfrom osgeo import ogr# 打开Shapefile文件driver = ogr.GetDriverByName('ESRI Shapefile')dataSource = driver.Open('data.shp', 0)# 获取图层layer = dataSource.GetLayer()# 可以遍历所有要素for feature in layer:# 处理每个要素```接着可以使用OGR进行空间计算,如计算两个多边形的相交部分,代码如下:```pythonfrom osgeo import ogr# 打开Shapefile文件driver = ogr.GetDriverByName('ESRI Shapefile')dataSource1 = driver.Open('data1.shp', 0)dataSource2 = driver.Open('data2.shp', 0)# 获取图层layer1 = dataSource1.GetLayer()layer2 = dataSource2.GetLayer()# 获取多边形要素polygon1 = layer1.GetFeature(0).GetGeometryRef()polygon2 = layer2.GetFeature(0).GetGeometryRef()# 计算相交部分intersection = polygon1.Intersect(polygon2)# 打印相交面积print(intersection.GetArea())```以上代码假设每个Shapefile文件只有一个多边形要素,如果有多个要素,需要修改代码来遍历所有要素。
GDAL库介绍、安装与使用介绍
1.GDAL介绍GDAL是一个转换各种栅格数据格式的库。
包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。
它使用了一个单一的抽象数据模型就支持了大多数的栅格数据(GIS对栅格,矢量,3D数据模型的抽象能力实在令人叹服)。
当然除了栅格操作,这个库还同时包括了操作矢量数据的另一个有名的库ogr(转换矢量GIS数据),这样这个库就同时具备了操作栅格和矢量数据的能力,目前ogr能够支持的数据格式包括:Arc/Info Binary Coverage、DWG、ESRI Personal GeoDatabase、ArcSDE、ESRI Shapefile、GML、GRASS、Mapinfo File、Microstation DGN、ODBC、Oracle Spatial 和PostgreSQL等。
应该说,这就基本包括了我们平常用到的所有矢量型GIS文件格式了。
Gdal支持的栅格数据格式参阅/formats_list.html2.GDAL安装(1)下载gdal的安装文件,/gdal/gdal142.zip,解压到某目录下,如C:\gdalsrc下。
这里我们假定VC6的安装在默认目录C:\Program Files\Microsoft Visual Studio8下。
(2)启动cmd,即打开控制台窗口。
进入VC6的安装目录下,如cd C:\Program Files\MicrosoftVisual Studio8\VC\bin\,在此目录下有个文件VCVARS32.BAT,执行一下这个文件,然后重新回到C:\gdalsrc下。
运行命令nmake /f makefile.vc。
编译完成后,用记事本打开文件C:\gdalsrc\nmake.opt,根据自己的情况修改GDAL_HOME = 这一行,这个指的是最终GDAL的安装目录,比如说我们安装在C:\GDAL,那么这一行就是GDAL_HOME = "C:\GDAL",在C:\gdalsrc下执行nmake /f makefile.vc install,然后是nmake /f makefile.vc devinstall,然后我们需要的东西就安装到了C:\GDAL下。
gdal矢量裁剪栅格 -回复
gdal矢量裁剪栅格-回复[gdal矢量裁剪栅格]是一个非常有用的工具,可以将矢量数据裁剪到栅格数据上。
在本文中,我们将一步一步地介绍gdal矢量裁剪栅格的过程。
首先,我们需要明确几点。
GDAL是一个开源的地理数据抽象库,它提供了丰富的工具和函数来处理各种地理数据格式。
矢量数据通常表示地理对象的几何形状和属性信息,而栅格数据则是按照网格划分的像素值。
矢量裁剪栅格的过程就是将矢量数据的几何形状应用到栅格数据上,以便提取或分析感兴趣的区域。
首先,我们需要准备一些数据。
假设我们有一个矢量文件"input.shp"和一个栅格文件"raster.tif",我们的目标是将矢量数据裁剪到栅格数据的范围内。
此外,我们还需要指定一个输出文件,用于存储裁剪后的结果。
接下来,我们打开Python的开发环境,并导入GDAL库和相关的函数。
这里我们使用GDAL的Python绑定,它提供了一种方便的方式来调用GDAL的功能。
以下是我们所需的导入语句:pythonfrom osgeo import gdal, ogr, osr接下来,我们需要打开矢量和栅格文件,并获取它们的几何范围。
我们可以使用GDAL的`Open`函数来打开文件,然后使用`GetLayer`和`GetExtent`函数获取矢量和栅格数据的范围。
代码如下:pythonvector_ds = ogr.Open("input.shp")raster_ds = gdal.Open("raster.tif")vector_layer = vector_ds.GetLayer()vector_extent = vector_layer.GetExtent()raster_extent = (0, 0, raster_ds.RasterXSize, raster_ds.RasterYSize)接下来,我们需要创建一个新的栅格数据集,用于存储裁剪后的结果。
gdal源码剖析与开发指南 源代码
GDAL源码剖析与开发指南一、概述1.1 GDAL概述GDAL(Geospatial Data Abstraction Library)是一个在地理信息系统(GIS)领域使用广泛的开源库,它提供了读取、写入各种栅格和矢量地理数据格式的功能。
GDAL库由C/C++编写,但也提供了多种语言的绑定,例如Python、Java等,使得开发者可以轻松地在不同评台上使用GDAL库进行地理数据处理和分析。
1.2 目的与意义本篇文章旨在对GDAL源码进行深入剖析,帮助读者了解GDAL库的设计理念、核心数据结构和关键算法,使读者能够更好地理解GDAL库的内部工作原理,并掌握如何使用GDAL库进行地理数据处理和开发。
二、GDAL源码结构2.1 GDAL主要模块GDAL源码主要分为以下几个模块:- 核心库(Core)- 栅格数据处理(Raster)- 矢量数据处理(Vector)- 投影转换(Projection)- 数据格式驱动(Driver)2.2 核心库核心库(Core)模块包含了GDAL库的基本数据结构和算法,如数据集(Dataset)、数据类型(DataType)、坐标系统(Coordinate System)等。
在这个模块中,我们将重点剖析GDAL的核心数据结构以及数据的读写流程,帮助读者了解GDAL库是如何管理和处理地理数据的。
2.3 栅格数据处理栅格数据处理(Raster)模块主要负责对栅格地理数据(如DEM、影像数据)进行读写和处理。
在这个模块中,我们将深入研究GDAL是如何支持栅格数据格式的读写和处理,并分析GDAL库对常用栅格数据格式(如GeoTIFF、NetCDF等)的支持原理。
2.4 矢量数据处理矢量数据处理(Vector)模块用于处理矢量地理数据(如矢量地图、矢量要素),提供了对矢量数据格式(如SHP、GeoJSON等)的读写和操作接口。
在这个模块中,我们将深入研究GDAL是如何支持矢量数据格式的读写和处理,并分析GDAL库在矢量数据处理方面的核心功能和算法。
gdal 矢量交合并 -回复
gdal 矢量交合并-回复GDAL(Geospatial Data Abstraction Library)是一个开源的地理空间数据处理库,它提供了许多功能强大的工具来读取、写入、转换和分析地理空间数据。
其中之一是矢量交集与合并功能,可以将多个矢量数据集进行交集运算或者合并成一个数据集。
本文将逐步介绍如何使用GDAL进行矢量交集和合并的操作。
第一步:安装GDAL库要使用GDAL进行矢量交集和合并操作,首先需要安装GDAL库。
GDAL库有多种语言接口,包括Python、C、C++等。
在本文中,我们将使用Python接口示例代码进行演示。
可以通过pip命令来安装Python的GDAL库,命令如下:bashpip install GDAL安装完成后,我们可以开始编写代码。
第二步:导入GDAL库导入GDAL库是使用GDAL功能的第一步,示例代码如下:pythonfrom osgeo import ogrfrom osgeo import gdal这里我们导入了GDAL库中的ogr和gdal模块。
第三步:打开矢量数据集在进行矢量交集和合并操作之前,我们需要先打开待处理的矢量数据集。
GDAL库提供了`OpenEx`方法用于打开矢量数据集,示例代码如下:python# 打开第一个矢量文件src_ds1 = ogr.OpenEx('path/to/vector1.shp')# 打开第二个矢量文件src_ds2 = ogr.OpenEx('path/to/vector2.shp')这里我们假设待处理的矢量数据集文件分别为`vector1.shp`和`vector2.shp`,需要根据实际情况修改文件路径。
第四步:获取图层在打开矢量数据集后,我们需要获取矢量数据集中的图层。
GDAL库提供了`GetLayer`方法用于获取图层,示例代码如下:python# 获取第一个矢量数据集的图层layer1 = src_ds1.GetLayer()# 获取第二个矢量数据集的图层layer2 = src_ds2.GetLayer()第五步:执行矢量交集与合并操作在获取图层后,我们可以执行矢量交集与合并操作。
GDAL综合整理
一、简介1.GDAL简单地说,GDAL是一个操作各种栅格地理数据格式的库。
包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。
它使用了一个单一的抽象数据模型就支持了大多数的栅格数据(GIS对栅格,矢量,3D数据模型的抽象能力实在令人叹服)。
当然除了栅格操作,这个库还同时包括了操作矢量数据的另一个有名的库ogr(ogr 这个库另外介绍),这样这个库就同时具备了操作栅格和矢量数据的能力。
最重要的是这个库是跨平台的,开源的!如今这个库对各种数据格式的支持相当强大,几乎所有的GIS、RS所要处理的数据格式类型都包括在内。
它的主页最后那些使用了它作为底层数据处理的软件列表中,不仅有GRASS、Quantum GIS (QGIS),更有Google Earth。
学习这个库是十分有必要的。
该库在C/C++/python/ruby/VB/java/C#(这个暂时不完全支持)下都能用,而且都一样用。
GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。
它利用抽象数据模型来表达所支持的各种文件格式。
它还有一系列命令行工具来进行数据转换和处理。
2.OgrOGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。
有很多著名的GIS类产品都使用了GDAL/OGR库,包括ESRI的ArgGIS 9.2,Google Earth和跨平台的GRASS GIS系统。
利用GDAL/OGR库,可以使基于Linux的地理空间数据管理系统提供对矢量和栅格文件数据二、大体结构GDAL使用抽象数据模型(abstract datamodel)来解析它所支持的数据格式,抽象数据模型包括数据集(dataset),坐标系统,仿射地理坐标转换(Affine GeoTransform),大地控制点(GCPs),元数据(Metadata),栅格波段(Raster Band),颜色表(ColorTable),子数据集域(Subdatasets Domain),图像结构域(Image_StructureDomain),XML域(XML:Domains)。
Python调用GDAL计算地形耐用指数TRI地形位置指数TPI粗糙度Roughness的方法
Python调用GDAL计算地形耐用指数TRI地形位置指数TPI粗糙度Roughness的方法Python调用GDAL计算地形耐用指数(TRI)地形位置指数(TPI)粗糙度(Roughness)的方法赵岩1.python_GDAL栅格数据处理环境配置python进行栅格图像处理,需要配置python环境。
本人推荐方法如下:①安装数据科学软件Anaconda,安装时将Python一起安装。
Anaconda的优点是可以根据所安装的Python版本自动匹配和安装常用的数据科学分析需要的包,无需自己再单独安装。
②安装GDAL相关开发包,打开Anaconda上的Environments,Installed框选择All,Search Packages框输入gdal,选择geal,点击Apply。
Anaconda会自动搜索适合目前使用Python版本的gdal 包以及和这个包相关联的包,然后自动安装。
③打开jupyter nootbook,输入以下代码并运行,显示栅格图像,表明环境安装成功。
*中间出现任何问题请搜索相关教程解决。
④点击Windows,打开Jupyter Notebook。
⑤新建Python 3。
⑥打开jupyter nootbook,输入以下代码并运行,显示栅格图像,表明环境安装成功。
2.GDAL地形分析函数介绍在GDAL的api接口中,与DEM有关的方法有DEMProcessing 和DEMProcessingOptions。
下面分别介绍这两个函数的参数信息。
(1)DEMProcessing(destName, srcDS, processing, **kwargs):destName --- 输出数据集名称。
srcDS ---数据集对象或文件名。
processing --- DEM处理方法,根据需求选以下其中之一:"hillshade"(山体阴影), "slope"(坡度), "aspect"(坡向), "color-relief"(彩色渲染), "TRI"(T opographic Position Index,地形位置指数:中程减去周围高程的平均值。
c++,经纬度转度分秒格式
c++,经纬度转度分秒格式在GIS应用领域中,经纬度的处理是一个非常重要的任务。
经纬度一般用度数(Degree)来表示,但是有时候需要将经纬度转换为度分秒(DMS)格式的数据。
DMS格式的数据更利于人类阅读和理解,因此在很多场景下比度数格式更有优势。
对于经纬度转换为度分秒格式,C++提供了多种方法和函数库。
本篇文章将为你详细介绍C++中经纬度转换为度分秒格式的相关知识和实现方法。
首先,经纬度转换为度分秒格式需要对经纬度进行分解。
对于一个度的表示,可以分解为60分,对于一分的表示,可以继续分解为60秒。
因此,要将经纬度转换为DMS格式,我们需要将经纬度分别拆分为度、分、秒三个数值。
假如要将一个度数值x转换为DMS格式,那么其转换计算公式如下:D = 整数部分(x)M = 整数部分((x - D) * 60)S = ((x - D) * 60 - M) * 60其中,D为度数的整数部分,M为分数的整数部分,S为秒数。
以经度为例,下面是经度转化为DMS格式的代码示例:```double longitude = 113.2345; //假设经度为113.2345int d = (int)longitude;int m = (int)((longitude - d) * 60);int s = (int)(((longitude - d) * 60 - m) * 60);```这样,经度的DMS格式就可以表示为d°m′s″了。
同样的,对于纬度的转换,也可以使用类似的方法:```double latitude = 23.5432; //假设纬度为23.5432int d = (int)latitude;int m = (int)((latitude - d) * 60);int s = (int)(((latitude - d) * 60 - m) * 60);```计算得到的结果为:d°m′s″。
GDAL库介绍
1.GDAL 库介绍●可能你不玩GIS ,不懂这个库到底有什么用,或者和python 有什么关系。
但是你要玩GIS ,RS ,你就应当知道这个库的价值。
就算你不玩GIS ,我想这个库对你也应该有致命的吸引力。
为什么?看下面的介绍吧!●先看看这段GDAL 主页上的英文介绍吧!is a translator library for raster geospatial data formats that is released underan X/MITstyle Open Sourcelicense by the Open Source GeospatialFoundation.As a library,it presents a single abstract data modelto thecalling application for all supported formats.It also comes with a variety of useful commandline utilitiesfor data translation and processing.●简单地说,GDAL 是一个操作各种栅格地理数据格式的库。
包括读取、写入、转换、处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持)。
它使用了一个单一的抽象数据模型就支持了大多数的栅格数据(GIS 对栅格,矢量,3D 数据模型的抽象能力实在令人叹服)。
当然除了栅格操作,这个库还同时包括了操作矢量数据的另一个有名的库ogr (ogr 这个库另外介绍),这样这个库就同时具备了操作栅格和矢量数据的能力,买一送一,这么合算的买卖为什么不做。
●最最最重要的是这个库是跨平台的,开源的!如今这个库对各种数据格式的支持强大到令人啧啧的地步了。
如果你对他的强大有什么怀疑的话,看看这里一大串的GDAL 所支持格式清单,吓到了吧!再看看它的主页最后那些使用了它作为底层数据处理的软件列表吧!其中你可以不知道GRASS ,你也可以不知道Quantum GIS (QGIS),但是你总该知道Google Earth 吧!不知道?赶快下一个去玩玩--会当临绝顶,一览众山小!●有人说我又不玩GIS 。
GDAL之OGR入门
这篇文档是为了说明怎样从一个文件里用OGR的C++类读取和写入数据。
强烈建议在读此文档之前首先阅读介绍OGR体系结构介绍文档,里面介绍了OGR里主要的类以及他们所完成的功能。
从OGR 读取数据为了描述如何通过OGR读取数据,我们编写一个小的示例,从OGR文件里读出数据,并按照一定格式输出。
首先我们需要注册我们渴望读取的所有格式。
这个通过调用OGRRegisterAll()就能很容易完成,这个函数注册了GDAL/OGR支持的所有格式。
#i nclude "ogrsf_frmts.h"int main(){OGRRegisterAll();下一步我们将打开输入的OGR数据文件。
数据文件可以是文件,关系型数据库,文件路径,甚至可能是远程的网络服务,这点取决于我们使用的驱动。
但是,数据源的名字通常只是一个简单的字符串。
既然这样拿我们就编写一个打开shapefile的程序。
第二个参数(FLALSE)告诉OGRSFDriverRegistrar::Open() 函数我们不需要update access。
如果失败返回NULL,并报错。
OGRDataSource *poDS;poDS = OGRSFDriverRegistrar::Open( "point.shp", FALSE );if( poDS == NULL ){printf( "Open failed.\n" );exit( 1 );}一个OGRDataSource可能包含很多的层。
所包含层的数量我们可以用过调OGRDataSource::GetLayerCount()得到,并且其中每一个曾我们利用索引调用OGRDataSource::GetLayer()得到。
不过,我们现在利用层的名字。
OGRLayer *poLayer;poLayer = poDS->GetLayerByName( "point" );现在我们开始读取层里面的features。
GDAL_API教程
GDAL_API教程GDAL API TutorialBefore opening a GDAL supported raster datastore it is necessary to register drivers.在打开⼀个GDAL⽀持的栅格资料之前,必需要注册驱动。
There is a driver for each supported format.每个驱动对应各⾃⽀持的格式。
Normally this is accomplished with the GDALAllRegister() function which attempts to register all known drivers, including those auto-loaded from .so files using GDALDriverManager::AutoLoadDrivers().通常这个会被GDALAllRegister()函数完成,试图去注册所有已知的驱动包括使⽤GDALDriverManager::AutoLoadDrivers()从.so⽂件来加载。
If for some applications it is necessary to limit the set of drivers it may be helpful to review the code from gdalallregister.cpp.如果⼀些程序有必要去限制驱动集合,检查gdalallregister.cpp的代码将会有所帮助,Python automatically calls GDALAllRegister() when the gdal module is imported.当gdal模块被导⼊时,Python会⾃动调⽤GDALAllRegister()。
Once the drivers are registered, the application should call the free standing GDALOpen() function to open a dataset, passing the name of the dataset and the access desired(GA_ReadOnly or GA_Update).⼀但驱动被注册,程序将会调⽤独⽴的GDALOpen()函数通过dataset的名称和需要的存取⽅式(GA_ReadOnly或GA_Update)来打开dataset.Note that if GDALOpen() returns NULL it means the open failed, and that an error messages will already have been emitted via CPLError().注意如果GDALOpen()返回NULL,意味着打开失败了,这个错误信息将会通过CPLError ()释放出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GDAL API入门打开文件在打开GDAL所支持的光栅数据之前需要注册驱动。
这里的驱动是针对GDAL支持的所有数据格式。
通常可以通过调用GDALAllRegister()函数来注册所有已知的驱动,同时也包含那些用GDALDriverManager::AutoLoadDrivers()从.so文件中自动装载驱动。
如果程序需要对某些驱动做限制,可以参考gdalallregister.cpp代码。
当驱动被注册之后,我们就可以用GDALOpen()函数来打开一个数据集。
打开的方式可以是GA_ReadOnly或者GA_Update。
In C++:#include "gdal_priv.h"int main(){GDALDataset *poDataset;GDALAllRegister();poDataset = (GDALDataset *) GDALOpen( pszFilename, GA_ReadOnly );if( poDataset == NULL ){...;}In C:#include "gdal.h"int main(){GDALDatasetH hDataset;GDALAllRegister();hDataset = GDALOpen( pszFilename, GA_ReadOnly );if( hDataset == NULL ){...;}如果GDALOpen()函数返回NULL则表示打开失败,同时CPLError()函数产生相应的错误信息。
如果您需要对错误进行处理可以参考CPLError()相关文档。
通常情况下,所有的GDAL函数都通过CPLError()报告错误。
另外需要注意的是pszFilename并不一定对应一个实际的文件名(当然也可以就是一个文件名)。
它的具体解释由相应的驱动程序负责。
它可能是一个URL,或者是文件名以后后面带有许多用于控制打开方式的参数。
通常建议,不要在打开文件的选择对话框中对文件的类型做太多的限制。
获取Dataset信息如果GDAL数据模型一节所描述的,一个GDALDataset包含了光栅数据的一系列的波段信息。
同时它还包含元数据、一个坐标系统、投影类型、光栅的大小以及其他许多信息。
adfGeoTransform[0] /* 左上角 x */adfGeoTransform[1] /* 东西方向一个像素对应的距离 */adfGeoTransform[2] /* 旋转, 0表示上面为北方 */adfGeoTransform[3] /* 左上角 y */adfGeoTransform[4] /* 旋转, 0表示上面为北方 */adfGeoTransform[5] /* 南北方向一个像素对应的距离 */如果需要输出dataset的基本信息,可以这样:In C++:double adfGeoTransform[6];printf( "驱动:%s/%s\n",poDataset->GetDriver()->GetDescription(),poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME ) ); printf( "数据大小:%dx%dx%d\n",poDataset->GetRasterXSize(), poDataset->GetRasterYSize(),poDataset->GetRasterCount() );if( poDataset->GetProjectionRef() != NULL )printf( "投影类型:'%s'\n", poDataset->GetProjectionRef() );if( poDataset->GetGeoTransform( adfGeoTransform ) == CE_None ){printf( "起点:(%.6f,%.6f)\n",adfGeoTransform[0], adfGeoTransform[3] );printf( "像素大小:(%.6f,%.6f)\n",adfGeoTransform[1], adfGeoTransform[5] );}In C:GDALDriverH hDriver;double adfGeoTransform[6];hDriver = GDALGetDatasetDriver( hDataset );printf( "Driver: %s/%s\n",GDALGetDriverShortName( hDriver ),GDALGetDriverLongName( hDriver ) );printf( "Size is %dx%dx%d\n",GDALGetRasterXSize( hDataset ),GDALGetRasterYSize( hDataset ),GDALGetRasterCount( hDataset ) );if( GDALGetProjectionRef( hDataset ) != NULL )printf( "Projection is `%s'\n", GDALGetProjectionRef( hDataset ) ); if( GDALGetGeoTransform( hDataset, adfGeoTransform ) == CE_None ){printf( "Origin = (%.6f,%.6f)\n",adfGeoTransform[0], adfGeoTransform[3] );printf( "Pixel Size = (%.6f,%.6f)\n",adfGeoTransform[1], adfGeoTransform[5] );}获取一个光栅波段现在,我们可以通过GDAL获取光栅的一个波段。
同样每个波段含有元数据、块大小、颜色表以前其他一些信息。
下面的代码从dataset获取一个GDALRasterBand对象,并且显示它的一些信息。
In C++:GDALRasterBand *poBand;int nBlockXSize, nBlockYSize;int bGotMin, bGotMax;double adfMinMax[2];poBand = poDataset->GetRasterBand( 1 );poBand->GetBlockSize( &nBlockXSize, &nBlockYSize );printf( "Block=%dx%d Type=%s, ColorInterp=%s\n",nBlockXSize, nBlockYSize,GDALGetDataTypeName(poBand->GetRasterDataType()),GDALGetColorInterpretationName(poBand->GetColorInterpretation()) );adfMinMax[0] = poBand->GetMinimum( &bGotMin );adfMinMax[1] = poBand->GetMaximum( &bGotMax );if( ! (bGotMin && bGotMax) )GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax);printf( "Min=%.3fd, Max=%.3f\n", adfMinMax[0], adfMinMax[1] );if( poBand->GetOverviewCount() > 0 )printf( "Band has %d overviews.\n", poBand->GetOverviewCount() );if( poBand->GetColorTable() != NULL )printf( "Band has a color table with %d entries.\n",poBand->GetColorTable()->GetColorEntryCount() );In C:GDALRasterBandH hBand;int nBlockXSize, nBlockYSize;int bGotMin, bGotMax;double adfMinMax[2];hBand = GDALGetRasterBand( hDataset, 1 );GDALGetBlockSize( hBand, &nBlockXSize, &nBlockYSize );printf( "Block=%dx%d Type=%s, ColorInterp=%s\n",nBlockXSize, nBlockYSize,GDALGetDataTypeName(GDALGetRasterDataType(hBand)),GDALGetColorInterpretationName(GDALGetRasterColorInterpretation(hBand)) );adfMinMax[0] = GDALGetRasterMinimum( hBand, &bGotMin );adfMinMax[1] = GDALGetRasterMaximum( hBand, &bGotMax );if( ! (bGotMin && bGotMax) )GDALComputeRasterMinMax( hBand, TRUE, adfMinMax );printf( "Min=%.3fd, Max=%.3f\n", adfMinMax[0], adfMinMax[1] );if( GDALGetOverviewCount(hBand) > 0 )printf( "Band has %d overviews.\n", GDALGetOverviewCount(hBand));if( GDALGetRasterColorTable( hBand ) != NULL )printf( "Band has a color table with %d entries.\n",GDALGetColorEntryCount(GDALGetRasterColorTable( hBand ) ) );读光栅数据GDAL有几种读光栅数据的方法,但是GDALRasterBand::RasterIO()是最常用的一种。