如何使用 sql 在 h2 中插入几何图形

Posted

技术标签:

【中文标题】如何使用 sql 在 h2 中插入几何图形【英文标题】:Howto insert geometry in h2 using sql 【发布时间】:2014-01-08 11:23:21 【问题描述】:

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

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

这是一个示例插入:

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

感谢任何提示!

【问题讨论】:

【参考方案1】:

据我所知,后缀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)');

【讨论】:

【参考方案2】:

H2GIS 库中提供了 H2 数据库中的空间函数。该库是 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 类型。

【讨论】:

以上是关于如何使用 sql 在 h2 中插入几何图形的主要内容,如果未能解决你的问题,请参考以下文章

如何在 h2 数据库中插入特定的 UUID?

如何在 H2 SQL 中使用 Where 子句显示表?

如何像 sql server 一样在 h2 中使用 getDate()

从 SQL 脚本在 H2 数据库中插入长文本

如何在 H2 SQL 中查看属性

如何使用反射 API 将数据插入 H2 数据库