Geoserver: Полигоны и их подписи

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Geoserver: Полигоны и их подписи

Сообщение Аминодов-Борисов »

Здравствуйте.
Прошу ваших подсказок при составлении стиля (SLD или CSS — неважно, важен алгоритм) при отображении полигонального слоя с подписями.
У меня есть полигональный слой. Он состоит из полигонов, которые нужно отображать на мелких масштабах и полигонов, которые нужно отобразить на крупных масштабах.
Вот так выглядит полигон, предназначенный для отображения на мелких масштабах:
Полигон для мелких масштабов
Полигон для мелких масштабов
Polygon1.png (4.33 КБ) 6254 просмотра
А при переходе на более крупные масштабы полигон «распадается» на несколько мелких, составляющих первый.
Polygon4.png
Polygon4.png (2.99 КБ) 6254 просмотра
Собственно с отображением полигонов проблем нет, всё легко решается с помощью MinScaleDenominator и MaxScaleDenominator.

Проблема с подписью. Задача в том, что сам мелкомасштабный полигон на крупных масштабах отображаться не должен, но должна отображаться его подпись. Вот так:
Polygon2.png
Polygon2.png (5.34 КБ) 6254 просмотра
Но у меня получается только так...
Последний раз редактировалось Аминодов-Борисов 05 июл 2016, 15:20, всего редактировалось 1 раз.
Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: Подписи полигонов

Сообщение Аминодов-Борисов »

...Но у меня получается только так:
Polygon3.png
Polygon3.png (5.63 КБ) 6247 просмотров
На данный момент стиль выглядит так:

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

<?xml version="1.0" encoding="UTF-8"?>
<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>Small scale polygons</Name>
        <UserStyle>
            <FeatureTypeStyle>
                <Name>Small scale polygons</Name>
                <Rule>
                    <Name>Small scale polygons</Name>
                    <Description>
                        <Title>Small scale polygons</Title>
                    </Description>
                    <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
                        <ogc:PropertyIsEqualTo>
                            <ogc:PropertyName>type</ogc:PropertyName>
                            <ogc:Literal>smallscale</ogc:Literal>
                        </ogc:PropertyIsEqualTo>
                    </ogc:Filter>
                    <MinScaleDenominator>100000</MinScaleDenominator>
                    <MaxScaleDenominator>1000000</MaxScaleDenominator>
                    <PolygonSymbolizer>
                        <Stroke>
                            <CssParameter name="stroke">#ff0000</CssParameter>
                            <CssParameter name="stroke-width">2</CssParameter>
                        </Stroke>
                        <Fill>
                            <CssParameter name="fill">#ff0000</CssParameter>
                            <CssParameter name="fill-opacity">0.1</CssParameter>
                        </Fill>
                    </PolygonSymbolizer>
                    <TextSymbolizer>
                        <Label>
                            <ogc:PropertyName>name</ogc:PropertyName>
                        </Label>
                        <Halo>
                            <Radius>2</Radius>
                            <Fill>
                              <CssParameter name="fill">#FFFFFF</CssParameter>
                            </Fill>
                        </Halo>
                        <Font>
                            <CssParameter name="font-family">Arial</CssParameter>
                            <CssParameter name="font-size">12</CssParameter>
                            <CssParameter name="font-style">normal</CssParameter>
                            <CssParameter name="font-weight">bold</CssParameter>
                        </Font>
                        <LabelPlacement>
                            <PointPlacement>
                                <AnchorPoint>
                                    <AnchorPointX>0.5</AnchorPointX>
                                    <AnchorPointY>0.5</AnchorPointY>
                                </AnchorPoint>
                            </PointPlacement>
                        </LabelPlacement>
                        <Fill>
                            <CssParameter name="fill">#ff0000</CssParameter>
                        </Fill>
                    </TextSymbolizer>
                </Rule>
            </FeatureTypeStyle>
            <FeatureTypeStyle>
                <Rule>
                    <Name>Large scale polygons</Name>
                    <Description>
                        <Title>Large scale polygons</Title>
                    </Description>
                    <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
                        <ogc:PropertyIsEqualTo>
                            <ogc:PropertyName>type</ogc:PropertyName>
                            <ogc:Literal>largescale</ogc:Literal>
                        </ogc:PropertyIsEqualTo>
                    </ogc:Filter>
                    <MinScaleDenominator>1</MinScaleDenominator>
                    <MaxScaleDenominator>100000</MaxScaleDenominator>
                    <PolygonSymbolizer>
                        <Stroke>
                            <CssParameter name="stroke">#ff00ff</CssParameter>
                            <CssParameter name="stroke-width">1</CssParameter>
                        </Stroke>
                        <Fill>
                            <CssParameter name="fill">#ff00ff</CssParameter>
                            <CssParameter name="fill-opacity">0.1</CssParameter>
                        </Fill>
                    </PolygonSymbolizer>
                </Rule>
            </FeatureTypeStyle>
            <FeatureTypeStyle>
                <Rule>
                    <Name>Small scale polygons</Name>
                    <Description>
                        <Title>Small scale polygons</Title>
                    </Description>
                    <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
                        <ogc:PropertyIsEqualTo>
                            <ogc:PropertyName>type</ogc:PropertyName>
                            <ogc:Literal>smallscale</ogc:Literal>
                        </ogc:PropertyIsEqualTo>
                    </ogc:Filter>
                    <MinScaleDenominator>1</MinScaleDenominator>
                    <MaxScaleDenominator>100000</MaxScaleDenominator>
                    <TextSymbolizer>
                        <Label>
                            <ogc:PropertyName>name</ogc:PropertyName>
                        </Label>
                        <Halo>
                            <Radius>2</Radius>
                            <Fill>
                              <CssParameter name="fill">#FFFFFF</CssParameter>
                            </Fill>
                        </Halo>
                        <Font>
                            <CssParameter name="font-family">Arial</CssParameter>
                            <CssParameter name="font-size">16</CssParameter>
                            <CssParameter name="font-weight">bold</CssParameter>
                        </Font>
                        <LabelPlacement>
                            <PointPlacement>
                                <AnchorPoint>
                                    <AnchorPointX>0.5</AnchorPointX>
                                    <AnchorPointY>0.5</AnchorPointY>
                                </AnchorPoint>
                            </PointPlacement>
                        </LabelPlacement>
                        <Fill>
                            <CssParameter name="fill">#ff0000</CssParameter>
                        </Fill>
                    </TextSymbolizer>
                </Rule>
            </FeatureTypeStyle>
        </UserStyle>
    </NamedLayer>
</StyledLayerDescriptor>
Подписи мелкомасштабных полигонов я здесь вынес в отдельный FeatureTypeStyle. Рассуждая примерно так: если я размещу некий FeatureTypeStyle в конце стиля, то он будет отрисовываться в последний момент и окажется на самом верху. Но увы, это не получается.
Все полигоны находятся в одном хранилище.
Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Geoserver: Полигоны и их подписи

Сообщение Andrey Zhukov »

Z-order же!
Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: Geoserver: Полигоны и их подписи

Сообщение Аминодов-Борисов »

@Andrey Zhukov
Ага, спасибо. Перевёл стиль в CSS — SLD начинает потихоньку надоедать — и добавил куда надо label-z-order: 0. Помогло.

[ Сообщение с мобильного устройства ]
Аминодов-Борисов
Активный участник
Сообщения: 153
Зарегистрирован: 02 авг 2014, 18:29
Репутация: 24
Откуда: Москва

Re: Geoserver: Полигоны и их подписи

Сообщение Аминодов-Борисов »

...Хотя, наверное, стоит попробовать не 0, а -1...

[ Сообщение с мобильного устройства ]
Ответить

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

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

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