寻求GIS的Python工具/模块/插件?


31

在ArcGIS 10中,Python已成为ESRI的事实上的脚本语言。虽然领先的开源软件(例如QGIS,GeoServer,PostGIS)都支持Python。因此,对于GIS开发人员和用户来说,了解/学习Python变得很重要。

谁能列出GIS中至关重要的Python这样的工具/模块/插件吗?


10
我认为这个问题太广泛了,应该仅限于可在任何支持Python的GIS中使用的python软件包。
昏暗

4
ArcPy是真正的Python模块吗?
Mapperz

2
@Mapperz它实际上是一个网站包。前身arcgisscripting是一个模块。见help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//...
blah238

3
@underdark-我认为提出一个很好的广泛问题可能会有用。在这种情况下,它提供了一个中央资源,当有人开始使用谷歌搜索哪个python工具集时,搜索引擎将找到该资源。
GIS乔纳森(Jonathan)

2
+1代表范围太广。该问题最相关的答案将在[tag:python] + [tag:my-software]搜索结束时找到,并通过投票常见问题解答标签进行排序。这里的答案绝不能希望与之匹配。
马特·威尔基

Answers:


38
  • NumPy:NumPy是使用Python进行科学计算的基本软件包。它包含以下内容:

    • 强大的N维数组对象
    • 复杂的(广播)功能
    • 集成C / C ++和Fortran代码的工具
    • 有用的线性代数,傅立叶变换和随机数功能

    除了其明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。可以定义任意数据类型。这使NumPy可以无缝,快速地与各种数据库集成。

  • SciPy:SciPy(发音为“ Sigh Pie”)是用于数学,科学和工程的开源软件。它也是非常受欢迎的Python科学编程会议的名称。SciPy库取决于NumPy,它提供了方便快捷的N维数组操作。SciPy库可与NumPy数组一起使用,并提供许多用户友好且高效的数值例程,例如用于数值积分和优化的例程。它们一起运行在所有流行的操作系统上,安装迅速且免费。NumPy和SciPy易于使用,但功能强大到足以被一些世界领先的科学家和工程师所依赖。如果您需要在计算机上操纵数字并显示或发布结果,请尝试给SciPy!

  • Shapely:Shapely是BSD许可的Python软件包,用于操纵和分析平面几何对象。它基于广泛部署的GEOS(PostGIS的引擎)和JTS(移植了GEOS的库)库。以此C依赖关系交换了以极快的速度执行的能力。Shapely与数据格式或坐标系无关,但可以很容易地与它们集成在一起。

  • GDAL Python绑定:此Python软件包和扩展程序是用于编程和处理GDAL地理空间数据抽象库的许多工具。

  • GeoDjango: GeoDjango打算成为世界一流的地理Web框架。它的目标是使构建GIS Web应用程序和利用空间启用数据的功能变得尽可能容易。
  • PyProj
  • SpatialPython:记录良好的github仓库。

我想为任何希望看到这个旧答案的人添加积极开发的geopandas.org库!
clifgray

11

为了回答我自己的问题,我刚刚找到了这个Pythons模块。尽管我还没有使用过它,但它看起来令人兴奋。

NetworkX是一个Python语言软件包,用于创建,操纵和研究复杂网络的结构,动力学和功能。

rtree -Python GIS的空间索引


10

转到主题::科学/工程:: GIS 并找到所有用于GIS的Python模块(用于处理shapefile,栅格,KML,GML,GPX地理编码等)。

最重要的部分已经被引用,但我也建议 Fiona:Fiona为开源GIS社区最受信任的地理数据访问库提供了一个最小,简单的Python接口,并且可以轻松地与pyproj,Rtree和Shapely等其他Python GIS软件包集成。

对于使用shapefile进行联网或使用Networkx模块Geometric Network Geoprocessing进行 Esri Feature Class 联网:“ 据我所知,ESRI尚未为其几何网络发布任何地理处理工具 ”或pgRoutingPython的替代品:如何转换shapefile(或拓扑网络中的要素类ESRI)(图)(法语)

import networkx as nx
G = nx.read_shp('pointshapefile.shp')
print(G.nodes())
# result [(1.0, 2.0), (3.0, 2.0), (0.0, 0.0), (3.0, 1.0), (4.0, 4.0), (2.0, 1.0), (2.0, 4.0), (1.0, 3.0), (2.0, 3.0), (1.0, 4.0), (4.0, 3.0), (4.0, 2.0), (3.0, 4.0), (1.0, 1.0)]
print(G.edges())
# result [((1.0, 2.0), (1.0, 1.0)), ((3.0, 2.0), (2.0, 1.0)), ((3.0, 1.0), (2.0, 1.0)), ((4.0, 4.0), (3.0, 4.0)), ((2.0, 1.0), (1.0, 1.0)), ((2.0, 4.0), (2.0, 3.0)), ((1.0, 3.0), (1.0, 2.0)), ((2.0, 3.0), (1.0, 2.0)), ((1.0, 4.0), (1.0, 3.0)), ((4.0, 3.0), (4.0, 2.0)), ((4.0, 2.0), (3.0, 2.0)), ((3.0, 4.0), (2.0, 3.0)), ((1.0, 1.0), (0.0, 0.0))]

# shortest path
print(nx.astar_path(H,(1.0, 4.0),(4.0, 2.0),dist))
# result [(1.0, 4.0), (1.0, 3.0), (1.0, 2.0), (2.0, 3.0), (3.0, 2.0), (4.0, 2.0)]

# and so with all the algorithms of Networkx module
# you can also export the results in shapefile format

我在QGIS和GRASS GIS中使用Shapely,Fiona,GDAL / OGR,Pyshp,Networkx和其他工具都没有问题(并且使用matplotlib笛卡尔进行交互式绘图)。他们通常拥有更易于使用的算法。

其中一些模块也可以在有问题的ArcPy中使用,因为ArcPy使用的Numpy版本为1.3,已过时(现在为1.6.1 ...),并且如果不破坏ArcPy模块就无法对其进行更新。




5

我使用并推荐ReportLab Toolkit,它是开放源PDF库,用于以编程方式创建PDF格式的文档。正如在其页面上所宣传的那样,它是一个强大,灵活,久经考验的行业实力解决方案。它是用Python编写的免费开放源代码软件,但是它的语法并不是我曾经处理过的最简单的方法:-)

在ArcGIS 10.0中,从要素类和表中以PDF格式编写报告是非常宝贵的,尽管在ArcPy中可以从ArcGIS报告编写器访问PDF报告时,在10.1中某些功能可能不是必需的。


您使用pdfgen包裹还是platypus?我需要用jpeg和文本生成报告,没有什么太花哨的了。
乍得·库珀

我使用鸭嘴兽-只需要输出在其单元格中带有文本的表(没有图像)。
PolyGeo


2

还有更多:

GRASS-您可以使用Python调用GRASS。

FMEObjects-如果您拥有FME许可证,那么他们也有一个python模块,该模块允许您调用其一些很酷的转换器。


真?据我所知,FMEObjects没有用于调用转换器的Python绑定。我真的希望如此。如果您知道这样做并且知道如何访问该API,请告诉我们。目前,这将使我的生活变得更加轻松。
celticflute

1

Enthought软件包分发版将上面列出的许多软件包捆绑到一个紧密集成的平台中。他们甚至确保可以轻松配置它以在ArcGIS的python提示符下工作,并且arcpy可以在python提示符下使用。我们在办公室使用它。从我们的内部Wiki:

连接ArcGIS和EPD的最佳方法是安装两者并使用.pth文件链接它们,因此Python sys.path包括其他系统的模块。文件“ zzEPD.pth”允许ArcGIS Python访问EPD模块,“ zzArcGIS.pth”允许EPD Python访问arcpy。(使用“ zz”前缀可确保“外部”程序包位于sys.path中的最后,以避免两个Python安装中都存在的模块发生潜在冲突。)如果遇到ArcGIS冲突,只需将文件重命名为。 txt(“ zzEPD.pth.txt”)并重新启动ArcGIS,ArcGIS将不再“查看” EPD模块(它们将不在sys.path中)。

* zzEPD.pth-放在文件夹\ Python27 \ Desktop10.1 \ lib \ site-packages *

# zzEPD.pth 
# Path to Enthought modules
C:\Python27\epd32\lib\site-packages

* zzArcGIS.pth-放在文件夹\ Python27 \ epd32 \ lib \ site-packages *

# zzArcGIS.pth 
# copy of \Python27\Desktop10.1\lib\site-packages\ArcGIS.pth
C:\ArcGIS\Desktop10.1\bin
C:\ArcGIS\Desktop10.1\arcpy
C:\ArcGIS\Desktop10.1\ArcToolbox\Scripts

1

不是特定于GIS,而是调试python,这IPDB是惊人的。https://pypi.python.org/pypi/ipdb

要使用它,只需在代码中放置以下几行:

import ipdb
ipdb.set_trace()

然后,在Python Shell中,您可以放入任何代码段并与该当前状态下的所有变量进行交互。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.