2009-08-25 11 views
2

Quelqu'un sait s'il existe un moyen de définir un filtre spatial dans un fichier map pour l'utiliser avec des requêtes normales, non seulement WMS ou WFS? J'ai besoin que ce filtre spatial soit n'importe quel type de polygone, pas seulement des rectangles, car ces filtres sur notre système sont dynamiques: les utilisateurs sont autorisés à dessiner des polygones ou à les sélectionner à partir des couches de polygones. C'est un système où les utilisateurs utilisent une ancienne application de bureau sans fonctionnalités de carte, demande seulement Mapserver pour les images, donc je dois faire ce filtrage sur le côté MapserverFiltrage spatial de Mapserver

Pour le dire simplement, voici un exemple: les utilisateurs ont des couches avec des données telles que les noms de rue (points étiquetés) et les districts (polygones). L'un d'eux voudra peut-être voir seulement les rues qui se trouvent dans le district numéro deux, donc je veux que Mapserver génère des images cachant le reste des rues. Bien sûr, dans la couche rues il n'y a pas d'informations sur dans quel quartier se trouve la rue

Certaines choses pour vous aider à poser cette question:

  • Les demandes sont cgi, pas WMS mais je ne pouvais changer que si il aide
  • Je n'utilise Mapscript ni aucun client comme OpenLayers ou uDig
  • couches n'ont pas et ne seront pas avoir des relations d'attributs
  • Je sais paramètre FILTER dans la section LAYER mais il est seulement pour l'attribut filtrage
  • je lis à propos de « Filtre encodage » (inclus dans DLV), mais ne peut le faire fonctionner, et il semble que pour WFS
  • j'ai vu CQL mais ce n'est pas pris en charge dans MapServer directement, que par DLV

Comment faites-vous le filtrage spatial pour la génération d'images dans Mapserver?

Merci

Répondre

0

Vous pouvez utiliser des demandes WMS pour retourner des fonctions dans un cadre de sélection.

Voir http://mapserver.org/ogc/wms_server.html

BBOX = minx, miny, maxx, maxy: Bounding coins de la boîte (en bas à gauche, en haut à droite) en unités SRS

Une demande serait similaire à:

http://my.host.com/cgi-bin/mapserv?map=mywms.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=prov_bound&STYLES=&SRS=EPSG:4326&BBOX=-173.537,35.8775,-11.9603,83.8009&WIDTH=400&HEIGHT=300&FORMAT=image/png

Vous pouvez également créer des requêtes dans une base de données spatiale (si vous en utilisez une) et transmettre des ID d'entités et y filtrer.

1

Il y a généralement deux façons de faire la requête spatiale/non spatiale autant que je sache. D'abord utilise un encodage de filtre tel que l'utilisation d'un paramètre dans l'URL d'appel wms. par exemple. http://.../mapserv?map=..&param=value

Une autre façon de procéder consiste à utiliser un filtre dans le corps de la demande. Supposons que vous soyez en mesure de faire une demande de publication sur le serveur, vous pouvez utiliser le filtre pour une requête spatiale/non spatiale complexe dans un filtre. Pour plus de détails, veuillez consulter la page de filtre mapserver. Il existe plusieurs opérations de filtrage spatial telles que contenir, croiser, etc. disponibles.

Le filtre à l'intérieur du fichier de carte est un peu différent, c'est un filtre prédéfini pour la source de données. Cela fonctionne lorsque vous avez la logique pour filtrer les données avant même qu'une demande de client ne vienne.(voir plus d'informations par la recherche OGC filtre et CQL est pour GeoServer actuellement)

Et SLD fonctionne à l'heure de rendu pour filtrer les données aussi bien. Il fonctionne aussi bien sur les filtres spatiaux que non spatiaux. Mais il ne reflète que l'opération getmap.