我使用SDO_GEORASTER在Oracle中存储光栅数据。我已经将高程数据存储在名为DEM_RASTER_6的地理信息表中。当给出单元格的位置(纬度和经度)作为输入时,我想找出单元格的高度。
我使用下面的SQL查询对位置(139.6532351、35.646544)、(137.15862129082493、35.08569941846463)和(130.40386925062816、33.597688116260485)进行了查询,并且使用sdo_geor.getcellvalue函数工作得很好。
SELECT
sdo_geor.getcellvalue(
raster,
0,sdo_geometry(2001, 4326
--,sdo_point_type( 139.6532351, 35.646544, NULL)
,sdo_point_type( 137.15862129082493, 35.08569941846463, NULL)
--,sdo_point_type( 130.40386925062816, 33.597688116260485, NULL)
,NULL, NULL),
1) dem_value
FROM DEM_RASTER_6 a
where
sdo_anyinteract( a.raster.SPATIALEXTENT,
sdo_geometry(2001, 4326
-- ,sdo_point_type( 139.6532351, 35.646544, NULL),
-- ,sdo_point_type( 130.40386925062816, 33.597688116260485, NULL),
,sdo_point_type( 137.15862129082493, 35.08569941846463, NULL),
NULL, NULL)
) = 'TRUE' ;上面的查询一次只对一个点起作用。现在我的问题是,如果我们需要在sdo_geor.getcellvalues()多个点同时找到的单元值,那么我们可以使用函数吗?
为此,我尝试了下面的SQL
SELECT
sdo_geor.getcellvalues(
raster
, 0
, sdo_geometry(
2005
,4326
,NULL
,SDO_ELEM_INFO_ARRAY(1,1,3)
,SDO_ORDINATE_ARRAY(130.40386925062816, 33.597688116260485, 139.6532351, 35.646544, 137.15862129082493, 35.08569941846463)
),
1) dem_value
FROM DEM_RASTER_6 a
where
sdo_anyinteract( a.raster.SPATIALEXTENT,
sdo_geometry(
2005--multipoint
,4326
,NULL
,SDO_ELEM_INFO_ARRAY(1,1,3)--multipoint with 3 points
,SDO_ORDINATE_ARRAY(130.40386925062816, 33.597688116260485, 139.6532351, 35.646544, 137.15862129082493, 35.08569941846463)-- 3 sets of coor for multipoints
)
) = 'TRUE' ; 我得到了错误:,但我得到了错误ORA- 13415 :无效或超出范围点规范或-06512:在"MDSYS.SDO_GEOR_INT",第7965或-06512:在"MDSYS.SDO_GEOR",第3311 13415行。00000 -“无效或超出作用域点规范”*原因:或参数组合指定的点位置无效或超出作用域。*操作:确保参数指定一个有效点,即或可以转换为GeoRaster对象的单元格空间内的单元格位置。
我使用sdo_geor.getcellvalues()的方式是错误的还是我可以使用的另一个函数?
发布于 2022-05-30 07:42:32
这是bug 31184230。为19.6、19.8、19.9、19.10提供了补丁。版本19.11及更高版本包括修复。请与Oracle支持部门联系以获得修补程序,或升级到19.11或更高版本。
https://stackoverflow.com/questions/72388258
复制相似问题