RU:SpatiaLite
SpatiaLite | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Лицензия: | MPL 1.1, GPL v2.0, и LGPL v2.1: три лицензии под разными условиями | |||||||||||||||||||
Платформ: | Linux, Free BSD, и Unix | |||||||||||||||||||
Статус: | активно | |||||||||||||||||||
Язык: | sql
| |||||||||||||||||||
Веб-сайт: | https://www.gaia-gis.it/gaia-sins/ | |||||||||||||||||||
Языки программирования: |
C и редко C++ | |||||||||||||||||||
ГИС расширение для СУБД SQLite |
||||||||||||||||||||
|
SpatiaLite (gaia-gis.it) это библиотека с открытым исходным кодом, предназначенная для расширения функций ядра SQLite до полноценной поддержки пространственных запросов и ГИС функций. Библиотека легко добавляется к SQLite для создания полноценной и мощной пространственной СУБД (в основном совместимой с OGC-SFS). SQLite и SpatiaLite образуют эффективную пространственную СУБД с открытым исходным кодом, примерно эквивалентную PostgreSQL с PostGIS. Большинство дистрибутивов Linux имеют SpatiaLite в собственных репозиториях как готовый комплект программ. SpatiaLite распространяется на условиях тройной лицензии MPL.
Маршрутизация
Поддерживаются функции маршрутизации.
- Using-Routing.pdf описывает как использовать SpatiaLite с данными OpenStreetMap
- Запись в блоге «Отрисовка локальной карты и поиск маршрута с помощью libchamplain, Spatialite и Open Street Map» содержит инструкции о том, как делать маршрутизацию и отрисовку с использованием данных OpenStreetMap.
Объединение с PostGIS, прозрачный перенос и использование данных
Оболочка внешних данных для SQLite работающая в PostgreSQL (SQLite FDW) поддерживает прозрачный перенос геометрических данных между SpatiLite и PostGIS средствами PostgreSQL. Данные происходящие из внешней БД SpatiLite включаются в SQL контекст PostGIS, где обрабатываются таким же способом, как и остальные данные, хранящиеся в самой БД.
При помощи SQLite FDW можно использовать БД или таблицы SpatiaLite как дополнительную форму хранения, полностью совмещённую с работой в контексте PostGIS при помощи прозрачного преобразования SpatiaLite ↔ PostGIS на лету. Для доступа к данным SpatiaLite убедитесь, что файл БД доступен для чтения и записи пользователю операционной системы, от которого работает сервер PostgreSQL. После этого администратор PostgreSQL должен создать внешний сервер FOREIGN SERVER для файла SpatiaLite и передать права на его использование обычному пользователю. Пример:
CREATE EXTENSION sqlite_fdw;
CREATE SERVER "SpatiaLite проверочный сервер" FOREIGN DATA WRAPPER sqlite_fdw OPTIONS ( database '/home/osgeo/Пример БД SpatiaLite.sqlite' );
GRANT USAGE ON FOREIGN SERVER "SpatiaLite проверочный сервер" TO osgeo;
Для использования данных SpatiLite в режиме без записи, то есть только на чтение, есть настройка force_readonly для внешнего сервера FOREIGN SERVER, которую можно выставить в true при создании или в любой момент после него.
После созданиея внешнего сервера FOREIGN SERVER и передачи прав GRANT обычному пользователю, можно работать дальше без администраторских прав и создавать внешние таблицы FOREIGN TABLE для данных из SpatiaLite БД.
Пример доступа во внешнюю таблицу SaptiaLite из PostgreSQL/PostGIS
Для таблицы Osaka_2025-01-20 в файле БД SpatiaLite, которую отобразим в PostgreSQL под именем "OSM 大阪市" команда доступа может быть такой:
CREATE FOREIGN TABLE "OSM 大阪市" (
g geometry,
tags json
)
SERVER "SpatiaLite проверочный сервер"
OPTIONS (
table 'Osaka_2025-01-20'
);
После этого можете использовать данные из SpatiaLite в контексте PostgreSQL и PostGIS как будто они ничем не отличаются от того, что хранится внутри PostgreSQL. Вот примеры для какого-то памятника архитектуры в Японии:
SELECT * FROM "OSM 大阪市";
SELECT * FROM "OSM 大阪市" WHERE tags->>'building' = 'yes';
SELECT * FROM "OSM 大阪市" WHERE g = (SELECT geom FROM "UNESCO Japan" where city='大阪市' AND name='大坂城');
SELECT * FROM "OSM 大阪市" WHERE g = (SELECT geom FROM "UNESCO Japan" where city_lat='Osaka' AND name='大坂城');
CREATE TABLE osaka_buildings AS SELECT * FROM "OSM 大阪市" WHERE tags->>'building' = 'yes';
INSERT INTO "OSM 大阪市" SELECT geom, tags FROM dumps."osaka_2025-01-21";
Примеры проектов с применением SpatiaLite
Другие см. в категории SpatiaLite/Examples.