大赵传奇

援引事类,扬搉古今,举要删芜,言辩而理切--QQ276605216

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ESRI:

ST_Geometry 数据类型遵循用户定义数据类型 (UDT) 的 SQL 3 规范,用于创建可存储空间数据(如地标、街道或土地宗地的位置)的列。

该数据类型符合开放地理空间联盟 (OGC) 标准的结构化查询语言 (SQL) 来访问地理数据库和数据库。

通过向表示地理要素的对象(点、线及面)提供存储空间,此存储类型扩展了数据库的功能。此存储类型旨在充分利用数据库资源;与数据库要素(如复制与分区)兼容;以及快速访问空间数据。

Esri 已经在 Oracle、PostgreSQL 和 SQLite 中实现 ST_Geometry 类型

arcgis sde中配置ST_Geometry 

通常都是已经创建sde企业地理数据库中配置ST_Geometry 的。没有配置之前执行相关 函数就会报错,就像这样:

imageimage

创建过程如下可能看到如下信息,我们先进行跳过,点击完成即可,这样我们就可以在Oracle中管理空间数据了。

image

select sde.st_intersects(sde.st_point(11.1, 16.01, 4326),
                         sde.st_polygon('polygon ((10.01 20.01, 20.01 20.01, 20.01 15.04,10.01 15.04,10.01 20.01))',
                                        4326)) as test
  from dual;

image

提示缺少dll,为什么会这样呢,其实在创建企业级数据库时候的绿色提示已经告知我们了,这是因为ST_Geometry 的SQL函数使用通过Oracle外部过程代理(即 extproc)访问 Oracle 的共享库,如果需要使用这些内容,还需要进一步进行配置。

3、将st_shapelib.dll文件拷贝到Oracle安装目录BIN文件夹下

其中st_shapelib.dll可以从安装有Desktop的机器上拷贝,具体路径:C:\Program Files (x86)\ArcGIS\Desktop10.4\DatabaseSupport\Oracle\Windows64

我拷贝的是两个文件:

Oracle目录下BIN文件夹具体路径:D:\app\Administrator\product\11.2.0\dbhome_1\BIN

create or replace library ST_SHAPELIB as  'E:\app\Administrator\product\11.2.0\dbhome_1\BIN\st_shapelib.dll';
alter package sde.st_geometry_shapelib_pkg compile reuse settings;
select * from user_libraries;
select sde.st_astext(shape) from DBZD;
select sde.st_astext(sde.st_point(103.806709, 30.660408,4326)) from dual

 

 PS:同时也是解决 ORA-28595Extproc 代理 DLL 路径无效 的方法

ORA-06512: 在 "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 70

ORA-06512: 在 "SDE.ST_GEOMETRY_OPERATORS", line 68

 

注意:当arcgis版本为10.4(以上也可能是,具体看官网文档)时,需要安装vc++ 2013 64位运行环境,依据为esri官方文档

 

可以这里下载

https://download.visualstudio.microsoft.com/download/pr/1754ea58-11a6-44ab-a262-696e194ce543/3642E3F95D50CC193E4B5A0B0FFBF7FE2C08801517758B4C8AEB7105A091208A/VC_redist.x64.exe

用SDE用户登录plsql,能看到如下两个对象则说明成功

 

 PS:有时执行完上述两句sql后,图标有个红色X

 此时只要recompile就行

 

 

 


以下开始补充在linux 服务端的配置:

某次项目的情况,sde(oracle版)服务端是linux系统,其他环境为:arcgis 10.7,oracle12c R2

 

Linux与win的不同在于拷st_shapelib文件的位置不同,其他还是参考win版的方法

 

st_shapelib文件在arcmap 10.7的位置(只有64位,不用考虑位数问题了)

libst_shapelib.so相当于win版的st_shapelib.dll文件,然后其他操作都是一样的

 

 为了让oracle能调用到 st_shapelib.dll 需要在 E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN    配置listener.ora

 

在 hs\admin 下配置 extproc.ora:

重启oracle 监听服务

 

 

PS:我们用于配置的plsql可以在客户端(跟服务端不是一台机器),但是libst_shapelib.so文件路径依然是服务端的本地路径,因为调用libst_shapelib.so还是在服务端调用,所以不用考虑为什么客户端里配服务端本地路径的问题

 

 

 注意相同的sql 在 plsql中展示不同:

 select sde.st_astext(sde.st_point(103.806709, 30.660408,4326)) from dual

 

OGC 可识别文本表示

可识别文本 (WKT) 表示是带格式的 ASCII 文本字符串,该字符串可将几何转换成 ASCII 文本格式。可在第三代或第四代语言(3GL 或 4GL)程序中使用这些函数,因为这些函数无需定义任何专门的程序结构。

空间类型中有几个函数可从文本描述中生成几何。其中包括以下函数:

  • ST_GeomFromText - 从任一几何类型的 WKT 表示中创建 ST_Geometry
  • ST_PointFromText - 从点 WKT 表示中创建 ST_Point
  • ST_LineFromText - 从线串 WKT 表示中创建 ST_LineString
  • ST_PolyFromText - 从面 WKT 表示中创建 ST_Polygon
  • ST_MPointFromText - 从多点 WKT 表示中创建 ST_MultiPoint
  • ST_MLineFromText - 从多线串 WKT 表示中创建 ST_MultiLineString
  • ST_MPolyFromText - 从多面 WKT 表示中创建 ST_MultiPolygon

ST_AsText 函数可将现有几何转换为 WKT 表示。

select sde.st_astext(sde.ST_PointFromText('point zm(10.01 20.04 3.2 9.5)', 4326)) from dual

 -->  POINT ZM ( 10.01000000 20.04000000 3.20000000 9.50000000)

select sde.st_astext(sde.st_linefromtext('linestring (10.05 10.28 , 20.95 20.89 )',4326)) from dual

--> LINESTRING ( 10.05000000 10.28000000, 20.95000000 20.89000000)

select sde.st_astext(sde.ST_PolyFromText ('polygon ((10 10, 10 20, 20 20, 20 15, 10 10))',4326)) from dual

-->POLYGON (( 10.00000000 10.00000000, 20.00000000 15.00000000, 20.00000000 20.00000000, 10.00000000 20.00000000, 10.00000000 10.00000000))


其他参考这里:https://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/002n0000006n000000/

Oracle 的 ST_Geometry 类型中的某些函数能从熟知二进制 (WKB) 表示中生成几何。其中包括以下函数:

  • ST_GeomFromWKB - 从任一几何类型的 WKB 表示中创建 ST_Geometry
  • ST_PointFromWKB - 从点 WKB 表示中创建 ST_Point
  • ST_LineFromWKB - 从线串 WKB 表示中创建 ST_LineString
  • ST_PolyFromWKB - 从面 WKB 表示中创建 ST_Polygon
  • ST_MPointFromWKB - 从多点 WKB 表示中创建 ST_MultiPoint
  • ST_MLineFromWKB - 从多线串 WKB 表示中创建 ST_MultiLineString
  • ST_MPolyFromWKB - 从多面 WKB 表示中创建 ST_MultiPolygon

 

posted on 2024-06-25 06:12  赵长青  阅读(2)  评论(0编辑  收藏  举报