如何在Oracle SQL中获取地理栅格中多个单元格的值



我使用SDO_GEORASTER在Oracle DB中存储栅格数据。我已经将高程数据存储在名为DEM_RASTER_6的地形表中。. 当单元格的位置(纬度和经度)作为输入时,我想找到该单元格的海拔

我使用下面的SQL查询来执行位置(139.6532351,35.646544),(137.15862129082493,35.08569941846463)和(130.40386925062816,33.597688116260485),它使用sdo_georo .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_georo .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:无效或超出范围点规范ORA-06512: at " mdsys . sdo_geor_intquot;, 7965行ORA-06512: at " mdsys . sdo_geor_quot;, 3311 13415行。00000 -"无效或超出范围";*原因:点的位置由<ptGeom,>or <rowNumber,>参数组合无效或超出范围。*动作:确保参数指定一个有效的点,该点可以或可以被转换为GeoRaster对象的单元格空间内的单元格位置。

我使用sdo_georo .getcellvalues()的方式是错误的还是有另一个函数我可以使用?

这是bug 31184230。补丁适用于19.6、19.8、19.9和19.10。19.11及以后的版本包含此修复。请联系Oracle技术支持获取补丁,或升级到19.11及以上版本

最新更新