Geoserver динамические слои + SLD

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Geoserver динамические слои + SLD

Сообщение jerry-maori » 20 янв 2017, 11:24

Исходные данные
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 мегабайт прокачивать в начале.

Заранее спасибо.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Geoserver динамические слои + SLD

Сообщение Ariki » 20 янв 2017, 12:57

Сам с GeoServer (и MySQL) практически не работал, но подозреваю, что можно создать представление в базе данных на базе JOIN или прямо в GeoServer определить запрос:
SQL Views
Про SLD, честно говоря, не понял, из чего вы его генерируете и для кого, если на выходе всё равно WMS.

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Geoserver динамические слои + SLD

Сообщение jerry-maori » 10 май 2017, 11:27

Вроде понял, что и как прикручивать, но ничего не работает ;( :
Он сыпется на том, что вставляет неэкранированные ">"

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

<Title>> 12 AND <= 56</Title>
Но как его убедить этого не делать?

1. Генерируем тело SLD путём запроса к серверу
http://geoserver.nniiem.ru/srv211/rest/ ... r=0xFFFF00

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

<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>
2. Формируем Getmap

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

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
Ну там пока ещё не очень ясно, как правильно SLD или SLD_URL
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 раза.

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Geoserver динамические слои + SLD

Сообщение Andrey Zhukov » 10 май 2017, 13:26

А может, сделать полноценный слой?
http://docs.geoserver.org/stable/en/use ... mysql.html

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Geoserver динамические слои + SLD

Сообщение jerry-maori » 10 май 2017, 14:37

1. В Geoserver 2.11 (да и 2.10) случилась какое-то необьяснимое несварение между Geoserver и MySQL. Импорт пространственных данных из MySQL порой падает на этапе вычисления bbox. Когда я нажаловался на это в трекере geoserver, дядя девелопер мне сторого сказал, чтобы я не пользовался mySQL.
2. У меня данные организованы как 1 таблица с границами субьектов и 1 длииная портянка с атрибутивными данными с разибвкой по месяцам, годам, контингентам и т.д.

Аватара пользователя
Филиппов Владислав
Гуру
Сообщения: 1035
Зарегистрирован: 17 фев 2006, 06:28
Репутация: 144
Ваше звание: Геннадич
Откуда: Новосибирск
Контактная информация:

Re: Geoserver динамические слои + SLD

Сообщение Филиппов Владислав » 25 май 2017, 04:35

ну раз одна таблица, то мигрировать на православное можно же :)

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Geoserver динамические слои + SLD

Сообщение jerry-maori » 25 май 2017, 04:42

Филиппов Владислав писал(а):ну раз одна таблица, то мигрировать на православное можно же :)
Э-э-э, а можно деталей? Если про СУБД -- то давно уже PostGre.

Аватара пользователя
Филиппов Владислав
Гуру
Сообщения: 1035
Зарегистрирован: 17 фев 2006, 06:28
Репутация: 144
Ваше звание: Геннадич
Откуда: Новосибирск
Контактная информация:

Re: Geoserver динамические слои + SLD

Сообщение Филиппов Владислав » 25 май 2017, 04:47

а) экспортировать таблицу в какой-нибудь универсальный формат, например, в CSV, потом импортировать.
б) Менеджером БД в QGIS

Аватара пользователя
jerry-maori
Гуру
Сообщения: 585
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 143
Откуда: Нижний Новгород

Re: Geoserver динамические слои + SLD

Сообщение jerry-maori » 25 май 2017, 06:19

не, проблем с самими данными нет.
Всё аккуратно сидит в Postgres, так же аккуратно через SQL view цепляется Geoserver и через параметры даже можно точно формулировать, какую атрибутику зацеплять.
1. Я научился формировать запрос к Geoserver, чтобы он по WMS отдал мне нужные данные
2. Я научился формировать запрос к Geoservre. чтобы он динамически генерировал тело SLD
А вот как ему сказать, чтобы он сделал п.1 и прицепил к нему п.2, который выполнен на основе п.1 и всё это отдал в виде WMS -- вот тут засада.

Ответить

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

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

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