SAS.Planet + Geoserver + СУБД или SQlite

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Bludun
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2019, 14:07
Репутация: 2
Откуда: Краснодар

SAS.Planet + Geoserver + СУБД или SQlite

Сообщение Bludun » 25 дек 2019, 09:06

Здравствуйте.
1. Скачал большую карту с помощью SAS.Planet
2. Склеил в geotif с разбивкой по изображениям 100 000 * 100 000 пикселей. Получил сотни файлов.
3. Формирую с помощью GDAL пирамиды изображений (image pyramid)
4. Создаю в Geoserver хранилище из пирамиды. Получаю сотни хранилищ (каждая создается в ручную).
5. Отображаю все слои чз группу слоев.

Работать с таким объемом слоев, хранилищ... крайне не приятно. Хочется сделать красиво:
Sas.Planet скачивает карты в СУБД которая подключена для редактирований к QGIS и подключена для отображения к geoserver.

Обратил внимание, что SAS.Planet может хранить кэш в базах данных (СУБД, SQlite). Появилась идея подключить кэш SAS.Planet в виде СУБД к Geoserver.

1. При выборе в SAS.Planet кэш = СУБД получаю ошибку.

Скачивание...
Error: Нет подключения к СУБД

Информации по настройки такого кэша на сайте SAS.Planet не нашел. Поделитесь опытом как исправить ошибку?

2. При выборе в SAS.Planet кэш = SQlite
Программа создает множество файлах (*.sqlitedb) в структуре папок. Можно ли объединить эти файлы в одну базу данных и далее умудриться ее подключить к geoserver?

В geoserver нет выбора загрузки из SQlite(, но есть вариант подключить PostgreSQL только она в категории векторных данных.

Прошу поделиться опытом.

Bludun
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2019, 14:07
Репутация: 2
Откуда: Краснодар

Re: SAS.Planet + Geoserver + СУБД или SQlite

Сообщение Bludun » 07 янв 2020, 14:55

Оказывается SAS.Planet умеет экспортировать тайлы в БД .mbtiles. Установил на geoserver плагин MBTiles Extension, импортировал созданную базу данных из SAS.Planet как хранилище mbtiles и очень был рад когда все отобразилось в моем ПО и в OpenLayers.

Если БД размером в 6Гб, то geoserver очень медленно формирует тайлы на выдачу.

Подскажите пожалуйста, как моему ПО, которое хочет получить ТАЙЛ из базы (Request: getMap .....) Наиболее простым и быстрым путем выдать эти тайлы???

Bludun
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2019, 14:07
Репутация: 2
Откуда: Краснодар

Re: SAS.Planet + Geoserver + СУБД или SQlite

Сообщение Bludun » 05 фев 2020, 14:07

Добрый день. В итоге сделал все на пирамидах. Карту России разбил на квадраты. Каждому квадрату создан слой с пирамидой тайлов. Объединил все слои в группу.

Если группа состоит из одного или двух слоев (у каждого слоя свой BBOX) то работает все шустро. Если в группу добавляю все слои (100 шт.), то Geoserver начинает тормозить, при этом Запрашиваемый Bbox попадает только в один слой, не затрагивая остальные. На каждый слой установлен стиль с параметром масштаба.

Я думаю, что Geoserver получает getMap запрос от клиента, считывает параметр Bbox и откидывает слои, которые в этот Bbox не попадают. По такой логике можно подключать тысячи слоев, ведь операция проверки вхождения в Bbox не должна занимать много ресурсов процессора, но у меня это не работает.

Код: Выделить всё

Request: getMap
	Angle = 0.0
	BaseUrl = http://192.168.0.163:8080/geoserver/
	Bbox = SRSEnvelope[4035416.4679369 : 4035569.3419934, 6022014.8327921 : 6022167.7068486]
	BgColor = java.awt.Color[r=255,g=255,b=255]
	Buffer = 0
	CQLFilter = null
	Crs = PROJCS["WGS84 / Google Mercator", 
  GEOGCS["WGS 84", 
    DATUM["World Geodetic System 1984", 
      SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]], 
      AUTHORITY["EPSG","6326"]], 
    PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], 
    UNIT["degree", 0.017453292519943295], 
    AXIS["Longitude", EAST], 
    AXIS["Latitude", NORTH], 
    AUTHORITY["EPSG","4326"]], 
  PROJECTION["Mercator_1SP"], 
  PARAMETER["semi_minor", 6378137.0], 
  PARAMETER["latitude_of_origin", 0.0], 
  PARAMETER["central_meridian", 0.0], 
  PARAMETER["scale_factor", 1.0], 
  PARAMETER["false_easting", 0.0], 
  PARAMETER["false_northing", 0.0], 
  UNIT["m", 1.0], 
  AXIS["x", EAST], 
  AXIS["y", NORTH], 
  AUTHORITY["EPSG","900913"]]
	Elevation = []
	Env = {}
	Exceptions = INIMAGE
	FeatureId = null
	FeatureVersion = null
	Filter = null
	Format = image/png
	FormatOptions = {}
	Get = true
	Height = 256
	Interpolations = []
	Layers = [org.geoserver.wms.MapLayerInfo@7deb985b, org.geoserver.wms.MapLayerInfo@7c36bfbc]
	MaxFeatures = null
	Palette = null
	RawKvp = {FORMAT=image/png, CRS=EPSG:900913, STYLES=, WIDTH=256, HEIGHT=256, LAYERS=cite:test_L-37, EXCEPTIONS=INIMAGE, SRS=EPSG:3857, REQUEST=GetMap, BBOX=4035416.4679369,6022014.8327921,4035569.3419934,6022167.7068486, VERSION=1.3.0, SERVICE=WMS, TRANSPARENT=TRUE}
	RemoteOwsType = null
	RemoteOwsURL = null
	Request = GetMap
	RequestCharset = UTF-8
	ScaleMethod = null
	Sld = null
	SldBody = null
	SldVersion = null
	SortBy = null
	SortByArrays = null
	SRS = urn:ogc:def:crs:EPSG:900913
	StartIndex = null
	StyleBody = null
	StyleFormat = sld
	Styles = [StyleImpl[ name=UK_RasterScaler_18], StyleImpl[ name=UK_RasterScaler_18]]
	StyleUrl = null
	StyleVersion = null
	Tiled = false
	TilesOrigin = null
	Time = []
	Transparent = true
	ValidateSchema = false
	Version = 1.3.0
	ViewParams = null
	Width = 256 

Bludun
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2019, 14:07
Репутация: 2
Откуда: Краснодар

Re: SAS.Planet + Geoserver + СУБД или SQlite

Сообщение Bludun » 07 фев 2020, 15:22

Есть запись в логе Geoserver "Doesn't intersect the coverage BoundingBox ReferencedEnvelope"

Код: Выделить всё

2020-02-07 13:13:05,912 TRACE [org.geotools.data.shapefile.files] - IndexFile has been closed. Number open: 0
2020-02-07 13:13:05,912 DEBUG [org.geotools.gce.imagemosaic] - The computed CropBoundingBox ReferencedEnvelope[4036463.296925648 : 4036816.81818142, 5989868.774754131 : 5990221.297858711] Doesn't intersect the coverage BoundingBox ReferencedEnvelope[8282169.979662 : 8415753.24121888, 8611822.579249054 : 8736383.882769] resulting in an empty request
2020-02-07 13:13:05,912 DEBUG [org.geotools.gce.imagemosaic] - RequestedBBox empty or null
т.е. сервер понимает, что слой нам не нужен.
После нее Геосервер еще выводит в лог множество записей касаемо слоев в которые не попадают в BBOX.

Может есть где то опция, чтобы он вообще забывал про эти слои? Что там можно проверять, когда оно не требуется я не понимаю.....

Bludun
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2019, 14:07
Репутация: 2
Откуда: Краснодар

Re: SAS.Planet + Geoserver + СУБД или SQlite

Сообщение Bludun » 16 фев 2020, 18:19

Может есть на форуме человек, который хорошо разбирается в Геосервере. Напишите пожалуйста в личку.

Bludun
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2019, 14:07
Репутация: 2
Откуда: Краснодар

Re: SAS.Planet + Geoserver + СУБД или SQlite

Сообщение Bludun » 26 фев 2020, 16:42

1.Из темы http://www.sasgis.org/mantis/view.php?id=1113 взял TileStorage_DBMS.dll и директория DBMS, в которой 3 файла:
TileStorage_DBMS.PG.sql
TileStorage_DBMS.PG.xql
_ODBC_TileStorage_DBMS.ini

2. Скачать и проинсталлировать СУБД PostgreSQL
postgresql-9.6

и драйвер ODBC к ней


3. Зашел панель управления - Администрирование - Источники данных ODBC (64-разрядная версия) - Системный DNS - настройки ....

Всё по умолчанию, имя DSN PostgreSQL35W, юзер postgres, пароль 123456.
Нажал кнопку Test, - connection successful

4. Запустил SASPlanet.exe
Тип кэша по умолчанию - СУБД
Путь кэша - PostgreSQL35W\$\
Во вкладке "пути" - Базовый путь кэша - .\
внизу окна программы, в информационной строке указан путь - С:\Sas.Planet.190707\PostgreSQL35W\$\sat\z10\x375\y160.jpg

Параметры _ODBC_TileStorage_DBMS.ini

Код: Выделить всё

[PostgreSQL35W\$]
Protocol=postgresql
HostName=localhost
Port=5432
Database=postgres
User=postgres
Password=123456
$LOAD_LIBRARY_ALT=C:\Program Files\PostgreSQL\9.6\bin\libpq.dll
$SYNC_SQL_MODE=2

Ошибка - Нет подключения к СУБД

Как устранить ошибку?

Bludun
Новоприбывший
Сообщения: 10
Зарегистрирован: 14 ноя 2019, 14:07
Репутация: 2
Откуда: Краснодар

Re: SAS.Planet + Geoserver + СУБД или SQlite

Сообщение Bludun » 02 мар 2020, 10:50

Удалось настроить отображение большой карты. Опишу процесс.

1. Загрузил нужные мне карты в Кэш SAS.Planet.
2. Склеил маленькие кусочки карты в более крупные (GeoTIFF размер 10 000 * 10 000, компрессия JPEG) и получил набор файлов в паке.
3. Повторил пункт 2 для всех масштабов карты.
4. Запустил геосервер и добавил хранилище ImageMosaic для каждого масштаба. (Указывал путь к папке с тайлами определенного масштаба.
5. Полученные Слои объеденил в группу.
6. У каждого слоя свой стиль с фильтром по масштабу.
7. Клиентская программа обращается к групповому слою и геосервер выдает ей требуемые тайлы.

Спасибо разработчикам SAS.Planet, чудо программа!!! С СУБД потихоньку разбираюсь. Хочу, чтобы SAS.Planet работал на сервере и загружал тайлы в базу данных, которая расположена в облаке.

Разобраться с Геосервером помог форум https://gis.stackexchange.com. Общаться на форуме помог Яндекс переводчик) На том форуме, дежурный дядька оперативно давал подсказки))))

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей