Загрузка геометрических данных

Загрузка геометрических данных в таблицу БД выполняется с помощью стандартного SQL-оператора INSERT и набора встроенных в СУБД функций, преобразующих WKT/WKB-формат представления данных в соответствующий столбцу геометрический тип данных, либо с помощью прямой типизации данных (когда тип можно определить из контекста), например:

insert into GEOTABLE(COLUMN_WITH_TYPE_POINT) values ('POINT (1 1)');

Примечание

В связи с добавлением большого числа новых функций их названия могут случайно совпасть с уже существующими в БД именами столбцов и таблиц. Чтобы исключить эту неоднозначность, в СУБД ЛИНТЕР предусмотрен режим совместимости с предыдущими версиями. Для включения этого режима следует запустить ядро СУБД с ключом /COMPATIBILITY=GEOPREFIX. В этом случае к именам геометрических функций добавляется префикс "LIN_". Например, стандартные имена геометрических SQL-функций AsText() и PointFromText() будут заменены на имена Lin_AsText и Lin_PointFromText:

select lin_AsText(lin_PointFromText('POINT (1 1)'));
|POINT (1 1) |

Загрузка геометрических BLOB-данных также выполняется обычным способом, например, с помощью стандартного SQL-запроса INSERT.

INSERT INTO GTEST(GEOM) VALUES(GEOMFROMWKB(hex('0103000000010000000500000000000000000024400000
00000000244000000000000024400000000000004940000000000000494000000000000
049400000000000004940000000000000244000000000000024400000000000002440'), 1234));

либо с помощью команды интерфейса нижнего уровня (call-интерфейса) ABLB. Например, вышеприведенная INSERT-команда в утилите INL (использующей ABLB) выглядит следующим образом:

INSERT INTO GTEST(GEOM) VALUES(NULL);
blob insert column=1
01030000000100000005000000000000000000244000000000000024400000000000002
44000000000000049400000000000004940000000000000494000000000000049400000
00000000244000000000000024400000000000002440D2040000;

Ограничения и особенности при добавлении геометрического BLOB-значения с помощью команды ABLB:

  1. в конец буфера со значением надо добавлять значение SRID (4 байта);

  2. проверка на корректность введённого значения не проверяется (т.к. значение заносится в БД порциями).

    В этом случае для проверки корректности введённого значения надо воспользоваться функцией GEOISVALID, например, выполнить запрос вида:

    select GEOISVALID(GEOM) from GTEST;

    (запрос вернёт 1 для корректных значений и 0 – для некорректных);

  3. геометрические BLOB-значения нельзя передавать в качестве параметров в SELECT-запросах.

    Т.е. если, например, требуется выполнить запрос вида

    select UNION(GEOM, ?) from GTEST;

    то можно передать ему в качестве параметра байтовую последовательность длиной не более 4000 байт, например, такую:

    01030000000100000005000000000000000000244000000000000024400000000000002
    44000000000000049400000000000004940000000000000494000000000000049400000
    00000000244000000000000024400000000000002440D2040000