Geoserver динамические слои + SLD
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Geoserver динамические слои + SLD
Исходные данные
1. Есть MySQL база данных, где лежит таблица с полигонами субъектов ПФО. У каждого полигона есть UID
2. Есть формируемая из иного набора таблиц выборка, состоящая из 2-х столбцов -- UID и некое число атрибутивное значение.
3. Есть инстанс Geoservrer
Суть желания:
а. Путём SQL запроса к БД генерируем JOIN из двух таблиц -- с полигонами и атрибутикой
b. Путём REST утаскиваем сей JOIN в виде слоя в Geoserver
c. Путём REST генерируем SLD (http://docs.geoserver.org/stable/en/use ... index.html)
d. Отдаём клиенту через WMS
Клиент -- бразуер, JS, Leaflet
Вопрос:
Насколько такая схема жизнеспособна и не является ли натягиванием "совы на глобус" ? Может это же можно решить как-то проще?
Сейчас я отдаю клиенту в начале два JSON (с границами субъектов и детальными административными), потом по запросу он получает JSON с атрибутикой, джойнит у себя и выводит GEoJSON. Мне не нравится то, что приходится эти 6 мегабайт прокачивать в начале.
Заранее спасибо.
1. Есть MySQL база данных, где лежит таблица с полигонами субъектов ПФО. У каждого полигона есть UID
2. Есть формируемая из иного набора таблиц выборка, состоящая из 2-х столбцов -- UID и некое число атрибутивное значение.
3. Есть инстанс Geoservrer
Суть желания:
а. Путём SQL запроса к БД генерируем JOIN из двух таблиц -- с полигонами и атрибутикой
b. Путём REST утаскиваем сей JOIN в виде слоя в Geoserver
c. Путём REST генерируем SLD (http://docs.geoserver.org/stable/en/use ... index.html)
d. Отдаём клиенту через WMS
Клиент -- бразуер, JS, Leaflet
Вопрос:
Насколько такая схема жизнеспособна и не является ли натягиванием "совы на глобус" ? Может это же можно решить как-то проще?
Сейчас я отдаю клиенту в начале два JSON (с границами субъектов и детальными административными), потом по запросу он получает JSON с атрибутикой, джойнит у себя и выводит GEoJSON. Мне не нравится то, что приходится эти 6 мегабайт прокачивать в начале.
Заранее спасибо.
-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: Geoserver динамические слои + SLD
Сам с GeoServer (и MySQL) практически не работал, но подозреваю, что можно создать представление в базе данных на базе JOIN или прямо в GeoServer определить запрос:
SQL Views
Про SLD, честно говоря, не понял, из чего вы его генерируете и для кого, если на выходе всё равно WMS.
SQL Views
Про SLD, честно говоря, не понял, из чего вы его генерируете и для кого, если на выходе всё равно WMS.
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver динамические слои + SLD
Вроде понял, что и как прикручивать, но ничего не работает ;( :
Он сыпется на том, что вставляет неэкранированные ">"
Но как его убедить этого не делать?
1. Генерируем тело SLD путём запроса к серверу
http://geoserver.nniiem.ru/srv211/rest/ ... r=0xFFFF00
Ну там пока ещё не очень ясно, как правильно SLD или SLD_URL
3. Получаем
Он сыпется на том, что вставляет неэкранированные ">"
Код: Выделить всё
<Title>> 12 AND <= 56</Title>
1. Генерируем тело SLD путём запроса к серверу
http://geoserver.nniiem.ru/srv211/rest/ ... r=0xFFFF00
2. Формируем GetmapКод: Выделить всё
<Rules> <Rule> <Title>> 16.0 AND <= 20.0</Title> <Filter> <And> <PropertyIsGreaterThanOrEqualTo> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>16.0</Literal> </PropertyIsGreaterThanOrEqualTo> <PropertyIsLessThanOrEqualTo> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>20.0</Literal> </PropertyIsLessThanOrEqualTo> </And> </Filter> </Rule> <Rule> <Title>> 20.0 AND <= 43.0</Title> <Filter> <And> <PropertyIsGreaterThan> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>20.0</Literal> </PropertyIsGreaterThan> <PropertyIsLessThanOrEqualTo> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>43.0</Literal> </PropertyIsLessThanOrEqualTo> </And> </Filter> </Rule> <Rule> <Title>> 43.0 AND <= 55.0</Title> <Filter> <And> <PropertyIsGreaterThan> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>43.0</Literal> </PropertyIsGreaterThan> <PropertyIsLessThanOrEqualTo> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>55.0</Literal> </PropertyIsLessThanOrEqualTo> </And> </Filter> </Rule> <Rule> <Title>> 55.0 AND <= 121.0</Title> <Filter> <And> <PropertyIsGreaterThan> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>55.0</Literal> </PropertyIsGreaterThan> <PropertyIsLessThanOrEqualTo> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>121.0</Literal> </PropertyIsLessThanOrEqualTo> </And> </Filter> </Rule> <Rule> <Title>> 121.0 AND <= 447.0</Title> <Filter> <And> <PropertyIsGreaterThan> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>121.0</Literal> </PropertyIsGreaterThan> <PropertyIsLessThanOrEqualTo> <Function name="convert"> <PropertyName>sa</PropertyName> <Literal>java.lang.Double</Literal> </Function> <Literal>447.0</Literal> </PropertyIsLessThanOrEqualTo> </And> </Filter> </Rule> </Rules>
Код: Выделить всё
http://geoserver.nniiem.ru/srv211/EPID_ATLAS/wms?service=WMS&version=1.1.0&request=GetMap&layers=EPID_ATLAS:pfo_d&styles=&bbox=4650284.45296425,6412307.36116979,6867117.16771859,8779937.18926481&width=719&height=768&srs=EPSG:3857&format=application/openlayers&viewparams=yd:2015;md:2&sld_url=http://geoserver.nniiem.ru/srv211/rest/sldservice/pfo_d/classify.xml?attribute=sa&ramp=custom&intervals=5&method=jenks&startColor=0x008000&endColor=0xff0000&midColor=0xFFFF00
3. Получаем
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE ServiceExceptionReport SYSTEM "http://geoserver.nniiem.ru:80/srv211/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1" > <ServiceException>
Error while getting SLD. See the log for details.
</ServiceException></ServiceExceptionReport>
Последний раз редактировалось jerry-maori 10 май 2017, 14:55, всего редактировалось 2 раза.
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Geoserver динамические слои + SLD
А может, сделать полноценный слой?
http://docs.geoserver.org/stable/en/use ... mysql.html
http://docs.geoserver.org/stable/en/use ... mysql.html
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver динамические слои + SLD
1. В Geoserver 2.11 (да и 2.10) случилась какое-то необьяснимое несварение между Geoserver и MySQL. Импорт пространственных данных из MySQL порой падает на этапе вычисления bbox. Когда я нажаловался на это в трекере geoserver, дядя девелопер мне сторого сказал, чтобы я не пользовался mySQL.
2. У меня данные организованы как 1 таблица с границами субьектов и 1 длииная портянка с атрибутивными данными с разибвкой по месяцам, годам, контингентам и т.д.
2. У меня данные организованы как 1 таблица с границами субьектов и 1 длииная портянка с атрибутивными данными с разибвкой по месяцам, годам, контингентам и т.д.
- Филиппов Владислав
- Гуру
- Сообщения: 1035
- Зарегистрирован: 17 фев 2006, 06:28
- Репутация: 144
- Ваше звание: Геннадич
- Откуда: Новосибирск
- Контактная информация:
Re: Geoserver динамические слои + SLD
ну раз одна таблица, то мигрировать на православное можно же
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver динамические слои + SLD
Э-э-э, а можно деталей? Если про СУБД -- то давно уже PostGre.Филиппов Владислав писал(а):ну раз одна таблица, то мигрировать на православное можно же
- Филиппов Владислав
- Гуру
- Сообщения: 1035
- Зарегистрирован: 17 фев 2006, 06:28
- Репутация: 144
- Ваше звание: Геннадич
- Откуда: Новосибирск
- Контактная информация:
Re: Geoserver динамические слои + SLD
а) экспортировать таблицу в какой-нибудь универсальный формат, например, в CSV, потом импортировать.
б) Менеджером БД в QGIS
б) Менеджером БД в QGIS
- jerry-maori
- Гуру
- Сообщения: 585
- Зарегистрирован: 22 авг 2012, 17:02
- Репутация: 143
- Откуда: Нижний Новгород
Re: Geoserver динамические слои + SLD
не, проблем с самими данными нет.
Всё аккуратно сидит в Postgres, так же аккуратно через SQL view цепляется Geoserver и через параметры даже можно точно формулировать, какую атрибутику зацеплять.
1. Я научился формировать запрос к Geoserver, чтобы он по WMS отдал мне нужные данные
2. Я научился формировать запрос к Geoservre. чтобы он динамически генерировал тело SLD
А вот как ему сказать, чтобы он сделал п.1 и прицепил к нему п.2, который выполнен на основе п.1 и всё это отдал в виде WMS -- вот тут засада.
Всё аккуратно сидит в Postgres, так же аккуратно через SQL view цепляется Geoserver и через параметры даже можно точно формулировать, какую атрибутику зацеплять.
1. Я научился формировать запрос к Geoserver, чтобы он по WMS отдал мне нужные данные
2. Я научился формировать запрос к Geoservre. чтобы он динамически генерировал тело SLD
А вот как ему сказать, чтобы он сделал п.1 и прицепил к нему п.2, который выполнен на основе п.1 и всё это отдал в виде WMS -- вот тут засада.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей