如何在H2数据库中使用geography.ST_GeometryType()函数?

时间:2015-11-25 07:54:56

标签: oracle hibernate h2 teradata h2db

Teradata查询

select F.farm_id, F.name, CASE WHEN geography.ST_GeometryType() = 'ST_POINT' THEN geography.ST_X() ELSE geography.ST_Centroid().ST_X() END as LNG, CASE WHEN geography.ST_GeometryType() = 'ST_POINT' THEN geography.ST_Y() ELSE geography.ST_Centroid().ST_Y() END as LAT from V_farm F, V_farm_workforce FW where F.farm_id=FW.farm_id and FW.account_id='bf064695-b9e3-46a2-a665-0bb794073ae3' and geography is not null

在Teradata中运行以上查询时获得以下响应

FarmId                                           Name                  LNG                        LAT
-----------------------------------------------------------------------------------------------------------
ea66e27f-eba4-4750-bd85-2a1e96941b10             Farm099               -88.9495943               33.5847365
2be7e35e-74a7-49eb-9e9d-5b65dbbf7c5e             VFarmJuly23           -106.6409198              31.8018379
56982275-bcad-40f7-83db-5dbfd9f9c82c             Farm112               -88.95096260000003        33.601958

相同的查询,如果我在H2中运行得到以下错误

Function "ST_GEOMETRYTYPE" not found; SQL statement:

您能否建议如何在H2数据库中进行操作。

1 个答案:

答案 0 :(得分:1)

H2数据库只能存储和查询Geometry类型。

H2数据库中的空间函数可在H2GIS库中找到。该库是H2数据库的空间扩展。它为SQL标准提供了所有OGC的简单功能。

此查询中的结果应该相同

select F.farm_id, F.name, ST_X(ST_CENTROID(THE_GEOM)) as LNG,
 ST_Y(ST_CENTROID(THE_GEOM)) as LAT 
 from V_farm F, V_farm_workforce FW 
 where F.farm_id=FW.farm_id 
  and FW.account_id='bf064695-b9e3-46a2-a665-0bb794073ae3'
  and the_geom is not null
某点的

ST_CENTROID会返回该点。