banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 02 February 2010 18:30

NicoDel
Juste Inscrit !
Lieu: Montréal
Date d'inscription: 7 Aug 2006
Messages: 5

[MapFish / OpenLayers] Connexion WFS

Bonjour à tous,

je cherche désespérément le moyen de connecter dans MapFish (via OpenLayers) des couches WFS générées par MapServer.
J'arrive a visualiser mes couches WFS par des SIG tels QGIS...
J'arrive également a visualiser des services WMS dans MapFish sans aucun probleme.
Je travaille dans un environnement Windows, MapFish tourne sur un serveur dans un reseau local.

J'ai cru comprendre qu'il y avait besoin de mettre en place un proxy pour qu'OpenLayers puisse lire les WFS.
http://trac.openlayers.org/wiki/Frequen … #ProxyHost
Or ce n'est pas Apache qui diffuse ma carte OpenLayers mais MapFish (Apache est avec mon install MapServer)...ou dois-je placer le proxy.cgi recommandé ?

Merci d'avance,
Nico.

Hors ligne

 

#2 Thu 25 February 2010 10:25

Tony VINCENT
Participant actif
Lieu: Poitiers
Date d'inscription: 13 Jan 2010
Messages: 86

Re: [MapFish / OpenLayers] Connexion WFS

Bonjour,

Peux-tu nous montrer le code que tu utlise (dans le mapfile et mapfish), pour que l'on puisse essayer de comprendre pourquoi cela ne fonctionne pas.

Sinon, sans cela, pas facile de t'aider.

Tony

Hors ligne

 

#3 Thu 25 February 2010 11:12

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [MapFish / OpenLayers] Connexion WFS

Bonjour,

MapFish server ne diffuse pas de service OGC, seulement des services REST. Donc c'est bien Apache qui gère la requête WFS de ton client, quel qu'il soit d'ailleurs.

Or toi tu parles de MapFish client qui n'est qu'une bibliothèque javaScript, et qui peut être utilisé dans un serveur Apache.

Donc il faut bien un proxy si le hostname de ton url est différente entre celui de ton client et celui de ton service. Je suppose donc que tu dois utiliser le code JavaScript de MapFish client dans une page html servie par Apache.

Si tu utilises MapFish client via Pylon (le framework utilisé par MapFish server) cela n'a aucun intérêt sauf si tu veux coder ton site en python wink

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#4 Thu 25 February 2010 20:03

vdb
Participant actif
Lieu: Chambéry
Date d'inscription: 21 Jun 2006
Messages: 56

Re: [MapFish / OpenLayers] Connexion WFS

Pour consommer un WFS dans OpenLayers, il ne faut pas oublier de
préciser le namespace (featureNS) des objects vectoriels attendus au
niveau du protocole.

Exemple :
              var layer = new OpenLayers.Layer.Vector("WFS", {
                    strategies: [new OpenLayers.Strategy.BBOX()],
                    protocol: new OpenLayers.Protocol.WFS({
                        url:  "http://osm.geocommons.com:8080/services/ows?",
                        featureType: "planet_osm_point",
                        featureNS: "http://osm.crisiscommons.org",
                        geometryName: "way",
                        srsName: "EPSG:900913"
                    })
                });

Pour MapServer, il faut positionner featureNS à
"http://mapserver.gis.umn.edu/mapserver"

HTH,
F.

Hors ligne

 

#5 Mon 01 March 2010 22:37

NicoDel
Juste Inscrit !
Lieu: Montréal
Date d'inscription: 7 Aug 2006
Messages: 5

Re: [MapFish / OpenLayers] Connexion WFS

Merci pour vos réponses.
Voici les codes utilisés

Mapfile :

Code:

MAP
    NAME "MapFishApp"
    IMAGETYPE PNG24 
    EXTENT 334000 5033000 344000 5042000
    SIZE 400 300
    UNITS METERS
    IMAGECOLOR 255 255 255
    TRANSPARENT on
    STATUS ON
    FONTSET "fonts.txt"
    SYMBOLSET "symbols.txt"
    SHAPEPATH "D:\GEO\SIGNAQ\"
    WEB
        IMAGEPATH "C:/Mapfile/"
        IMAGEURL "C:/Mapfile/"
        TEMPLATE "C:/global.html"
        METADATA
            ### WMS 
              "wms_title"                "WMS MapFishApp Server"
              "wms_onlineresource"    "http://192.168.0.102/cgi-bin/mapserv.exe?map=C:/Mapfile/MapFishApp.map&"  
              "wms_srs"                "epsg:32188"    
              "wms_format"             "image/png" 
            "wms_include_items"     "all"
            "wms_feature_info_mime_type" "text/html"
              ### WFS 
              "wfs_title"                "WFS MapFishApp Server"
            "wfs_onlineresource"       "http://192.168.0.102/cgi-bin/mapserv.exe?map=C:/Mapfile/MapFishApp.map&?"  ## Recommended
            "wfs_srs"               "epsg:32188"  ## Recommended
        END      
    END
    
    PROJECTION
        "init=epsg:32188"  
    END
    
    OUTPUTFORMAT
    NAME png
    DRIVER "GD/PNG"
    MIMETYPE "image/png"
    IMAGEMODE PC256
    EXTENSION "png"
    FORMATOPTION "INTERLACE=OFF"
    TRANSPARENT OFF
    END
 
 
  ##########
  # LAYERS #
  ##########
  
#############
### Ortho ###
#############


###################
###  Vegetation ###
###################

                    LAYER
                        NAME "Vegetation"
                        status ON
                        METADATA
                            ### WMS 
                            "wms_title"    "Vegetation" 
                            ### WFS 
                            "wfs_title"    "Vegetation" 
                            "gml_featureid" "Id" 
                            "gml_include_items" "all"
                        END
                        PROJECTION
                            "init=epsg:32188"
                        END
                        DUMP TRUE
                        TYPE POLYGON
                        DATA "DATA_NAQ\PROJET\Ceinture-verte\Boise_Project"
                        STATUS ON
                        OPACITY ALPHA
                        TEMPLATE "ttt"
                           CLASS
                               NAME "Vegetation"
                                STYLE 
                                COLOR 112 204 121
                                #OUTLINECOLOR 255 255 255
                                END
                            END
                        

                    
##############
# END LAYERS #
##############
  
  
END

Code:

/*
 * @include OpenLayers/Map.js
 * @include OpenLayers/Projection.js
 * @include OpenLayers/Layer/XYZ.js
 * @include OpenLayers/Tile/Image.js
 * @include OpenLayers/Control/Navigation.js
 * @include OpenLayers/Control/ZoomBox.js
 * @include OpenLayers/Control/NavigationHistory.js
 * @include GeoExt/data/LayerStore.js
 * @include GeoExt/widgets/MapPanel.js
 * @include GeoExt/widgets/Action.js
 * @include GeoExt/widgets/ZoomSlider.js
 * @include GeoExt/widgets/tips/ZoomSliderTip.js
 * @include GeoExt/widgets/tree/LayerContainer.js
 */

Ext.namespace("mapfishapp");

mapfishapp.layout = (function() {
 /*
     * Private
     */

    /**
     * Method: createMap
     * Create the map.
     *
     * Returns:
     * {OpenLayers.Map} The OpenLayers.Map instance.
     */
    var createMap = function() {
        return new OpenLayers.Map({
            projection: new OpenLayers.Projection("EPSG:32188"),
            displayProjection: new OpenLayers.Projection("EPSG:32188"),
            units: "m",
            numZoomLevels: 10,
            maxResolution: 100,
            maxExtent: new OpenLayers.Bounds(317048, 4989050, 387840, 5101030),
            allOverlays: true,
            controls: []
        });
    };

    /**
     * Method: createLayers
     * Create the layers.
     *
     * Returns:
     * {Array({OpenLayers.Layer}) Array of layers.
     */
    var createLayers = function() {
        return [
            new OpenLayers.Layer.WMS(
                "Vegetation",
                "http://192.168.0.102/cgi-bin/mapserv.exe?map=C:/Mapfile/MapFishApp.map&",
                {
                    layers: 'Vegetation',
                    styles: '',
                    srs: 'EPSG:32188',
                    format: 'png',
                    transparent: "true"
                },
                {singleTile: true, ratio: 1, visibility:false, transparent: true} 
            ), 
                              new OpenLayers.Layer.WFS( 
                           "Vegetation", 
                              "http://192.168.0.102/cgi-bin/mapserv.exe?map=C:/Mapfile/MapFishApp.map&", 
                           {typename: 'Vegetation'}, 
                           {extractAttributes: true}
                        );
        ];
    };

    /**
     * Method: createLayerStore
     * Create a GeoExt layer store.
     *
     * Parameters:
     * map - {OpenLayers.Map} The Map instance.
     * layers - {Array({OpenLayers.Layer})} The layers to add to the store.
     *
     * Returns:
     * {GeoExt.data.LayerStore} The layer store.
     *
     */
    var createLayerStore = function(map, layers) {
        return new GeoExt.data.LayerStore({
            map: map,
            layers: layers
        });
    };

    /**
     * Method: createTbarItems
     * Create map toolbar items
     *
     * Returns:
     * {Array({GeoExt.Action})} An array of GeoExt.Action objects.
     */
    var createTbarItems = function(map) {
        var actions = [];
        actions.push(new GeoExt.Action({
            iconCls: "pan",
            map: map,
            pressed: true,
            toggleGroup: "tools",
            allowDepress: false,
            tooltip: "Navigate",
            control: new OpenLayers.Control.Navigation()
        }));
        actions.push(new GeoExt.Action({
            iconCls: "zoomin",
            map: map,
            toggleGroup: "tools",
            allowDepress: false,
            tooltip: "Zoom in",
            control: new OpenLayers.Control.ZoomBox({
                out: false
            })
        }));
        actions.push(new GeoExt.Action({
            iconCls: 'zoomout',
            map: map,
            toggleGroup: 'tools',
            allowDepress: false,
            tooltip: 'Zoom out',
            control: new OpenLayers.Control.ZoomBox({
                out: true
            })
        }));
        var ctrl = new OpenLayers.Control.NavigationHistory();
        map.addControl(ctrl);
        actions.push(new GeoExt.Action({
            control: ctrl.previous,
            iconCls: "back",
            tooltip: "back",
            disabled: true
        }));
        actions.push(new GeoExt.Action({
            control: ctrl.next,
            iconCls: "next",
            tooltip: "next",
            disabled: true
        }));
        actions.push(new GeoExt.Action({
            control: new OpenLayers.Control.ZoomToMaxExtent(),
            iconCls: "zoomfull",
            map: map,
            toggleGroup: 'tools',
            text: "max extent",
            tooltip: "zoom to max extent"
        }));
    
        
        // Affichage de la position du curseur
        map.addControl(new OpenLayers.Control.MousePosition( {
            prefix : "X: ",
            separator: " - Y: ",
            suffix: " m",
            numDigits: 0,
            title : "MousePosition"
        }));

        // Echelle
        map.addControl(new OpenLayers.Control.Scale(null, {
            title: "Scale"
        }));

        // Barre d'échelle
        map.addControl(new OpenLayers.Control.ScaleLine( {
            title: "ScaleLine"
        }));

        return actions;
        

    };
    

    /*
     * Public
     */
    return {

        /**
         * APIMethod: init
         * Initialize the page layout.
         */
        init: function() {
            Ext.QuickTips.init();

            var map = createMap();
            var layers = createLayers();
            var layerStore = createLayerStore(map, layers);
            
            new Ext.Viewport({
                layout: "border",
                items: [{
                    title: "Map",
                    region: "center",
                    xtype: "gx_mappanel",
                    map: map,
                    layers: layerStore,
                    center: new OpenLayers.LonLat(
                        339720, 5037788
                    ),
                    zoom: 20,
                    items: [
                    {
                        xtype: "gx_zoomslider",
                        aggressive: true,
                        vertical: true,
                        height: 100,
                        x: 10,
                        y: 20,
                        plugins: new GeoExt.ZoomSliderTip({
                            template: "Scale: 1 : {scale}<br>Resolution: {resolution}"
                        })
                    }
                    ],
                    tbar: createTbarItems(map)
                },
                {
                    region: "west",
                    title: 'Arborescence',
                        width: 200,
                        border: true,
                        margins: '5 0 0 5',
                        frame: false,
                        split: true,
                        layout: 'fit',
                        collapsible: true,
                        items: [{     
                            xtype: 'layertree',
                            map: map, 
                            showWmsLegend: true,
                            border: false 
                        }]
                }
                ]
                });
        }
    };
})();

J'ai testé avec l'exemple cité plus haut mais cela ne fonctionne pas plus.

Concernant le commentaire de Yves, l'application n'a pour but d'etre accessible par le web mais seulement en intranet.
C'est pour cela que j'utilise simplement l'environnement pylon.
Me conseillez-vous d'utiliser Apache comme vous l'avez supposé?
Dois-je suivre cette procédure? :http://www.mapfish.org/trac/mapfish/wik … rverApache

Dernière modification par NicoDel (Mon 01 March 2010 22:43)

Hors ligne

 

Pied de page des forums

Powered by FluxBB