Home 新闻中心 技术博客

ArcGIS地图要素图层(Feature Layer)发布及调用

发布时间:2021-10-08 23:50:26   浏览量:56   作者:GIS前沿

关键词:ArcGIS,ArcGIS Server,SQL, PostgreSQL

动态地图服务主要用于地图的展示,其还有一个不足,即它不允许用户与地图的子图层进行交互,不能遍历得到每个图层,也不能查询图层。这里使用要素图层(Feature Layer)来代替它。

Feature Layer可以访问每个空间要素及其属性,可以将其看成是ArcMap中的要素类(Feature Class),它可以接受用户的查询.

1.配置ArcMap、ArcGIS Server和PostgreSQL

由于ArcMap是32位,而PostgreSQL是64位,32位的桌面程序ArcMap无法连接64位的Postgesql数据库的,因此,需要将PostgreSQL 32位的动态库文件拷贝到ArcMap的bin目录下。将tools\postgresql-9.0.5-1-windows-x86-dlls目录下的5个dll文件(这五个dll 是从32位的postgressql客户端中抽取出来)拷贝到ArcMap的bin目录下,
我的机器上是C:\Program Files (x86)\ArcGIS\Desktop10.2\bin


跟上述情况类似,要从 ArcGIS for Server 连接,则需要 64 位文件。将PostgreSQL 64位的动态库文件拷贝到ArcGIS for Server的bin目录下。将tools\postgresql-9.0.5-1-windows-x64-dlls目录下的5个dll文件(这五个dll 是从64位的postgressql客户端中抽取出来)拷贝到ArcGIS for Server的bin目录下,我的机器上是C:\Program Files\ArcGIS\Server\bin。

如果已经运行 ArcGIS for Server 正在运行,则请重启 ArcGIS Server 以便识别放入 bin 目录的文件。

在 PostgreSQL 中创建地理数据库依赖于是否存在 ST_Geometry 库。为了将空间数据存储在PostgreSQL中,需要利用ST_Geometry 存储类型存储空间数据,ST_Geometry 数据类型可通过OGC定义的SQL语言来进行访问,通过向表示地理要素的对象(点、线及面)提供存储空间,此存储类型扩展了数据库的功能。为了使PostgreSQL支持ST_Geometry 存储类型,需要将st_geometry.dll动态库拷贝到PostgreSQL的lib文件夹下。st_geometry.dll可以从ArcGIS桌面安装目录下获得,比如我的在C:\ProgramFiles(x86)\ArcGIS\Desktop10.2\DatabaseSupport\PostgreSQL\Windows64(我的机器是64位),然后拷贝到C:\Program Files\PostgreSQL\9.0\lib 可以根据自己的安装路径来设置。

1.2 创建企业级地理数据库

在Arc Toolbox中打开【创建企业级地理数据库】工具箱,如下图所示。

提供以 postgres 超级用户连接 PostgreSQL 数据库集群所需的信息,以创建数据库和 sde 用户。此外,还必须指向在授权 ArcGIS for Server 实例时生成的密钥代码文件。【实例】是PostgreSQL运行的主机名,本例中是本机localhost,数据库管理员密码是PostgreSQL超级用户的密码postgres,地理数据库管理员密码设置为sde。点击【确定】,等待创建成功。


这样,在 PostgreSQL 中就创建了数据库、sde 用户、sde 方案及地理数据库。

3.连接到已创建的地理数据库

存储在地理数据库中的数据应归sde 用户之外的其他用户所有。要创建用户,必须先以数据库管理员(本例采用 postgres 超级用户)连接地理数据库。

ArcMap 的目录树中,展开【数据库连接】节点,然后双击【添加数据库连接】。将打开【数据库连接】对话框。

提供以 postgres 超级用户连接新建数据库所需的信息。本例中,以 postgres 用户连接新建的 sde地理数据库:

由于将在地理处理工具中使用此连接文件,因此必须选中【保存用户名和密码】。运行此工具后,应在连接文件中取消选中此选项,以不同用户进行连接,或者删除此连接文件从而防止可以访问此文件的其他用户以数据库管理员登录地理数据库。

单击【确定】创建连接。在目录树中的数据库连接节点下出现新的连接文件。

接下来,可以运行创建数据库用户工具。

4.从文件型数据库迁移到企业级地理数据库

打开ArcCatalog,浏览到Bestaurants.gdb地理数据库。
右击Belize_Landbase,选择复制

浏览到kobe.localhost.sde数据库连接,右击选择粘贴。对要素类Food_and_Drinks同样做此操作,弹出以下对话框。点击确定,完成数据传输。

这样,企业级数据库中就包含如下数据,注意在要素类和关系类之前都有数据库和用户名(表示方案,每个PostghreSQL用户都自己的方案schema)前缀。

5.发布要素服务

在ArcMap中,选择【文件】菜单的【共享为】-【服务】,打开【共享为服务】向导。

选择【发布服务】,点击【下一步】,服务名称填写BelizeFS,表示Belize要素服务,点击【下一步】,点击【继续】,选择【功能】中的【Feature Access】来开启要素服务

点击【分析】,错误如下,要素服务需要一个已注册的数据库

右击该错误,选择【显示数据存储注册页面】

打开【ArcGIS Server属性】对话框,点击加号,选择【注册数据库】。

在【注册数据库】对话框中,点击【导入】,选择刚建立的数据库连接(我的是kobe.localhost.sde连接),确保【与发布者数据库连接相同】选项选上,给注册数据库起个名字,点击【确定】。

完成的数据库注册如下。点击【确定】。

点击【分析】,应该看不到错误,但可能还有警告,如下图所示。

继续发布要素服务,可以成功发布。

访问:http://localhost:6080/arcgis/rest/services/,可以看到发布的服务。

在require函数中加上FeatureLayer:
require([“esri/map”,“esri/layers/featurelayer”, “esri/dijit/Legend”],
function(Map, FeatureLayer, Legend) {
//load the layer into an object
var lyr_foodanddrinks = new esri.layers.FeatureLayer
(“http://localhost:6080/arcgis/rest/services/Belize/MapServer/0”,
{
outFields: [""]
}
);
//load another layer into an object
var lyr_landbase = new esri.layers.FeatureLayer
(“http://localhost:6080/arcgis/rest/services/Belize/MapServer/1”,
{
outFields: ["
"]
}
);
}


来源:https://blog.csdn.net/qq_43173805/article/details/107839745