Geoserver, SLD. стилизация полей кириллицей ??

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
sdm98
Интересующийся
Сообщения: 19
Зарегистрирован: 05 июл 2009, 15:34
Репутация: 1
Откуда: Minsk
Контактная информация:

Geoserver, SLD. стилизация полей кириллицей ??

Сообщение sdm98 »

Добрый. сделал в udig стилизацию проекта. залил слои в постгис. заголовки полей у меня латиницей. а вот сами значения кирилицей. мне нужно сделать разные цвета в зависимости от значений. геосервер не хочет кушать мои sld-шки. (((
можно ли так отстилизовать? не хочется в транслит перегонять всю атрибутику ( геморно и некрасиво.
sdm98
Интересующийся
Сообщения: 19
Зарегистрирован: 05 июл 2009, 15:34
Репутация: 1
Откуда: Minsk
Контактная информация:

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение sdm98 »

нашёл такой патч http://jira.codehaus.org/browse/GEOS-4263
у меня такая же ошибка Invalid byte 2 of 4-byte UTF-8 sequence.
не понял как патчить. и подойдёт ли этот патч для меня . у меня версия 2.3.3. а там 2.0.2.
Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение Tink »

У меня аналогичная проблема с кирилицей...
В слое есть объекты значения свойств которых заданы кирилицей (сами имена свойств заданы латиницей).
Фильтр по этим полям работает нормально (без дополнительных манипуляций), а стиль не применяется.
Кодировка слоя Windows-1251.
Если специально для SLD перекодирую искомую строку из UTF-8 в Windows-1251, то красятся все объекты, при том что правило соответствует всего одному...

Если кому-то удалось решить проблему стилизации с кириллицей в значениях атрибутов объектов (и фильтров стилей соответственно), прошу помогите.

PS версия GeoServer у меня то же 2.3.3...
Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение Vladimir_R »

Контролируйте кодировку sld (xml). По умолчанию Geoserver пишет

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

<?xml version="1.0" encoding="ISO-8859-1"?>
в заголовке. Поменяйте на

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

<?xml version="1.0" encoding="Windows-1251"?>
Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение 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
Спойлер
<?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/St ... riptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><sld:NamedL ... ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:And><o ... iteral>Для добычи и разработки полезных ископаемых</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>
Если нет кириллицы, то SLD вполне корректно обрабатывается GeoServer...

PS В настройках GeoServer не особо ковырялся... Практически все сейчас по умолчанию, или настраивалось через веб-интерфейс, и относится в основном к отдельным слоям.
finlas
Интересующийся
Сообщения: 20
Зарегистрирован: 06 ноя 2013, 12:30
Репутация: 2

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение 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"/>

Всем благ
Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение Tink »

Нет ни файла такого, ни папки... в каталоге геосервера
даже строки начинающейся с <Connector не нашел...
finlas
Интересующийся
Сообщения: 20
Зарегистрирован: 06 ноя 2013, 12:30
Репутация: 2

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение finlas »

хорошо, тогда искать все это в папке не с геосервером, а с Tomcat
Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение Tink »

нет Tomcat,
GeoServer ставился после IIS, не получилось с Tomcat
используется веб-сервер самого GeoServer - jetty, вроде как

поискал по всем файлам <Connector port="8080" protocol="HTTP/1.1"... или хотя бы <connector - ничего не нашел

да и не думаю что это поможет...
если в одном запросе передается одновременно SLD_BODY и FILTER с тем же правилом что и в SLD (в котором кирилица), то SLD ничего не красит, то есть правило не срабатывает, а фильтр работает!

поэтому не думаю что дело в настройках веб-сервера...

у вас sld переданное через параметр sld_body работает если в правиле есть кириллица ?
grozhentsov
Активный участник
Сообщения: 163
Зарегистрирован: 24 янв 2012, 22:02
Репутация: 24
Откуда: Москва
Контактная информация:

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение grozhentsov »

Без Catalina Tomcat даже не знаю как это можно решить. старайтесь не использовать кириллицу внутри правил. С томкатом и прописанной кодировкой по рецепту выше - все работает даже с кириллицей в правилах
Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение rhot »

Да, с Tomcat у меня тоже проблем не возникало.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение Tink »

В GetLegendGraphic она корректно обрабатывается (там правка ещё urlencode используется, но всё таки)...
Да и все равно не понятно, почему кириллица в FILTER обрабатывается корректно... а кириллица из соседнего параметра SLD_BODY того же запроса обрабатывается не корректно...
Всё таки мне кажется что дело тут не в веб-сервере, а все таки в самом GeoServer...
Жаль исходники у него здоровые - разбираться что к чему весьма долго получится...

Пока что пришлось без кириллицы обойтись, но это точно не решение...
Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение 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?
Tink
Участник
Сообщения: 50
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 4

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение 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, но ничего не изменилось).
Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Geoserver, SLD. стилизация полей кириллицей ??

Сообщение Александр Мурый »

Сам SLD-файл в какой кодировке?
Редактор материалов, модератор форума
Ответить

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

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

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