Страница 1 из 1
					
				Geoserver динамические слои + SLD
				Добавлено: 20 янв 2017, 11:24
				 jerry-maori
				Исходные данные
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 мегабайт прокачивать в начале.
Заранее спасибо.
 
			 
			
					
				Re: Geoserver динамические слои + SLD
				Добавлено: 20 янв 2017, 12:57
				 Ariki
				Сам с GeoServer (и MySQL) практически не работал, но подозреваю, что можно создать представление в базе данных на базе JOIN или прямо в GeoServer определить запрос:
SQL Views
Про SLD, честно говоря, не понял, из чего вы его генерируете и для кого, если на выходе всё равно WMS.
 
			 
			
					
				Re: Geoserver динамические слои + SLD
				Добавлено: 10 май 2017, 11:27
				 jerry-maori
				Вроде понял, что и как прикручивать, но ничего не работает ;( :
Он сыпется на том, что вставляет неэкранированные ">" 
Но как его убедить этого не делать?
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>
 
			 
			
					
				Re: Geoserver динамические слои + SLD
				Добавлено: 10 май 2017, 13:26
				 Andrey Zhukov
				
			 
			
					
				Re: Geoserver динамические слои + SLD
				Добавлено: 10 май 2017, 14:37
				 jerry-maori
				1. В Geoserver 2.11 (да и 2.10) случилась какое-то необьяснимое несварение между Geoserver и MySQL. Импорт пространственных данных из MySQL порой падает на этапе вычисления bbox. Когда я нажаловался на это в трекере geoserver, дядя девелопер мне сторого сказал, чтобы я не пользовался mySQL.
2.  У меня данные организованы как 1 таблица с границами субьектов и 1 длииная портянка с атрибутивными данными с разибвкой по месяцам, годам, контингентам и т.д.
			 
			
					
				Re: Geoserver динамические слои + SLD
				Добавлено: 25 май 2017, 04:35
				 Филиппов Владислав
				ну раз одна таблица, то мигрировать на православное можно же 

 
			 
			
					
				Re: Geoserver динамические слои + SLD
				Добавлено: 25 май 2017, 04:42
				 jerry-maori
				Филиппов Владислав писал(а):ну раз одна таблица, то мигрировать на православное можно же 

 
Э-э-э, а можно деталей? Если про СУБД -- то давно уже PostGre.
 
			 
			
					
				Re: Geoserver динамические слои + SLD
				Добавлено: 25 май 2017, 04:47
				 Филиппов Владислав
				а) экспортировать таблицу в какой-нибудь универсальный формат, например, в CSV, потом импортировать. 
б) Менеджером БД в QGIS
			 
			
					
				Re: Geoserver динамические слои + SLD
				Добавлено: 25 май 2017, 06:19
				 jerry-maori
				не, проблем с самими данными нет.
Всё аккуратно сидит в Postgres, так же аккуратно через SQL view цепляется Geoserver и через параметры даже можно точно формулировать, какую атрибутику зацеплять. 
1. Я научился формировать запрос к Geoserver, чтобы он по WMS отдал мне нужные данные
2. Я научился формировать запрос к Geoservre. чтобы он динамически генерировал тело SLD
А вот как ему сказать, чтобы он сделал п.1 и прицепил к нему п.2, который выполнен на основе п.1 и всё это отдал в виде WMS -- вот тут засада.