Windows 7 64位操作系统、已经安装ArcGIS 10.2.2(32位) 、 需要安装postgresql-9.2.24(64位)
这里默认ArcGIS 10.2.2已经安装完成,首先我们需要查看ArcGIS10.2.2所支持的PostgreSQL对应的版本,找到ArcGIS的安装目录:D:\ArcGIS 10.2.2\Desktop10.2\DatabaseSupport\PostgreSQL,如下图所示,可以看出,这里ArcGIS10.2.2支持9.1和9.2版本的PostgreSQL数据库,同时此目录下包含Windows64文件夹,可见ArcGIS 10.2.2支持64位的数据库,因此我们选择64位的PostgreSQL9.2作为数据库端, 首先我们下载64位的安装包 postgresql-9.2.24-1-windows-x64.exe,之后双击此exe文件进行安装即可。 同时为了获得32位的dll文件,可以先下载32位的PostgreSQl 9.2软件postgresql-9.2.1-1-windows.exe.进行安装后,找到bin 目录,将所需要的dll文件复制出来,然后卸载掉32位的PostgreSQL 9.2,再安装64位的PostgreSQL9.2软件 postgresql-9.2.24-1-windows-x64.exe (注: postgresql 9.2.24下载地址:https://pan.baidu.com/s/1wFiyen2AMoDqXes1DHzYsA 提取码:s6io) 安装过程中,需要选择安装目录,会自动创建名为postgres的超级用户,需要设置数据库超级用户密码1234,服务监听端口默认为5432,选择运行语言,可以默认,最好选择C,最后在安装完成界面会自动勾选。如果勾选, 在Finish之后会运行Stack Builder,但这里我们取消勾选即可,因为我们还需要修改一些配置文件。 64位的PostgreSQL 9.2 安装完后如下图所示:
通过查看ArcGIS Desktop帮助,我们发现还需要对一些dll文件进行配置。
首先我们安装好64位的PostgreSQL 9.2后,先不要打开图形化管理工具pgAdmin III来查看PostgreSQL数据库,而是要找到PostgreSQL 9.2数据库软件的安装目录, 一,将ArcGIS Desktop安装目录D:\ArcGIS 10.2.2\Desktop10.2\DatabaseSupport\PostgreSQL\9.2\Windows64下的st_geometry.dll文件复制到PostgreSQL 9.2安装目录D:\PostgreSQL\lib下,如下图所示: 二,需要下载了 ArcGIS 客户端所对应的库。对于 32 位的 ArcGIS 应用程序,您需要 32 位的库。对于 64 位的 ArcGIS 应用程序,您需要 64 位的客户端库。由于ArcGIS10.2.2属于32位,所以需要32位的PostgreSQl 9.2对应的dll库文件 32位 Postgresql libraray链接:https://pan.baidu.com/s/1KSxnus_n7MB7neQrahQPPw 提取码:m4U9 将上图所示的5个dll文件(libeay32.dll、libiconv.dll、libintl.dll、libpq.dll 和 ssleay32.dll)复制到ArcGIS Desktop安装目录的bin目录下D:\ArcGIS 10.2.2\Desktop10.2\bin,如下图所示:
这一部分主要是参考ArcGIS帮助中的创建企业级地理数据库、在PostgreSQl中设置地理数据库教程
首先打开ArcMap,然后使用ArcGIS工具箱创建企业地理数据库: 配置参数如下图所示: 说明一下,数据库平台选择PostgreSQL,对于实例,如果是本机,可以输入localhost或127.0.0.1,如果要远程连接,对于 PostgreSQL,提供安装 PostgreSQL 的服务器的名称。 数据库管理员密码和地理数据库管理员的密码输入安装PostgreSQL9.2时设置的超级用户密码1234,最后选择大小为3KB的server.ecp授权文件即可 对于没有server.ecp授权文件的,可以到以下链接下载: 链接:https://pan.baidu.com/s/1-IIDUi5frunZzqmuH1HwRA 提取码:1qsk 点击确定,创建企业级地理数据库成功后如下所示。
打开ArcCatalog,在左侧的目录树下的数据库连接中点击添加数据库连接,输入以下参数:数据库名称选择PostgreSQL,实例为localhost,选择数据库身份验证,用户名为sde,密码为1234,数据库输入sde即可,如下图所示: 点击确定后,便可成功连接,左侧会生成一个.sde,这个.sde可以重新命名,因为是设置到本地PostgreSQL数据库的sde连接,所以重命名为postgresql_localhost.sde,在这个sde上右键或者直接双击就可打开连接。
此外,在这个sde上右键->属性,可以查看详细信息,如存放路径C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog\postgresql_localhost.sde
在开始菜单下找到pgAdmin III,双击打开 打开后,如下图所示,点击PostgreSQL 9.2 (localhost:5432)右键选择连接 在弹出的连接到服务器窗口中输入超级用户密码1234即可,点击确定 此时,可见PostgreSQL中的数据库全部被打开,可以看到sde数据库和postgres数据库,至此ArcGIS10.2.2安装以PostgreSQL9.2位数据库端的ArcSDE数据库配置完成。
为了将tif栅格数据存储到sde数据库中,需要打开ArcCatalog,将postgresql_localhost.sde的连接打开,然后右键选择导入->栅格数据集 在弹出的栅格数据至地理数据库(批量)窗口中可以选择多个tif栅格数据文件,这些栅格数据都会输出到数据库连接\postgresql_localhost.sde地理数据库当中,最后点击确定 然后,在ArcCatalog中刷新后如下图所示,在postgresql_localhost.sde下有几个数据表,这些数据表右键可以修改名称sde.sde.ET,同时在PostgreSQL数据库中查看也可以看到存放的tif数据: 接下来,利用ArcPy来读取PostgreSQL数据库中sde数据库中的tif文件并进行地图代数运算,代码如下图所示;
// ArcPy读取ArcSDE数据库中存放的tif栅格数据 #-*- coding: UTF-8 -*- import arcpy from arcpy import env import os from arcpy.sa import * # Check out the ArcGIS Spatial Analyst extension license arcpy.CheckOutExtension("Spatial") #sde库的物理路径, arcgis中sde的连接地址 inputsde = r'C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.2\ArcCatalog\postgresql_localhost.sde' env.workspace =inputsde #读取NPP模型的输入数据 NDVI_Raster = arcpy.Raster("sde.sde.NDVI")#读取tif文件 SOL_Raster = arcpy.Raster("sde.sde.SOL")#读取tif文件 ET_Raster = arcpy.Raster("sde.sde.ET")#读取tif文件 PET_Raster = arcpy.Raster("sde.sde.PET")#读取tif文件 T_Raster = arcpy.Raster("sde.sde.T")#读取tif文件 env.workspace ="H:\\CASA_Model_200101\\NPPResult" SRmin = 0.5 SRmax = 1.5 FPARmin = 0.001 FPARmax = 0.95 T_opt = 26 e_max = 0.389 SR = (1 + NDVI_Raster) / (1 - NDVI_Raster) print("SR 计算完成!") FPAR = FPARmin + (FPARmax - FPARmin) * ((SR - SRmin) / (SRmax - SRmin)) print("FPAR 计算完成!") APAR = SOL_Raster * FPAR * 0.5 print("APAR 计算完成!") def func(a): if a > -10: return 0.8 + 0.02 * a - 0.0005 * a * a else: return 0 T1 = func(T_opt) print("T1 计算完成!") T2 = (1.184/(1+Exp(0.2*(T_opt-10-T_Raster))))*(1/(1+Exp(0.3*(T_Raster -10-T_opt)))) print("T2 计算完成!") W = 0.5 +0.5* ET_Raster / PET_Raster print("W 计算完成!") e = T1 *T2 * W *e_max print("e 计算完成!") NPP = APAR * e NPP.save("H:/CASA_Model_200101/NPPResult/NPP.tif") print("NPP 计算完成!")运行结果如下: 最终的处理结果保存到文件目录下。