Как вставить геометрию в 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 2

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, чтобы используйте тип геометрии.