Страница 1 из 1
Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 23 сен 2013, 10:16
sdm98
Добрый. сделал в udig стилизацию проекта. залил слои в постгис. заголовки полей у меня латиницей. а вот сами значения кирилицей. мне нужно сделать разные цвета в зависимости от значений. геосервер не хочет кушать мои sld-шки. (((
можно ли так отстилизовать? не хочется в транслит перегонять всю атрибутику ( геморно и некрасиво.
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 23 сен 2013, 10:45
sdm98
нашёл такой патч
http://jira.codehaus.org/browse/GEOS-4263
у меня такая же ошибка Invalid byte 2 of 4-byte UTF-8 sequence.
не понял как патчить. и подойдёт ли этот патч для меня . у меня версия 2.3.3. а там 2.0.2.
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 27 ноя 2013, 19:30
Tink
У меня аналогичная проблема с кирилицей...
В слое есть объекты значения свойств которых заданы кирилицей (сами имена свойств заданы латиницей).
Фильтр по этим полям работает нормально (без дополнительных манипуляций), а стиль не применяется.
Кодировка слоя Windows-1251.
Если специально для SLD перекодирую искомую строку из UTF-8 в Windows-1251, то красятся все объекты, при том что правило соответствует всего одному...
Если кому-то удалось решить проблему стилизации с кириллицей в значениях атрибутов объектов (и фильтров стилей соответственно), прошу помогите.
PS версия GeoServer у меня то же 2.3.3...
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 28 ноя 2013, 11:47
Vladimir_R
Контролируйте кодировку sld (xml). По умолчанию Geoserver пишет
Код: Выделить всё
<?xml version="1.0" encoding="ISO-8859-1"?>
в заголовке. Поменяйте на
Код: Выделить всё
<?xml version="1.0" encoding="Windows-1251"?>
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 28 ноя 2013, 17:10
Tink
Пробовал в начало SLD подставлять и <?xml version="1.0" encoding="UTF-8"?> так она у меня в UTF-8 и перекодировать значения в <Literal> в Windows-1251 и добавлять <?xml version="1.0" encoding="Windows-1251"?> в начало SLD - не помогает. Все равно объект не красится, если указан фильтр с условием PropertyIsEqualTo, и красятся все объекты если использую PropertyIsLike.
Если перекодировать всю SLD в cp1251, то все равно перекодируется только русский текст в <Literal>.
Код: Выделить всё
function UnicodeToWin1251(s) {
return unescape( encodeURIComponent( s ) );
}
Кстати, SLD я передаю через параметр SLD_BODY.
При этом тот де фильтр, используемый в Rule в SLD вставленный в параметр FILTER в кодироке UTF-8 без подстановки в начале <?xml version="1.0" encoding="UTF-8"?> отрабатывает корректно, как я и написал предыдущем посте.
Если <?xml version="1.0" encoding="Windows-1251"?> нужно передавать не в начале SLD в SLD_BODY, то куда это вставить?
Для слоя указана кодировка Windows-1251 и действительно в нем Windows-1251, уже несколько раз проверяли...
SLD формирую аналогично статье
http://gis-lab.info/qa/wms-filter.html Код: Выделить всё
var style = new OpenLayers.Style();
var rule = new OpenLayers.Rule({
name: species_selected[i],
filter: new OpenLayers.Filter.Logical({
type: OpenLayers.Filter.Logical.OR,
filters: [
new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: 'country',
value: 'UKRAINE',
}),
new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: 'country',
value: 'BELARUS',
})
]
}),
symbolizer: {
"Point": {
graphicName: "circle", pointRadius: 3.5,
strokeWidth: 1, strokeColor: "#000000",
fillColor: palette[x], fillOpacity: 0.5
}
}
});
style.addRules([rule]);
В результате чего получаю SLD
Если нет кириллицы, то SLD вполне корректно обрабатывается GeoServer...
PS В настройках GeoServer не особо ковырялся... Практически все сейчас по умолчанию, или настраивалось через веб-интерфейс, и относится в основном к отдельным слоям.
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 28 ноя 2013, 17:35
finlas
Граждане, писякая кодировки в SLD делу не поможешь.
Надо идти в папку с геосервером и искать очень хороший файл в папке conf/server.xml
там ищем строку <Connector port="8080" protocol="HTTP/1.1" ...
и туда вставляем URIEncoding="UTF-8"
Получается
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
Всем благ
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 29 ноя 2013, 15:16
Tink
Нет ни файла такого, ни папки... в каталоге геосервера
даже строки начинающейся с <Connector не нашел...
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 29 ноя 2013, 15:58
finlas
хорошо, тогда искать все это в папке не с геосервером, а с Tomcat
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 29 ноя 2013, 17:00
Tink
нет Tomcat,
GeoServer ставился после IIS, не получилось с Tomcat
используется веб-сервер самого GeoServer - jetty, вроде как
поискал по всем файлам <Connector port="8080" protocol="HTTP/1.1"... или хотя бы <connector - ничего не нашел
да и не думаю что это поможет...
если в одном запросе передается одновременно SLD_BODY и FILTER с тем же правилом что и в SLD (в котором кирилица), то SLD ничего не красит, то есть правило не срабатывает, а фильтр работает!
поэтому не думаю что дело в настройках веб-сервера...
у вас sld переданное через параметр sld_body работает если в правиле есть кириллица ?
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 29 ноя 2013, 22:03
grozhentsov
Без Catalina Tomcat даже не знаю как это можно решить. старайтесь не использовать кириллицу внутри правил. С томкатом и прописанной кодировкой по рецепту выше - все работает даже с кириллицей в правилах
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 29 ноя 2013, 22:13
rhot
Да, с Tomcat у меня тоже проблем не возникало.
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 30 ноя 2013, 09:58
Tink
В GetLegendGraphic она корректно обрабатывается (там правка ещё urlencode используется, но всё таки)...
Да и все равно не понятно, почему кириллица в FILTER обрабатывается корректно... а кириллица из соседнего параметра SLD_BODY того же запроса обрабатывается не корректно...
Всё таки мне кажется что дело тут не в веб-сервере, а все таки в самом GeoServer...
Жаль исходники у него здоровые - разбираться что к чему весьма долго получится...
Пока что пришлось без кириллицы обойтись, но это точно не решение...
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 30 ноя 2013, 15:12
Vladimir_R
Может проблема вовсе не в кириллице? Приведенный Вами пример не валиден по ряду причин, одна из них операнд <ogc:And> не завершен.
Переписал Ваш SLD:
Код: Выделить всё
<?xml version="1.0" encoding="Windows-1251"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>default_polygon</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>Usage_Name</ogc:PropertyName>
<ogc:Literal>Для добычи и разработки полезных ископаемых</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#ff0000</CssParameter>
<CssParameter name="fill-opacity">1</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
Все отображается, проблем нет.
Вы формируете SLD через OpenLayers?
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 30 ноя 2013, 19:33
Tink
Тэг <ogc:And> в примере что я приводил завершен.
Если имеется введу, что в нем всего одно условие - как показала практика это не имеет значение, если нет кириллицы, что все прекрасно работает.
SLD полностью формируется OpenLayers, что я ему передаю так это имя слоя, параметры для формирования правила - условия для фильтра и настройки раскраски.
Все скрипты и данные которые приходят для формирования правил в UTF-8.
В Windows-1251 я конвертирую итоговую SLD так:
sld = unescape( encodeURIComponent( sld ) )
Ваш вариант у меня тоже не заработал - ни в UTF-8, ни в Windows-1251 (тем способом что я привел).
Ещё раз привожу свою XML, только в форматированном виде
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8"?>
<sld:StyledLayerDescriptor
xmlns:sld="http://www.opengis.net/sld"
version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
mlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml">
<sld:NamedLayer>
<sld:Name>SN:MyLayer</sld:Name>
<sld:UserStyle>
<sld:FeatureTypeStyle>
<sld:Rule>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>Usage_Name</ogc:PropertyName>
<ogc:Literal>Для добычи и разработки полезных ископаемых</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:And>
</ogc:Filter>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">#ff0000</sld:CssParameter>
<sld:CssParameter name="fill-opacity">1,00</sld:CssParameter>
</sld:Fill>
<sld:Stroke/>
</sld:PolygonSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:NamedLayer>
</sld:StyledLayerDescriptor>
Эту XML мне выдает OpenLayers. Всё что я к ней добавляю - это <?xml version="1.0" encoding="UTF-8"?> или <?xml version="1.0" encoding="Windows-1251"?>, если собираюсь перекодировать её в cp1251.
Так же пробовал заменить 1,00 на 1 или 1.0 или вообще убрать - не помогает.
Слой на котором тестирую в Shapefiles, в кодировке Windows-1251 (пробовали его сохранить в UTF-8, но ничего не изменилось).
Re: Geoserver, SLD. стилизация полей кириллицей ??
Добавлено: 28 мар 2014, 14:25
Александр Мурый
Сам SLD-файл в какой кодировке?