Estou usando o GeoWebCache independente para servir blocos de um GeoServer remoto. Meu problema é que o rótulo de polígono é adicionado a cada um dos blocos exibidos, em vez de apenas uma vez no centróide do polígono.
Encontrei uma postagem que discute o problema:
http://osgeo-org.1560.n6.nabble.com/polygon-label-repeated-for-each-tile-td4995203.html
A primeira resposta mencionou uma possível solução:
"Em suma, sugiro usar um mecanismo de renderização de blocos (GeoWebCache, MapProxy, TileCache) de qualquer maneira, em vez de solicitar uma imagem pequena do GeoServer e fazer com que o mecanismo de renderização de blocos faça o fatiamento de blocos posteriormente. Você precisará enviar menos solicitações ao GeoServer ( 1 imagem grande em vez de várias imagens pequenas), o que acelera o tempo geral de criação do cache do bloco. "
O problema é que não consegui descobrir como fazer isso consultando a documentação do GeoWebCache, e o post acima mencionado não explica como implementá-lo.
Eu também encontrei um post com uma resposta que aponta para a documentação do GeoWebCache "Tiled" , mas meu código já usa todos os atributos necessários e ainda o rótulo aparece várias vezes:
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
}
);
Alguém tem uma ideia?
fonte
Respostas:
Abaixo está um exemplo de uma regra SLD que coloca um rótulo no centro da geometria de um recurso. Isso usa a função ogc: chamada "centróide" para colocar o rótulo. Você pode ler mais sobre as funções SLD nos documentos do GeoServer , e alguns exemplos são dados aqui .
Além disso, o SLD Cookbook é uma ótima referência. Uma coisa que pode te atrapalhar é a ordem das tags no SLD. Para a regra TextSymbolizer acima, você pode ver a ordem necessária, procurando na definição de esquema. Não se preocupe, não é muito assustador! Basta procurar por "symbolsymbolizer" nesse arquivo .xsd, e você deve encontrar facilmente a tag "sequence". Lá você encontrará que as referências do elemento correspondem à ordem no meu exemplo. (Nota: eu não usei o atributo "fill" do simbolizador de texto, meu preenchimento se aplica apenas ao halo.)
fonte
Computar etiquetas com resolução de colisão (mover etiquetas para fora do caminho ou remover etiquetas de menor prioridade para que não se sobreponham) requer conhecer todas as etiquetas que possam colidir com a etiqueta que você está desenhando, todas as etiquetas que possam colidir com elas etc. . Portanto, em geral, você precisa calcular todos os rótulos de uma só vez examinando todos os recursos ou dividir o mapa em blocos com rótulos computados em cada bloco.
Por padrão, o GeoWebCache usa um bloco de blocos 4x4 chamado "metátil". Quando você solicita um bloco que não está no cache, o GWC solicita todo o metil como uma imagem grande do back-end e, em seguida, divide o metil em blocos que ele armazena em cache. Você pode ajustar o fator metátil ao configurar uma camada. Metatiles maiores fornecem rótulos com melhor aparência, mas aumentam a latência de uma falta de cache. Se você não estiver usando a resolução de colisão de etiqueta no back-end, poderá definir a metatilação para 1x1.
Você também pode pedir ao GWC para adicionar uma sarjeta ao redor do metátil, que é um espaço extra que será cortado. É arriscado fazer isso se você tiver uma resolução de colisão de etiqueta, pois ela pode ser posicionada de maneira diferente ou mesmo removida totalmente do outro lado de um limite metátil. Se você possui etiquetas totalmente fixas na posição e nunca são suprimidas para evitar colisões, use uma calha larga para permitir que as etiquetas ultrapassem os limites dos ladrilhos. Isso terá um custo de desempenho, pois o GeoServer terá que renderizar um bloco maior.
Você pode definir metatiling e sarjeta na guia Camada lado a lado da configuração da camada, ou o padrão que será usado para novas camadas pode ser definido na página Padrões de armazenamento em cache.
Para desativar a resolução de conflitos, você pode usar a
conflictResolution
opção de fornecedor em seus estilos.fonte