Label poligon diulang untuk setiap ubin

10

Saya menggunakan GeoWebCache mandiri untuk melayani ubin dari GeoServer jarak jauh. Masalah saya adalah bahwa label poligon ditambahkan ke masing-masing ubin yang dilayani, bukan hanya satu kali dalam poligon centroid.

Saya menemukan posting yang membahas masalah ini:
http://osgeo-org.1560.n6.nabble.com/polygon-label-repeat-for-each-tile-td4995203.html

Balasan pertama menyebutkan solusi yang mungkin:

"Secara keseluruhan, saya sarankan untuk menggunakan mesin rendering ubin (GeoWebCache, MapProxy, TileCache), alih-alih meminta gambar kecil dari GeoServer dan meminta mesin rendering ubin melakukan pemotongan ubin setelahnya. Anda akan mengirim lebih sedikit permintaan ke GeoServer ( 1 gambar besar daripada banyak gambar kecil), jadi ini mempercepat waktu pembuatan cache ubin keseluruhan. "

Masalahnya adalah saya tidak bisa menemukan cara melakukannya dengan merujuk pada dokumentasi GeoWebCache, dan posting yang disebutkan di atas tidak menjelaskan cara untuk mengimplementasikannya.

Saya juga menemukan posting dengan jawaban yang tertaut ke dokumentasi "Tile" GeoWebCache , tetapi kode saya allready menggunakan semua atribut yang diperlukan dan masih label muncul beberapa kali:

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
    }
);

Adakah yang punya ide?

Ambran
sumber
Bisakah Anda menunjukkan kepada kami file SLD yang Anda gunakan? Itu mengontrol bagaimana label ditampilkan pada lapisan WMS.
katahdin

Jawaban:

16

Di bawah ini adalah contoh aturan SLD yang menempatkan label di tengah geometri fitur. Ini menggunakan ogc: Fungsi yang disebut "centroid" untuk menempatkan label. Anda dapat membaca lebih lanjut tentang fungsi SLD dalam dokumen GeoServer , dan beberapa contoh diberikan di sini .

<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>

Juga, Cookbook SLD adalah referensi yang bagus. Satu hal yang dapat membuat Anda tersandung adalah pemesanan tag di SLD. Untuk aturan TextSymbolizer di atas Anda dapat melihat pesanan yang diperlukan dengan melihat pada definisi skema. Jangan khawatir, itu tidak terlalu menakutkan! Cukup cari "textymbolizer" di file .xsd itu, dan Anda harus dengan mudah menemukan tag "sequence". Di sana Anda akan menemukan bahwa referensi elemen cocok dengan pesanan dalam contoh saya. (Catatan: Saya tidak menggunakan atribut "isi" simbolo teks, isian saya hanya berlaku untuk halo.)

katahdin
sumber
1

Komputasi label dengan resolusi tabrakan (memindahkan label keluar dari jalan atau menghapus yang prioritas rendah sehingga tidak tumpang tindih) membutuhkan pengetahuan tentang setiap label yang mungkin bertabrakan dengan label yang Anda gambar, setiap label yang mungkin bertabrakan dengan mereka, dan sebagainya . Jadi, secara umum, Anda harus menghitung semua label sekaligus dengan melihat setiap fitur, atau memecah peta menjadi blok dengan label yang dihitung dalam setiap blok.

Secara default, GeoWebCache menggunakan blok ubin 4x4 yang disebut "metatile". Saat Anda meminta ubin yang tidak ada di cache, GWC akan meminta seluruh metatile sebagai satu gambar besar dari backend dan kemudian mengiris metatile ke ubin yang di-cache. Anda dapat menyesuaikan faktor metatile saat mengatur layer. Metatile yang lebih besar memberikan label yang tampak lebih baik, tetapi meningkatkan latensi miss cache. Jika Anda tidak menggunakan resolusi tabrakan label di bagian belakang, Anda dapat mengatur metatiling ke 1x1.

Anda juga dapat memberi tahu GWC untuk menambahkan selokan di sekitar metatile yang merupakan ruang ekstra yang akan terpotong. Beresiko untuk melakukan ini jika Anda memiliki resolusi tabrakan berlabel karena label mungkin diposisikan berbeda atau bahkan dihilangkan seluruhnya di sisi lain batas metatile. Jika Anda memiliki label yang benar-benar tetap pada posisinya dan tidak pernah ditekan untuk menghindari tabrakan, Anda dapat menggunakan selokan lebar untuk memungkinkan label melintasi batas ubin. Ini akan memiliki biaya kinerja karena GeoServer harus merender ubin yang lebih besar.

Anda dapat mengatur metatiling dan talang pada tab Tile Layer dari konfigurasi layer, atau default yang akan digunakan untuk layer baru dapat diatur pada halaman Caching Defaults.

Untuk menonaktifkan resolusi konflik, Anda dapat menggunakan conflictResolutionopsi vendor dalam gaya Anda.

smithkm
sumber