ArcSDE地理数据库跨用户以及跨数据库表关联研究
ArcSDE提供多种方式的关联操作,Join、Relate、ArcSDE视图、QueryLayer、RelationshipClass等,每一种方式都有自己独特的适用范围和方法。 但是一般情况下,我们在介绍这些方法的使用过程中,无疑都是在同一个数据库(SQLServer)和同一个用户下(Oracle)下
ArcSDE提供多种方式的关联操作,Join、Relate、ArcSDE视图、QueryLayer、RelationshipClass等,每一种方式都有自己独特的适用范围和方法。
但是一般情况下,我们在介绍这些方法的使用过程中,无疑都是在同一个数据库(SQLServer)和同一个用户下(Oracle)下的环境中使用,但是很多用户在实际过程中使用了关联,其实都是空间数据和属性数据的关联,这些属性数据往往与空间数据不再一块儿,那么类似这种情况下,ArcSDE是否可以实现呢?
通用的方法就是Join,用户可以将不同存储位置的数据加载到ArcMap中进行Join,然后保存MXD,不管是直接操作该关联对象还是发布ArcGIS Server服务都是可以的,但是这种方式给用户带来的不是性能低下就是在发布服务的时候有明显的问题。
比如,当发布服务时,数据源进行join,在ArcGIS10.1环境下会出现一个问题
1:当ArcGIS10.1 SP1补丁,Join之后的标注看不到,但是不打SP1补丁可以,该问题经过跟美国沟通是一个Bug:
NIM087311 Map labels do not work in a map service if the feature class resides in an
ArcSDE database and is joined to a table.
http://support.esri.com/en/bugs/nimbus/TklNMDg3MzEx该问题已经在ArcGIS 10.1 SP1 for (Desktop, Engine, Server) Quality Improvement Patch和ArcGIS10.2已经解决。
2:使用Join发布服务,在query中可以查到结果,在find中不行。
那么我们只能通过ArcSDE视图或者QueryLayer的方式来解决这个问题。
----------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
----------------------------------------------------------------------------------
SQLServer数据库
例如,我的测试数据,空间数据pl和属性数据owner,两者共有的关联字段是pid,那么pl存储在sde101的数据库中(database),owner存储在test数据库中。
注意:因为牵涉到跨库操作,所以,我设置了sde用户默认对sde101数据库有操作权限,我还需要设置sde用户对test数据库有相关权限,如果更加严谨的话,sde用户对test数据库中的owner 表有操作权限。
1:使用ArcSDE命令视图方法
C:\Program Files\ArcGIS\ArcSDE\sqlexe\bin>sdetable -o create_view -T myview123 -t sde101.dbo.place,test.dbo.owner -c sde101.dbo.place.objectid,sde101.dbo.place.shape,sde101.dbo.place.pid,test.dbo.owner.name -a objectid,shape,pid,name -w "sde101.dbo.place.pid=test.dbo.owner.pid" -i sde:sqlserver:lishaohua -s lishaohua -D sde101 -u sde -p Super123 ArcSDE 10.2 Attribute Administration Utility ----------------------------------------------------- Error: Invalid database name (-162). Error: Unable to create view myview123
那么如果我直接将owner拷贝到sde101数据库,也就是同一个数据库下的空间数据与属性数据进行关联,测试创建视图没有问题。
C:\Program Files\ArcGIS\ArcSDE\sqlexe\bin>sdetable -o create_view -T myview -t sde101.dbo.place,sde101.dbo.owner -c sde101.dbo.place.objectid,sde101.dbo.place.shape,sde101.dbo.place.pid,sde101.dbo.owner.name -a objectid,shape,pid,name -w "sde101.dbo.place.pid=sde101.dbo.owner.pid" -i sde:sqlserver:lishaohua -s lishaohua -D sde101 -u sde -p Super123 ArcSDE 10.2 Attribute Administration Utility ----------------------------------------------------- Successfully created view myview.
2:使用QueryLayer关联
总结:用户可以使用QueryLayer实现SQLServer的跨数据库关联,用户使用QueryLayer发布ArcGIS Server服务没有问题。
----------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
----------------------------------------------------------------------------------
Oracle数据库
例如测试数据,sde用户下存储空间数据PL,aaa用户下存储属性数据owner,关联字段为pid
1:使用ArcSDE命令创建视图
C:\Users\Administrator>sdetable -o create_view -T myview -t sde.pl,aaa.owner -c sde.pl.objectid,sde.pl.shape,sde.pl.name,aaa.owner.name -a objectid,shape,name1,name2 -w "sde.pl.pid=aaa.owner.pid" -i sde:oracle11g:192.168.220.131/orcl -u sde -p sde ArcSDE 10.2 Attribute Administration Utility ----------------------------------------------------- Error: Underlying DBMS error (-51). Error: Unable to create view myview ORA-01720: 不存在 'AAA.OWNER' 的授权选项
系统提示sde用户并没有对aaa.owner有权限。
C:\Users\Administrator>sqlplus aaa/aaa@orcl_131 SQL*Plus: Release 11.2.0.1.0 Production on 星期四 2月 27 11:51:38 2014 Copyright (c) 1982, 2010, Oracle. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> grant select on owner to sde with grant option; 授权成功。 SQL> exit 从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开 C:\Users\Administrator>sdetable -o create_view -T myview -t sde.pl,aaa.owner -c sde.pl.objectid,sde.pl.shape,sde.pl.name,aaa.owner.name -a objectid,s hape,name1,name2 -w "sde.pl.pid=aaa.owner.pid" -i sde:oracle11g:192.168.220.131/orcl -u sde -p sde ArcSDE 10.2 Attribute Administration Utility ----------------------------------------------------- Successfully created view myview.
使用aaa用户将owner表赋予sde用户,然后创建视图成功。
总结:Oracle数据库支持跨用户创建ArcSDE空间视图
2:使用QueryLayer方式
总结;可以看到,使用QueryLayer也是支持跨用户关联的。
那么在oracle数据库中,如果用户希望跨数据库实例,请参考:
ArcSDE进行跨数据库的关联
http://blog.csdn.net/linghe301/article/details/7237049
但是这种方法有很多问题,不建议用户使用。
更多参考:
ArcGIS表关联方式介绍(二)-ArcSDE视图、QueryLayer、RelationshipClass
http://blog.csdn.net/linghe301/article/details/6649717
ArcGIS表关联方式介绍(一)-Join、Relate
http://blog.csdn.net/linghe301/article/details/6649689
----------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
----------------------------------------------------------------------------------

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Go语言是一种高效、简洁且易于学习的编程语言,因其在并发编程和网络编程方面的优势而备受开发者青睐。在实际开发中,数据库操作是不可或缺的一部分,本文将介绍如何使用Go语言实现数据库的增删改查操作。在Go语言中,我们通常使用第三方库来操作数据库,比如常用的sql包、gorm等。这里以sql包为例介绍如何实现数据库的增删改查操作。假设我们使用的是MySQL数据库。

Hibernate多态映射可映射继承类到数据库,提供以下映射类型:joined-subclass:为子类创建单独表,包含父类所有列。table-per-class:为子类创建单独表,仅包含子类特有列。union-subclass:类似joined-subclass,但父类表联合所有子类列。

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

HTML无法直接读取数据库,但可以通过JavaScript和AJAX实现。其步骤包括建立数据库连接、发送查询、处理响应和更新页面。本文提供了利用JavaScript、AJAX和PHP来从MySQL数据库读取数据的实战示例,展示了如何在HTML页面中动态显示查询结果。该示例使用XMLHttpRequest建立数据库连接,发送查询并处理响应,从而将数据填充到页面元素中,实现了HTML读取数据库的功能。

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

PHP是一种广泛应用于网站开发的后端编程语言,它具有强大的数据库操作功能,常用于与MySQL等数据库进行交互。然而,由于中文字符编码的复杂性,在处理数据库中文乱码时常常会出现问题。本文将介绍PHP处理数据库中文乱码的技巧与实践,包括常见的乱码原因、解决方法和具体的代码示例。常见的乱码原因数据库字符集设置不正确:数据库在创建时需选择正确的字符集,如utf8或u

在Golang中使用数据库回调函数可以实现:在指定数据库操作完成后执行自定义代码。通过单独的函数添加自定义行为,无需编写额外代码。回调函数可用于插入、更新、删除和查询操作。必须使用sql.Exec、sql.QueryRow或sql.Query函数才能使用回调函数。
