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

How to get values of multiple cells in geo raster in Oracle SQL

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

我使用下面的 SQL 查询对位置 (139.6532351, 35.646544), (137.15862129082493, 35.08569941846463) 和 (130.40386925062816, 33.597688116=260485) 和 (130.40386925062816, 33.597688116=260485) 使用[] 33=]函数。

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:无效或超出范围点规范 ORA-06512:在“MDSYS.SDO_GEOR_INT”,第 7965 行 ORA-06512:在“MDSYS.SDO_GEOR", line 3311 13415. 00000 - "点指定无效或超出范围" *原因: 参数组合指定的点位置无效或超出范围. *操作:确保参数指定一个有效点,该点是或可以转换为 GeoRaster 对象的单元格 space 内的单元格位置。

我使用 sdo_geor.getcellvalues() 的方式是错误的还是我可以使用其他功能?

这是错误 31184230。修补程序适用于 19.6、19.8、19.9、19.10。版本 19.11 及更高版本包含此修复程序。联系 Oracle 支持获取补丁,或升级到 19.11 或更高版本。