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