如何使用sql在h2中插入几何体

时间:2014-01-08 11:23:22

标签: sql geospatial h2 spatial

由于有几个版本,h2确实支持空间几何。

在java中选择和插入几何图形不是问题。但是如何在纯sql中插入它们呢? Documentation显示它使用WKT。但是当我尝试在WKT中插入时出现错误。

这是一个示例插入:

insert into feature (id, name, description, geom) values
(1, 'example name', 'example description', 'SRID=4326;POINT(7 52)');

感谢任何提示!

2 个答案:

答案 0 :(得分:4)

据我所知,后缀SRID=4326不是WKT (Well-Known Text),而是EWKT。

H2数据库目前不支持EWKT (Extended Well-Known Text)。您必须使用'POINT(7 52)'。一个完整的例子:

create table feature(id int, name varchar(255), 
description varchar(255), geom geometry);
insert into feature (id, name, description, geom) values
(1, 'example name', 'example description', 'POINT(7 52)');

答案 1 :(得分:3)

H2数据库中的空间函数可在H2GIS库中找到。该库是H2数据库的空间扩展。它为SQL标准提供了所有OGC的简单功能。使用此库,您还可以change the coordinate reference system数据。

如果您不想使用H2GIS,可以使用H2的别名方法定义SRID:

create alias ST_GeomFromText AS $$
com.vividsolutions.jts.geom.Geometry fromText(String wkt, int srid) throws SQLException {
    if(wkt == null) {
        return null;
    }
    try {
        com.vividsolutions.jts.io.WKTReader wktReaderSRID = new com.vividsolutions.jts.io.WKTReader(new com.vividsolutions.jts.geom.GeometryFactory(new com.vividsolutions.jts.geom.PrecisionModel(),srid));
        com.vividsolutions.jts.geom.Geometry geometry = wktReaderSRID.read(wkt);
        return geometry;
    } catch (com.vividsolutions.jts.io.ParseException ex) {
        throw new SQLException(ex);
    }
}$$

然后叫它:

insert into feature (id, name, description, geom) values
(1, 'example name', 'example description', ST_GeomFromText('POINT(7 52)', 4326));

您必须将jts jar文件放在h2类路径中才能使用Geometry类型。