2017-06-08 16 views
0

J'essaie de filtrer/découper un raster fourni par un service de cartographie Web à partir de Geoserver.Comment puis-je filtrer/découper un raster fourni par WMS - Geoserver

Je ne veux pas couper en fonction d'un polygone; Je veux filtrer sur la base d'une valeur telle que tous les pixels raster en dessous de cette valeur soient noirs ou transparents. Pour autant que je sache, je ne peux pas utiliser cql_filter puisque c'est uniquement pour les demandes de fonctionnalités WFS et non pour les images WAS Raster.

Peut-être avez-vous une idée pour résoudre ma question.

Répondre

1

Un WMS ne pas vous renvoyer des données, il renvoie un image de vos données.

Donc, il y a deux possibilités:

  1. Vous utilisez une demande Web Coverage Service (WCS) qui vous ramènera les données réelles dans votre raster. Pensez-y comme un WFS pour les rasters. Le GeoServer manual covers the mechanics of making a request et il y a un constructeur de demande sous Demos pour que vous puissiez expérimenter. Je suis sûr que cela ne vous permettra que de sous-ensembles par des zones rectangulaires, bien que votre client est libre de faire des opérations plus complexes des données renvoyées.

  2. Vous pouvez considérer cela comme un exercice de style, auquel cas il devrait être possible de configurer un style SLD qui effectue l'opération dont vous avez besoin. Vous devrez utiliser un spatial filter pour découper le raster sous-jacent et appliquer deux règles selon si elle est vraie ou fausse. Vous pouvez même passer le polygone en tant que environment variable de la demande si vous en avez besoin.

+0

Merci pour votre réponse détaillée! Puisque je veux seulement afficher une image filtrée du côté client, j'ai utilisé votre 2ème suggestion. Pour cela, j'ai utilisé des styles SLD dynamiques et j'ai attaché ce style au paramètre WMS Request en tant que SLD ou SLD_BODY. Lorsque vous utilisez le paramètre SLD ou SLD_BODY, vous ne devez pas fournir le paramètre layers puisque le nom de la couche est déjà fourni par le SLD en tant que NamedLayer. –