首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有可用于SDO_GEOM.SDO_LENGTH和SDO_GEOM.SDO_AREA的尺寸,提供容差的解决方法也不起作用

没有可用于SDO_GEOM.SDO_LENGTH和SDO_GEOM.SDO_AREA的尺寸,提供容差的解决方法也不起作用
EN

Stack Overflow用户
提问于 2019-12-18 22:46:09
回答 1查看 257关注 0票数 0

我们目前在Oracle 12c数据库上运行ArcGIS Server。GIS软件自己处理数据库,但我们希望对其表中包含的一些值进行测量。

我想列出表的几何字段(形状)中包含的一些线的长度,但我不能成功。

代码语言:javascript
复制
select * from TRONCON;
-- ok. Runs fine.

SELECT c.cur, SDO_GEOM.SDO_LENGTH(c.shape, m.diminfo) 
  FROM TRONCON c, user_sdo_geom_metadata m 
  WHERE m.table_name = 'TRONCON' AND m.column_name = 'SHAPE';

-- Fails with this error message :
-- ORA-06553: PLS-306: wrong number or types of arguments in call to 'SDO_LENGTH'
-- 06553. 00000 -  "PLS-%s: %s"
-- *Cause:    
-- *Action:

select * from user_sdo_geom_metadata;
-- Appears empty.

select * from all_sdo_geom_metadata;
-- Appears empty.

因为我们不是用数据填充数据库的人(这是地理信息系统软件管理数据和在模式中执行结构更改的职责,如果需要的话),我们不知道为什么user_sdo_geom_metadataall_sdo_geom_metadata表是空的,以及如果可以的话,如何重新生成它们。因为this case is unexpected

一位同事想要测量一个面积,但遇到了同样的问题,试图用容差替换缺失的尺寸:

代码语言:javascript
复制
SELECT sdo_geom.sdo_area(SHAPE, 0.005, 'unit=hectare') FROM ZONE_INTERET;

-- ORA-06553: PLS-306: wrong number or types of arguments in call to 'SDO_AREA'
-- 06553. 00000 -  "PLS-%s: %s" 

我们如何才能使这些函数工作呢?

EN

回答 1

Stack Overflow用户

发布于 2019-12-19 17:16:50

USER_SDO_GEOM_METADATA表没有被填满的事实令人惊讶。ArcGIS与Oracle Spatial集成得相当好,并且在维护这些信息方面做得很好。无论何时定义新要素类(使用ArcCatalog),都应在该表中看到新行。如果它丢失,那么您将无法在数据上定义任何空间索引,这将使所有查询(包括查看)变得非常慢。

可能发生的情况是,您是以与ArcGIS应用程序不同的用户身份进行连接的?USER_SDO_GEOM_METADATA (如USER_TABLES)适用于当前连接的用户。ALL_SDO_GEOM_METADATA (就像ALL_TABLES一样)适用于当前用户(在其他模式中)可访问的所有表。

同样,在调用空间函数时,您不需要该表中的信息:您只需手动传递一个容差值。在较新的版本(18.1及更高版本)中,容差实际上是可选的:我们选择一个默认值。

下面是一些示例:

代码语言:javascript
复制
SQL> SELECT sdo_geom.sdo_area(geom, 0.005, 'unit=hectare') FROM us_counties where id=1;

SDO_GEOM.SDO_AREA(GEOM,0.005,'UNIT=HECTARE')
--------------------------------------------
                                  156486.874
1 row selected.

SQL> SELECT sdo_geom.sdo_length(geom, 0.005, 'unit=km') FROM us_interstates where id=1;

SDO_GEOM.SDO_LENGTH(GEOM,0.005,'UNIT=KM')
-----------------------------------------
                               3956.18879
1 row selected.

您得到的语法错误(ORA-06553)非常奇怪。尝试描述包:

代码语言:javascript
复制
describe sdo_geom

这会产生大量的输出。但是在那里您应该看到SDO_LENGTH的两个签名

代码语言:javascript
复制
FUNCTION SDO_LENGTH RETURNS NUMBER
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 GEOM                           SDO_GEOMETRY            IN
 DIM                            SDO_DIM_ARRAY           IN
 UNIT                           VARCHAR2                IN     DEFAULT
 COUNT_SHARED_EDGES             NUMBER                  IN     DEFAULT

FUNCTION SDO_LENGTH RETURNS NUMBER
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 GEOM                           SDO_GEOMETRY            IN
 TOL                            NUMBER                  IN     DEFAULT
 UNIT                           VARCHAR2                IN     DEFAULT
 COUNT_SHARED_EDGES             NUMBER                  IN     DEFAULT

这就是你看到的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59394459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档