环境

        Windows 7 64位操作系统、已经安装ArcGIS 10.2.2(32位) 、 需要安装postgresql-9.2.24(64位)
在这里插入图片描述

第一步,安装PostgreSQL9.2

        这里默认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 安装完后如下图所示:
在这里插入图片描述

第二步,PostgreSQL9.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创建SDE数据库

        这一部分主要是参考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数据库的sde连接

        打开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中的数据库

        在开始菜单下找到pgAdmin III,双击打开
在这里插入图片描述
        打开后,如下图所示,点击PostgreSQL 9.2 (localhost:5432)右键选择连接
在这里插入图片描述
        在弹出的连接到服务器窗口中输入超级用户密码1234即可,点击确定
在这里插入图片描述
        此时,可见PostgreSQL中的数据库全部被打开,可以看到sde数据库和postgres数据库,至此ArcGIS10.2.2安装以PostgreSQL9.2位数据库端的ArcSDE数据库配置完成。
在这里插入图片描述

第六步,将tif栅格数据存放到sde数据库,并利用ArcPy来读取

        为了将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 计算完成!")

        运行结果如下:
在这里插入图片描述
        最终的处理结果保存到文件目录下。
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐