Полігональна етикетка повторюється для кожної плитки


10

Я використовую автономний GeoWebCache для обслуговування плиток із віддаленого GeoServer. Моя проблема полягає в тому, що мітка полігону додається до кожної з поданих плиток, а не лише один раз у центроїді полігону.

Я знайшов публікацію, в якій обговорюється це питання:
http://osgeo-org.1560.n6.nabble.com/polygon-label-repeated-for-each-tile-td4995203.html

Перша відповідь згадувала можливе рішення:

"Загалом, я пропоную використовувати механізм візуалізації плитки (GeoWebCache, MapProxy, TileCache) у будь-якому випадку, замість того, щоб вимагати від GeoServer невеликого зображення і мати, щоб механізм візуалізації плитки зробив нарізку плитки після цього. Ви будете надсилати менше запитів до GeoServer ( 1 велике зображення замість декількох невеликих зображень), тому це прискорює загальний час створення кешу плитки ".

Проблема полягає в тому, що я не міг знайти, як це зробити, посилаючись на документацію GeoWebCache, і вищезгаданий пост не пояснює способу їх здійснення.

Я також знайшов публікацію з відповіддю, що посилається на документацію GeoWebCache "Черепиця" , але мій код уже використовує всі необхідні атрибути, і все ж мітка відображається кілька разів:

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.
катахдін

Відповіді:


16

Нижче наводиться приклад правила SLD, який розміщує мітку в центрі геометрії функції. Для використання етикетки використовується функція ogc: називається "центроїд". Докладніше про функції SLD можна прочитати в документах GeoServer , а деякі приклади наведені тут .

<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 - чудова довідка. Одна річ, яка може вас заспокоїти, - це впорядкування тегів у програмі SLD. Для правила TextSymbolizer вище ви можете побачити необхідний порядок, переглянувши визначення схеми. Не хвилюйтесь, це не надто страшно! Просто знайдіть "текстовий символізатор" у цьому файлі .xsd, і вам слід легко знайти тег "послідовність". Там ви побачите, що посилання на елементи збігаються з порядком у моєму прикладі. (Примітка. Я не використовував атрибут "заливка" текстового символізатора, моє заповнення просто стосується ореолу.)


1

Обчислення міток із роздільною здатністю зіткнення (переміщення міток убік або видалення нижчих пріоритетних, щоб вони не перекривались) вимагає знати про кожну мітку, яка може зіткнутися з нанесеною вами міткою, про кожну мітку, яка може зіткнутися з ними тощо. . Отже, взагалі вам потрібно або обчислити всі мітки одразу, переглянувши кожну функцію, або розбити карту на блоки з мітками, обчисленими у кожному блоці.

За замовчуванням GeoWebCache використовує блок 4x4 плиток, який називається "метатилом". Коли ви запитуєте плитку, яка не знаходиться в кеші, GWC запитає весь метатик як одне велике зображення з бекенда, а потім розріже металевий фрагмент на келихи, які він кешує. Ви можете налаштувати металевий коефіцієнт під час налаштування шару. Більш великі метатили дають кращі вигляди міток, але збільшують затримку пропуску кешу. Якщо ви не використовуєте роздільну здатність зіткнення міток на зворотному кінці, ви можете встановити метатилювання на 1x1.

Ви також можете сказати GWC додати жолоб навколо металевого шару, який зайвий простір буде відрізаний. Це зробити ризиковано, якщо у вас роздільна здатність зіткнення міток як мітка може розміщуватися по-різному або навіть видалятися повністю з іншого боку металевої межі. Якщо у вас є мітки, які повністю закріплені в положенні і ніколи не пригнічуються, щоб уникнути зіткнення, ви можете використовувати широкий жолоб, щоб мітки могли перетинати межі плитки. Це матиме вартість продуктивності, оскільки GeoServer повинен буде зробити більшу плитку.

Ви можете встановити метатилювання та жолоби на вкладці "Плитковий шар" конфігурації шару, або за замовчуванням, який буде використовуватися для нових шарів, можна встановити на сторінці "Кешування за замовчуванням".

Щоб вимкнути вирішення конфлікту, ви можете використовувати conflictResolutionопцію постачальника у своїх стилях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.