我似乎对几乎所有的python地理处理都使用ESRI的Arcpy站点软件包。值得ESRI赞扬的是,这些工具令人难以置信,可帮助您完成很多工作。但是,我也想在ESRI Arcpy域之外创建地理处理脚本。例如,如果我想将栅格裁剪为多边形,我将从ESRI中的以下脚本开始:

# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *

# Set environment settings
env.workspace = "C:/sapyexamples/data"

# Set local variables
inRaster = "elevation"
inMaskData = "mask.shp"

# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# Execute ExtractByMask
outExtractByMask = ExtractByMask(inRaster, inMaskData)

# Save the output 
outExtractByMask.save("C:/sapyexamples/output/extractmask")  

无需Arcpy,就可以通过编程方式完成相同的任务。我对认真的程序员的问题是:您使用什么python工具集合来完成ESRI用户使用Arcpy站点软件包可以完成的任务?我从哪里开始?

评论

相关:使用GDAL裁剪带有矢量层的栅格

#1 楼

GDAL是要使用的工具。实际上,整个调用是gdal_rasterize的一行: :

gdal_rasterize -l mask -i -burn -9999 mask.shp elevation.tif


可以在python中设置变量的地方

对于完整的python:

lyr = 'mask'
shp = 'mask.shp'
dem = 'elevation.tif'
ndv = -9999
p = os.Popen('gdal_rasterize -l %s -i -burn %d %s %s' % (lyr,ndv,shp,dem)


我只是快速浏览了C API的语法,因此我的python语法可能有点偏离。参见gdal_alg.h:
http://gdal.org/gdal__alg_8h.html

#2 楼

您会在此站点上找到许多其他类似的问题,这些问题提出了相同的基本问题,并具有很好的参考价值。最相似(最详细)的是:


在GIS中至关重要的Python工具/模块/插件是什么?

其他包括:


不使用arcpy进行地理处理shapefile的Python脚本示例
用于几何操作的纯Python库
Python中有哪些工具可用于实现较大的圆距+线创建? >用于删除SHP功能的Python模块(未安装Desktop GIS)


#3 楼

地理空间数据抽象库是一个很好的起点。它实际上由两个库组成-用于处理地理空间栅格数据的GDAL和用于处理地理空间矢量数据的OGR,但人们通常将其称为GDAL。

犹他州立大学。您可能也要检查一下。

#4 楼

在我的大量学术研究中,我使用LiDAR数据进行地貌分析。我很快发现使用arcpy执行许多操作非常慢,尤其是在大型数据集上。结果,我开始使用:



pyshp处理shapefile和更新属性表

numpy来管理ASCII栅格并执行基于内核的分析例如曲率计算

对结果进行统计分析并对曲面执行曲线拟合

matplotlib以绘制图形和其他图形结果,例如用于快速可视化的基本图br />
我还将向任何想学习更多有关分析栅格表面的人推荐《地球表面过程的定量建模》一书。本书附带了C ++出色的代码示例,比ArcGIS工具更有效。这些算法也可以移植到Python,而不需要比numpy更复杂的方法,尽管它们在C ++中的运行速度更快。

#5 楼

我认为到目前为止给出的答案基本上涵盖了所有值得一提的软件包(尤其是GDAL,OGR,pyshp,NumPy)

但是还有GIS和Python软件实验室,该实验室包含两个有趣的地方模块。它们是:



Fiona:OGR的更整洁的API

Rtree:Python GIS的空间索引

形状:Python笛卡尔平面中的特征处理和分析工具包

我个人最近开始研究GDAL / OGR,发现它们在分析工具的速度和覆盖范围方面给人留下了深刻的印象。

这里有一些使用方法的示例(摘自这个非常好的起点的出色资源):
这些工具的好处是您在实现它们方面非常灵活。例如,我编写了自己的类CreateGeometry(),可以轻松地从头开始创建矢量文件。如果您有兴趣,我也可以在这里发布,即使我认为这超出了问题的范围。

#6 楼

对于使用ESRI的人,我认为GRASS将是一个非常相似的环境,具有GUI python环境,并组织在单独的“工具箱”中以完成不同的任务(栅格,矢量,太阳能工具箱等)。除了Python之外,脚本还有其他选项,但这就​​是我的用法。 .osgeo.org / wiki / GRASS_and_Python

编辑:针对那些具有ESRI背景的人的另一个链接:http://grass.osgeo.org/wiki/GRASS_migration_hints

我也其次是GDAL的议案。它是无价的,没有它我将迷失。

评论


GRASS GIS 7中的新增功能:pyGRASS,请参见ing.unitn.it/~zambelli/projects/pygrass

– markusN
2014年4月22日在17:59



更新的链接:grasswiki.osgeo.org/wiki/GRASS_and_Python#pygrass_Library

– markusN
2014年4月29日在20:59

#7 楼

我知道您的问题是以Python为中心的,但是R具有大量的价值统计分析方法,其中一些可用于空间分析。 @Whuber在这里有一个很好的答案,说明了如何以两行方式将栅格剪辑到框。

评论


要将其带回Python,可以使用RPy库。 RPy是R编程语言的非常简单但强大的Python接口。它可以管理各种R对象,并可以执行任意R功能(包括图形功能)。 R语言的所有错误都将转换为Python异常。可以从Python内部使用为R系统安装的任何模块。

– RyanKDalton
2012-09-28 18:02



#8 楼

我的解决方案(快速解决方案)是将GDAL与Python配合使用。

您需要


import subprocess

command =“ gdalwarp -of GTiff -cutline clipArea.shp -cl area_of_interest -crop_to_cutline inData.asc outData.tiff“

subprocess.call(['C:\ Temp \ abc \ Notepad.exe'])


(从此处获得答案:使用GDAL裁剪带有矢量层的栅格)

当然,您应该能够使用纯Python来实现此目的,但是我并不需要去做吧。而且我几乎总是拥有GDAL! GDAL的灵活性非常好,尤其是在Linux环境中。它可以处理巨大的栅格,可以与Python或Shell脚本捆绑在一起,并且具有许多功能。另请参阅OGR以获取基于矢量的工具。

#9 楼

如果您不介意运行PostGIS,则可以为您完成大多数空间数据处理。

PDF速查表:

http://www.postgis.us/downloads/postgis20_cheatsheet .pdf

它与python集成:

https://publicwiki.deltares.nl/display/OET/Accessing+PostgreSQL+PostGIS+with+Python

借助Quantum GIS或pgAdmin中的SPIT等支持工具,您可以很好地设置PostGIS。然后,您可以使用python控制空间数据上的PostGIS操作。

#10 楼

我一直在研究一个名为WhiteboxTools的开源地理处理库,该库可以在许多应用程序中代替ArcPy。当前计划有近300种工具可用于处理栅格,矢量和LiDAR(LAS)数据,尽管计划最终移植到Whitebox GAT中可用的全部400多种工具中。尽管这些工具是使用Rust编程语言开发的(为了提高效率),但是每个工具都可以从Python调用,如以下示例所示:

 


WhiteboxTools用户手册中提供了更多详细信息。该库是独立的,没有任何其他依赖项。您只需要下载此处的小文件(<5Mb)。下载文件包含WhiteboxTools exe,whitebox_tools.py脚本和用户手册,该脚本提供了库的Python API(在上述脚本的顶行导入)。还有一个非常基本的tkinter GUI(wb_runner.py)与该库接口。

许可的MIT许可证旨在使WhiteboxTools作为后端与其他开源GIS集成; Alexander Bruy为WhiteboxTools后端开发了一个QGIS插件。您还可以根据需要在单个脚本中混合使用WhiteboxTools和ArcPy中的工具。该库仍是实验性质的,是由Guelph大学的地貌和水文地质学研究小组开发的,并且当前是1.0之前的版本,使用时应予以考虑。

#11 楼




使用Python在没有ArcPy的情况下将栅格裁剪到shapefile:
http://geospatialpython.com/2011/02/clip-raster-using-shapefile.html