如何使用 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 中插入几何图形的主要内容,如果未能解决你的问题,请参考以下文章