由于有几个版本,h2确实支持空间几何。
在java中选择和插入几何图形不是问题。但是如何在纯sql中插入它们呢? Documentation显示它使用WKT。但是当我尝试在WKT中插入时出现错误。
这是一个示例插入:
insert into feature (id, name, description, geom) values
(1, 'example name', 'example description', 'SRID=4326;POINT(7 52)');
感谢任何提示!
答案 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类型。