Загрузка геометрических данных
Загрузка геометрических данных в таблицу БД выполняется с помощью стандартного 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:
-
в конец буфера со значением надо добавлять значение SRID (4 байта);
-
проверка на корректность введённого значения не проверяется (т.к. значение заносится в БД порциями).
В этом случае для проверки корректности введённого значения надо воспользоваться функцией GEOISVALID, например, выполнить запрос вида:
select GEOISVALID(GEOM) from GTEST;
(запрос вернёт 1 для корректных значений и 0 – для некорректных);
-
геометрические BLOB-значения нельзя передавать в качестве параметров в SELECT-запросах.
Т.е. если, например, требуется выполнить запрос вида
select UNION(GEOM, ?) from GTEST;
то можно передать ему в качестве параметра байтовую последовательность длиной не более 4000 байт, например, такую:
01030000000100000005000000000000000000244000000000000024400000000000002 44000000000000049400000000000004940000000000000494000000000000049400000 00000000244000000000000024400000000000002440D2040000