각 타일에 대해 반복되는 다각형 레이블


10

독립형 GeoWebCache를 사용하여 원격 GeoServer에서 타일을 제공하고 있습니다. 내 문제는 다각형 레이블이 다각형 중심에서 한 번이 아니라 제공되는 각 타일에 추가된다는 것입니다.

문제를 논의하는 게시물을 찾았습니다 :
http://osgeo-org.1560.n6.nabble.com/polygon-label-repeated-for-each-tile-td4995203.html

첫 번째 답변은 가능한 해결책을 언급했습니다.

"결국 GeoServer에서 작은 이미지를 요청하는 대신 타일 렌더링 엔진 (GeoWebCache, MapProxy, TileCache)을 사용하고 타일 렌더링 엔진이 타일 슬라이싱을 수행하도록하는 것이 좋습니다. GeoServer에 더 적은 요청을 보내야합니다 ( 여러 개의 작은 이미지 대신 1 개의 큰 이미지)를 사용하므로 전체 타일 캐시 생성 시간이 단축됩니다. "

문제는 GeoWebCache 설명서를 참조하여 방법을 찾을 수 없으며 위에서 언급 한 게시물에서 구현 방법을 설명하지 못한다는 것입니다.

또한 GeoWebCache "Tiled"documentation 링크에 대한 답변이 있는 게시물 을 찾았 지만 코드는 이미 필요한 모든 속성을 사용하고 여전히 레이블이 여러 번 표시됩니다.

var Layer_1874 = new OpenLayers.Layer.WMS(
    'Grundkort',
    '/wms10.ashx'
    , {
        format: 'image/png',
        srs: 'EPSG:25832',
        layers: 'ballerupkommune_grundkort_bk',
        tiled: true,
        tilesOrigin: '698804,6173460'
    }
    , {
        displayInLayerSwitcher: true,
        isBaseLayer: true,
        transitionEffect: 'resize',
        displayOutsideMaxExtent: true,
        visibility: false
    }
);

누구나 아이디어가 있습니까?


사용중인 SLD 파일을 알려주시겠습니까? 레이블이 WMS 레이어에 표시되는 방법을 제어합니다.
katahdin

답변:


16

아래는 지형 지오메트리의 중심에 레이블을 배치하는 SLD 규칙의 예입니다. 레이블을 배치하기 위해 "centroid"라는 ogc : Function을 사용합니다. GeoServer 문서 에서 SLD 함수에 대한 자세한 내용을 읽을 수 있으며 여기에 몇 가지 예가 있습니다 .

<sld:Rule>
      <MaxScaleDenominator>5000</MaxScaleDenominator>
      <sld:TextSymbolizer>
        <sld:Geometry>
          <ogc:Function name="centroid">
            <ogc:PropertyName>the_geom</ogc:PropertyName>
          </ogc:Function>
        </sld:Geometry>
        <sld:Label>
          <ogc:PropertyName>LOT_NAME</ogc:PropertyName>
        </sld:Label>
        <sld:Font>
          <sld:CssParameter name="font-family">Arial</sld:CssParameter>
          <sld:CssParameter name="font-size">11</sld:CssParameter>
          <sld:CssParameter name="font-style">normal</sld:CssParameter>
          <sld:CssParameter name="font-weight">bold</sld:CssParameter>
        </sld:Font>
        <sld:LabelPlacement>
          <sld:PointPlacement>
            <sld:AnchorPoint>
              <sld:AnchorPointX>
                <ogc:Literal>0.0</ogc:Literal>
              </sld:AnchorPointX>
              <sld:AnchorPointY>
                <ogc:Literal>0.5</ogc:Literal>
              </sld:AnchorPointY>
            </sld:AnchorPoint>
            <sld:Rotation>
              <ogc:Literal>0</ogc:Literal>
            </sld:Rotation>
          </sld:PointPlacement>
        </sld:LabelPlacement>
        <sld:Halo>
          <sld:Radius>
            <ogc:Literal>1.0</ogc:Literal>
          </sld:Radius>
          <sld:Fill>
            <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
          </sld:Fill>
        </sld:Halo>
        <sld:VendorOption name="conflictResolution">true</sld:VendorOption>
        <sld:VendorOption name="goodnessOfFit">0</sld:VendorOption>
        <sld:VendorOption name="autoWrap">60</sld:VendorOption>
      </sld:TextSymbolizer>
    </sld:Rule>

또한 SLD Cookbook 은 훌륭한 참고 자료입니다. 당신을 방해 할 수있는 한 가지는 SLD에서 태그를 주문하는 것입니다. 위의 TextSymbolizer 규칙의 경우 스키마 정의를 보면 필요한 순서를 볼 수 있습니다. 걱정하지 마십시오. 너무 무섭지는 않습니다! 해당 .xsd 파일에서 "textsymbolizer"를 검색하면 "sequence"태그를 쉽게 찾을 수 있습니다. 여기에서 요소 참조가 내 예제의 순서와 일치 함을 알 수 있습니다. (참고 : 텍스트 심볼 라이저의 "채우기"속성을 사용하지 않았습니다. 내 채우기는 후광에만 적용됩니다.)


1

충돌 해결 기능이있는 레이블을 계산 (라벨을 방해하지 않거나 우선 순위가 낮은 레이블을 제거하여 겹치지 않도록)하려면 드로잉하는 레이블과 충돌 할 수있는 모든 레이블, 레이블과 충돌 할 수있는 모든 레이블 등을 알아야합니다. . 따라서 일반적으로 모든 기능을보고 모든 레이블을 한 번에 계산하거나 각 블록 내에서 레이블이 계산 된 맵을 블록으로 분할해야합니다.

기본적으로 GeoWebCache는 "metatile"이라는 4x4 타일 블록을 사용합니다. 캐시에없는 타일을 요청하면 GWC는 전체 메타 데이터를 백엔드에서 하나의 큰 이미지로 요청한 다음 메타 타일을 캐시하는 타일로 슬라이스합니다. 레이어를 설정할 때 metatile factor를 조정할 수 있습니다. 더 큰 메타 타일은 더보기 좋은 레이블을 제공하지만 캐시 미스의 대기 시간을 늘립니다. 백엔드에서 레이블 충돌 해결을 사용하지 않는 경우 메타 틸링을 1x1로 설정할 수 있습니다.

또한 GWC에 잘라낼 여분의 공간 인 메타 타일 주위에 거터를 추가하도록 지시 할 수 있습니다. 레이블이 다르게 배치되거나 메타 일 경계의 다른 쪽에서 완전히 제거 될 수 있으므로 레이블 충돌 해결이 설정된 경우이 작업을 수행하는 것이 위험합니다. 완전히 고정 된 레이블이 있고 충돌을 피하기 위해 결코 억압되지 않는 레이블이 있으면 넓은 홈통을 사용하여 레이블이 타일 경계를 넘을 수 있습니다. GeoServer가 더 큰 타일을 렌더링해야하므로 성능 비용이 발생합니다.

레이어 구성의 타일 레이어 탭에서 메타 타일링 및 홈통을 설정하거나 새 레이어에 사용될 기본값을 캐싱 기본값 페이지에서 설정할 수 있습니다.

충돌 해결을 비활성화하려면 conflictResolution스타일에서 공급 업체 옵션을 사용할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.