空间数据

警告

在MapServer 7.0版本中删除了MapServer的原生SDE驱动程序(请参见 discussion )。GDAL的ArcSDE驱动程序已从GDAL中移除 3.2.0 release

空间数据库引擎(SDE)是 ESRI 其产品使空间数据能够存储、管理和快速从领先的商业数据库管理系统(如Oracle、Microsoft SQL Server、Sybase、IBM DB2和Informix)中检索。

支持的ArcSDE操作

  • 版本化查询(从指定版本查询几何图形和属性)

  • querybyattributes(根据属性值选择几何图形和属性)

  • 对数据库表内的联接支持有限</li>

  • QueryByRect(根据范围选择几何图形)

  • 飞行中的投射

  • 覆盖的SDE(覆盖、shapefile和arcstorm/arclibrary存储库的只读SDE类型)

  • SDE 8.1、8.2、8.3、9.0、9.1和9.2

  • Linux、Windows和Solaris(支持SDE C API的平台)

不支持的ArcSDE操作

  • querybyshape(使用mapscript传入一个形状并将其用于查询)

  • 直接连接(绕过SDE,直接使用SDE C API连接到数据库)

如何连接SDE:

  • 为您的平台安装SDE C API客户端库(最好与您使用的服务器版本相匹配,即8.2客户端->8.2服务器、8.3客户端->8.3服务器)

  • 使用SDE支持编译MapServer MapServer Unix Compilation Howto 具体细节)

  • 在使用SDE作为连接类型的映射文件中定义层块

LAYER
  NAME         states
  TYPE         POLYGON
  CONNECTION "sdemachine.iastate.edu,port:5151,sde,username,password"
  CONNECTIONTYPE SDE
  DATA "HOBU.STATES_LAYER,SHAPE,SDE.DEFAULT"
  FILTER "where MYCOLUMN is not NULL"
  PROCESSING "QUERYORDER=ATTRIBUTE" # <-- MapServer 4.10 and above

  # Within database one-to-one join support

  # MapServer 5.0 and above
  PROCESSING "JOINTABLE=SDE_MASTER.GEOSERVWRITE.JOINTABLE"

  # MapServer 5.0 and above
  CLASSITEM "SDE_MASTER.GEOSERVWRITE.JOINTABLE.VAL"

  # MapServer 5.0 and above
  FILTER "SDE_MASTER.GEOSERVWRITE.JOINTABLE.AQ_TAG=SDE_MASTER.GEOSERVWRITE.JOINTESTLAYER.AQ_TAG"

  # ObjectID column manipulation
  # MapServer 5.0 and above
  PROCESSING "OBJECTID=OBJECTID"

  TEMPLATE '/where/the/template/file/is/located'
  CLASS
      STYLE
              SYMBOL 'circle'
              SIZE 3
              COLOR -1 -1 -1
              OUTLINECOLOR 0 0 0
      END
  END
END

连接顺序很重要!

  • sdemachine.iastate.edu -要连接的计算机的名称。在某些情况下,如果运行mapserver的服务器未配置为级联DNS查找,则可能需要使用计算机的IP地址而不是名称。

  • port:5151 -SDE的端口号。端口:*很重要,因为SDE希望您定义 **service* 在这个插槽中,它可以是其他名称,如 sde:oracle (用于直接连接)或 esri_sde (对于端口5151定义为ESRI的系统/etc/服务)

  • sde -SDE服务器用于连接到数据库的数据库用户名。它通常只对连接到Oracle的SDE设置很重要(即使在那时,也不那么重要)。就这样吧 sde 如果你不知道应该是什么。

  • username DATA 指令。可以使用arcCatalog或sde命令行实用程序授予层适当的权限。

  • password -连接到SDE的用户的密码。 区分大小写.

数据顺序很重要!

  • HOBU.STATES_LAYER full 层所在的表的名称。如果使用Oracle或Microsoft SQL Server作为SDE的数据库,则还必须提供架构名称。

  • SHAPE -包含几何图形的列。SDE技术上允许在同一层中存储多个几何类型,但在实践中,这是不可取的。此外,如果层(或层的版本)中存在无效或空的几何图形,则会出现问题。

  • SDE.DEFAULT SDE.DEFAULT 将用于所有查询。 区分大小写.

备注

version参数与mapserver 4.2位于不同的位置,而mapserver 4.2在连接字符串中具有该参数。

TEMPLATE

  • /where/the/template/file/is/located-必须指定模板指令(可以指向虚拟文件),以便MapServer能够从SDE查询属性。如果您只打算绘制层,那么这个指令是不必要的,并且会减慢SDE的查询操作(特别是对于具有大量属性列的层)。

PROCESSING

  • 处理“queryorder=attribute”-允许您强制SDE首先使用筛选语句中定义的WHERE子句,而不尝试命中空间索引。只有在非常特殊的情况下你才会想这样做。

  • 处理“objectid=objectid”-如果SDE驱动程序检测到唯一ID列时遇到问题,可以使用此处理参数覆盖它。这样做也会有一点性能上的好处,因为这样可以为数据库节省一些额外的查询。

  • 处理“attribute_qualified=true”-用户可以将此选项设置为始终使用完全限定的属性名。

在数据库联接支持中

从MapServer 5.0开始,MapServer的SDE驱动程序允许您将一个没有几何图形的属性表连接到要渲染的层。此功能允许您使用联接表中的数据,就像使用postgis或oracle spatial之类的复合查询一样。也就是说,联接右表中的列可用于ClassItem、Labelitem等。然而,最大的限制是 fully qualified 必须使用名称,否则很可能不起作用。通过处理选项激活连接支持。

  • 处理“jointable=sde_master.geoservwrite.jointable”-jointable处理选项告诉驱动程序您要将当前层连接到哪个表。

  • classitem“sde_master.geoservwrite.jointable.val”-使用此机制的联接表的classitem或labelitem必须完全限定。

  • filter“sde_master.geostervwrite.jointable.aq_tag=sde_master.geostervwrite.jointestlayer.aq_tag”-连接的一个重要部分是定义如何进行连接。使用过滤器进行此操作。