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 super123arcsde 10.2attribute 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 super123arcsde 10.2attribute administration utility-----------------------------------------------------successfully created view myview.
总结:也就是说arcsde命令不支持sqlserver的跨数据库关联。
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 sdearcsde 10.2attribute administration utility----------------------------------------------------- error: underlying dbms error (-51). error: unable to create view myviewora-01720: 不存在 'aaa.owner' 的授权选项
系统提示sde用户并没有对aaa.owner有权限。
c:\users\administrator>sqlplus aaa/aaa@orcl_131sql*plus: release 11.2.0.1.0 production on 星期四 2月 27 11:51:38 2014copyright (c) 1982, 2010, oracle. all rights reserved.连接到:oracle database 11g enterprise edition release 11.2.0.1.0 - 64bit productionwith the partitioning, olap, data mining and real application testing optionssql> grant select on owner to sde with grant option;授权成功。sql> exit从 oracle database 11g enterprise edition release 11.2.0.1.0 - 64bit productionwith 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,shape,name1,name2 -w sde.pl.pid=aaa.owner.pid -i sde:oracle11g:192.168.220.131/orcl -u sde -p sdearcsde 10.2attribute 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
----------------------------------------------------------------------------------
