如何在 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 或更高版本。
我使用 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 - "点指定无效或超出范围" *原因:
我使用 sdo_geor.getcellvalues() 的方式是错误的还是我可以使用其他功能?
这是错误 31184230。修补程序适用于 19.6、19.8、19.9、19.10。版本 19.11 及更高版本包含此修复程序。联系 Oracle 支持获取补丁,或升级到 19.11 或更高版本。