如何在 ArcEngine 与 ArcServer 开开发过程中
使用轻型数据库 postgresql
作为一名 GIS 开发人员,在使用 AE 或是 Web 手段开发的过程中,难免要使用各种各样
的空间数据或是表数据,而在数据库的选择上,众所周知,SQL Server 与 Oracle 未免太过庞
大,access 在安全性上堪忧,在此介绍一款轻型的数据库:postgresql。
号称是世界上功能最强大的开源数据库在体积上并不大,约莫四五十兆,相对于 Orcale
或是 SQL Server 这两个庞然大物来说已是很小,比起 access 也依然是小一点,可是以笔者作
为一个初学者的水平来看,它的功能已然足够,而据我所知,我的一些朋友在毕业工作所在
的单位中也依然是使用此款数据库,其优点就不一一列举了,在此介绍一下它的部署以及使
用方法:
一.Postgresql 的安装与在 ArcMap 中的使用
1.下载并运行安装包(在此以 postgresql 9.2 以及它所支持的 ArcGIS 10.2 版本为例),
打开安装路径下的 data\\pg_hba.conf 文件,添加“host all all 0.0.0.0/0 md5”记录,
让任意客户端均可连接你的数据库集群(修改后需重启 postgresql-x64-9.0 服务以生效)
2.创建新用户,并赋予其“超级用户”的权限。
ArcMap
3.配 置 插 件 : 将
安 装 目 录 下 的
DatabaseSupport\\PostgreSQL\\9.2\\Windows\\st_geometry.dll 文件拷贝至 PostgreSQL
安装目录下的 9.2\\lib 目录。在 PostgreSQL 中创建 Geodatabase 时必须用到此类库。然后
将 PostgreSQL 安装目录下的 bin 目录中的 libeay32.dll, libiconv-2.dll, libintl-8.dll,
libpq.dll, and ssleay32.dll 文件拷贝到 ArcMap 安装目录下的 bin 目录下。
4.在 ArcMap 中 打 开 工 具 箱 , 打 开 “ Data
Management
tools->GeodababsaseAdministration->CreateEnterprise Geodatabase”工具,填写必要
参数,如刚才新建的用户,需要创建的数据库名称以及密码等:
点击确定创建完毕。
5.在 ArcCatalog 中点击“Add Database Connection”,添加刚才的数据库,
(把没有的那部分删了!!!!!)其中 Database Platform 参数应该为 PostgreSQL,
而实例应该为连接的数据库所在的 IP 地址,用户名密码视实际情况而定:
点击 OK,链接建立完毕,接下来是在开发过程中连接上它。
二.使用 AE 连接数据库:
不多说,上代码,需要的参数分别是,实例名(如 localhost),端口号(默认是 5432),
用户及密码,数据库名。
private void TryQuery()
{
try
{
// PostgeSQL-style connection string
string
connstring
=
String.Format("Server={0};Port={1};User
Id={2};Password={3};Database={4};", "localhost", "5432", "postgres", "sa", "postgis20");
// Making connection with Npgsql provider
NpgsqlConnection conn = new NpgsqlConnection(connstring);
conn.Open();
// quite complex sql statement
// data adapter making request from our connection
//string sql = "SELECT * from cellcover_region";
string
"SELECT
a.*
sql
=
FROM public.cellcover_region as
a,
site_font_point as b where b.gid=1 and ST_Within(b.geom,a.geom)";
NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
// i always reset DataSet before i do
// something with it.... i don't know why :-)
ds.Reset();
// filling DataSet with result from NpgsqlDataAdapter
da.Fill(ds);
// since it C# DataSet can handle multiple tables, we will select first
dt = ds.Tables[0];
// connect grid to DataTable
dataGridView1.DataSource = dt;
// since we only showing the result we don't need connection anymore
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
三.在 ArcGIS Server 中使用 postgresql
在使用 ArcGIS Server 连接该数据库时,用户需知的一点是 ArcGIS Server 是 64 位程序,
而 ArcMap 是 32 位程序,因此 postgresql 需要的插件与 ArcMap 不同,如果你有 ArcSDE 数据
库,可从它的安装目录下的 bin 目录下找到 libeay32.dll, libintl.dll, libpq.dll, and ssleay32.dll 上
述同名的 5 个 64 位的库到 ArcGISServer 的 bin 目录下。
若是你发布的 MapService 中的数据来自于 postgresql,而你又想在数据库中更改它们之
后再在 MapService 中显示,此时你需要将数据库连接注册到 ArcServer Manager 中:
在如图所示位置中点击“注册数据库”
编写名称,选择数据库连接文件(可在 ArcCatalog 的数据库连接中点击右键查看属性,
然后找到它的位置),点击创建完成:
如此,你便可以在 ArcGIS Server 中使用该数据库了。
希望使用 AE 开发的 GISR 能在本文中获取一些帮助,如果你想使用数据库,可是又不想
太麻烦,这个方法值得考虑。