在ArcGIS里使用SciPy ,安装Anaconda集成环境

转载自:http://blog.sciencenet.cn/blog-633758-1056965.html

在ArcGIS里使用SciPy

已有 989 次阅读 2017-5-25 08:52|个人分类:Arc和Py|系统分类:科研笔记

1.   ArcPy

以前我们给ArcGIS的桌面产品做加载项(Add-In)时,用的是VBA,当时翻译了张康聪教授的《基于VBA的ArcObjects编程:面向任务的方法》一书,反响还不错。但从ArcGIS 10.1开始,ESRI就不再内置VBA,需要额外安装VBA兼容件(VBACompatibility);但ArcGIS 10.5版本后,由于微软宣布不再为第三方的VBA提供维护和问题解答,因此ESRI连独立安装的VBA兼容件都不提供了。

https://blogs.esri.com/esri/arcgis/2016/11/14/arcgis-desktop-and-vba-moving-forward/

取而代之的是Python这个更有发展前途且免费的语言。其中,ArcPy是Python的一个第三方包(sitepackage),有了它就可以在Python里开展地理数据分析、数据转换、数据管理和地图自动化。

ArcPy包含了空间数据访问模块(arcpy.da)、制图模块(arcpy.mapping)、ArcGIS空间分析器扩展模块(arcpy.sa)、ArcGIS网络分析器扩展模块(arcpy.na),使得Python可以访问所有的地理处理(geoprocessing)工具。

可以说,ArcPy是将ArcGIS桌面应用的地理处理功能封装成为Python的类和函数。

http://desktop.arcgis.com/en/arcmap/10.3/analyze/arcpy/essential-arcpy-vocabulary.htm

Python本身只是语言,和其它语言类似,提供了基本的数据类型、关键字、语句,以及面向对象的机制,在此基础上,Python的能力是通过“包-模块-类”来提供的。包(package)包含多个模块(module),模块包含多个类(class)和函数(function)。

Python的包,分为内建包(built-inpackage)和第三方包(site package)。内建包本身是Python官方提供的,比如sys包;第三方则是由世界各地的不同组织开发的,大大丰富了Python的能力。无论是内建包还是第三方包,使用时都需要引入(import)。图1是引入并使用arcpy包的例子。


在ArcGIS里使用SciPy ,安装Anaconda集成环境_第1张图片

图1 引入并使用arcpy包

2.   SciPy

ArcGIS 10.3 桌面应用的Python,配备了两个方便研究人员使用的第三方包,一个是numpy,另一个是matplotlib。numpy的主要作用是矩阵运算;而matplotlib,顾名思义是用来作图的。这两个包都是SciPy(赛派)的一部分。

SciPy is a Python-based ecosystem ofopen-source software for mathematics, science,and engineering.

也就是说,SciPy(赛派)是专门开发各种给Python使用的开源科技应用软件的机构和个人。目前发布了几个不错的第三方包:

• numpy:矩阵运算

• scipy library:科学计算基本库

• Matplotlib:3D综合制图

• Ipython:多功能交互控制台

• Sympy:符号数学

• Pandas:数据结构和分析

3.   怎么让ArcSci一些?

据说ArcGIS Pro会集成SciPy的所有包,但在ArcGIS 10.3桌面版里,却只有Numpy和Matplotlib,其它SciPy包只能自己加装,但是:

Pandas and Matplotlib may depend on aparticular version of NumPy. If the correct version of NumPy is not loaded onyour computer, Pandas and Matplotlib may not function as expected.

安装SciPy时必须了解NumPy的版本,因为SciPy是版本依赖的,特定版本的SciPy与特定版本的NumPy匹配。这给安装其它SciPy包带来了麻烦。

http://www.esri.com/esri-news/arcuser/winter-2015/integrating-arcgis-and-scipy

a)    查看版本

在Python里,查看版本的办法,是用print()函数,比如想查看Python本身的版本,则在命令行输入:

>>> print(sys.version)

对应的结果则是:

2.7.12  (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)]

我使用的Python版本是2.7.12. 顺便说一下,Python2.X 版本和 Python 3.X 版本有显著不同,ArcGIS 10.3 内置的是Python 2.7., 而Python 3.*的程序是不一定能在2.7上运行的。

那么,其它包的版本该怎么查询呢?还是用print(),在调用这个函数时,请先导入包。例如:

>>> import numpy

>>> print(numpy.__version__)  # version前后分别是2条下划线

1.7.1

可以同时查询多个包的版本:

>>> import numpy, scipy, pandas

>>> print(numpy.__version__,scipy.__version__,  pandas.__version__)

('1.7.1', '0.13.2', '0.13.0')

如上图所示,在numpy的版本是1.7.1的情况下,scipy和pandas的版本分别是0.13.2和0.13.0。

b)    安装Anaconda

看起来很复杂,一个接一个的新词。不过,其实Anaconda是一个开源的辅助工具,,用途是帮用户方便地安装和管理第三方的Python包。

(1)Anaconda下载地址:http://continuum.io/downloads

由于ArcGIS 10.3是32位的,因此下载时请选择32位(x86)版本

(2)安装对话框弹出时,请选择“所有用户”(All Users)

(3)由于ArcGIS本身自带Python 2.7,因此在安装Anaconda时,不要安装新的Python。所以,在安装对话框里,去掉这两个选项前的勾:i) make Anaconda the default Python 以及 ii)add Anaconda’s Python to the PATH.

(4)安装结束后,每次运行Anaconda进行设置时,请以管理员身份运行(在快捷方式上右击,选择“以管理员身份运行”)。

(5)在弹出的Anaconda Prompt黑色窗口里输入:conda update conda,并在提示 Preceed([y]/n)?时,回车确认。

在ArcGIS里使用SciPy ,安装Anaconda集成环境_第2张图片

图2 Anaconda Prompt窗口

(注:由于网络连接情况不同,这里可能会持续很长时间,如果连接失败,可以不断重试)

顺利更新后,Anaconda的Python管理环境就准备好了,下一步是和ArcGIS集成。

注:我的Anaconda是安装在 c:Python27 这个目录下的,ArcGIS自带的Python 2.7 也在该目录下。

c)    AnacondaArcGIS集成

集成之前先明确ArcGIS里的python,numpy和matplotlib分别是什么版本:

>>> import sys, numpy, matplotlib

>>> print(sys.version, numpy.__version__, matplotlib.__version__)

('2.7.12  (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)]',  '1.7.1', '1.3.0'

然后,在Anaconda Prompt窗口(注意是右键,以管理员身份运行)里,输入以下命令行,创建目录以准备自动下载和安装各种第三方包:

conda create -n arc1030python=2.7.12 numpy=1.7.1 matplotlib=1.3.0 pyparsing xlrd xlwt

2  arc1030,是新创建的文件夹名称,新的第三方包将安装在这个文件夹下;

2  python=2.7.12, ArcGIS自带Python的版本

2  numpy=1.7.1,ArcGIS自带numpy的版本

2  matplotlib=1.3.0,ArcGIS自带matplotlib的版本

该命令不但创建了安装新的第三方包的目录,而且将ArcGIS集成到Anaconda环境里。在Anaconda Prompt窗口输入 activate arc1030,可以测试是否成功。如果成功,窗口的下一行前面会出现(arc1030)的字样(见图3)。

在ArcGIS里使用SciPy ,安装Anaconda集成环境_第3张图片

图3 测试在Anaconda里是否可以激活ArcGIS的Python

d)    添加更多的第三方包

以下命令可以将scipy,pandas下载并安装到刚才创建的文件夹(比如arc1030)下:

condainstall -n arc1030 python=2.7.12 numpy=1.7.1 matplotlib=1.3.0 pyparsing xlrdxlwt pandas scipy

也可以安装ipython和sympy:

condainstall -n arc1030 python=2.7.12 numpy=1.7.1 matplotlib=1.3.0 pyparsing xlrdxlwt ipython sympy

e)    Anaconda里的第三方包集成到ArcGIS

这里所谓的集成,其实只是让ArcGIS自带的Python知道本机的哪个目录里还有合适第三方包。假设上面的Anaconda是安装在“C:Python27anaconda”这个目录,并且用conda create命令创建的目录是“arc1030”,则所有新安装的第三方包在这个目录里:

C:Python27anacondaenvsarc1030Libsite-packages

下面把这个目录要告诉ArcGIS自带的Python,以便它能够在这个目录下import第三方包。

(1)创建一个后缀名为pth的文件,例如“zcondaNaNh”,该文件里只需要一行文本:

C:Python27anacondaenvsarc1030Libsite-packages

(2)将这个pth文件拷贝到ArcGIS自带Python的第三方包存放目录中,应该是:

C:Python27ArcGIS10.3libsite-packages

至此,通过Anaconda的协助,SciPy各个第三方包的安装结束。不出意外的话,启动arcmap,并点击屏幕剪辑按钮,打开python窗口,在该窗口下就可以import刚才安装的第三方包了。

在ArcGIS里使用SciPy ,安装Anaconda集成环境_第4张图片

图4 成功引入scipy

https://my.usgs.gov/confluence/pages/viewpage.action?pageId=540116867#UsingAnacondamodulesfromtheESRIpythonenvironment(AllUsers)-1)InstallAnacondaforAllUsers


你可能感兴趣的:(python)