Как вставить геометрию в h2 с помощью sql
Поскольку существует несколько версий, h2 поддерживает пространственную геометрию.
Это не проблема, чтобы выбрать и вставить геометрию в java. Но как вставить их в чистый sql? документация показывает, что он использует WKT. Но когда я пытаюсь вставить в WKT я получил ошибку.
Вот пример вставки:
insert into feature (id, name, description, geom) values
(1, 'example name', 'example description', 'SRID=4326;POINT(7 52)');
Спасибо за любые подсказки!
2 ответа:
Насколько я вижу, суффикс
SRID=4326
Не WKT (хорошо известный текст), а EWKT.База данных H2 в настоящее время не поддерживает EWKT (расширенный хорошо известный текст). Вам придется использовать
'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)');
Пространственные функции в базе данных H2 доступны в библиотекеH2GIS . Эта библиотека является пространственным расширением базы данных H2. Он предоставляет все простые функции OGC для стандартов SQL. С помощью этой библиотеки вы также можетеизменить систему координат ваших данных.
Если вы не хотите использовать H2GIS, вы можете определить SRID, используя метод псевдонима H2:
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));
Вы должны поместить jar-файл jts в путь к классу h2, чтобы используйте тип геометрии.