#1 Tue 24 August 2010 13:15
- soussou126
- Participant occasionnel
- Date d'inscription: 22 May 2010
- Messages: 21
Geoserver GML
bonjour,
j'ai besoin de générer un fichier GML à partir de GeoServer pour l'afficher dans une couche OpenLayer de mon application:
(je veux changer le fichier 'city.gml' par une url qui me renvoie ce fichier)
Code:
var city = new OpenLayers.Layer.GML('city','data/city.gml', { styleMap: new OpenLayers.StyleMap({ 'default' : new OpenLayers.Style({ externalGraphic : 'city-48x48.png' ,pointRadius : 17 }) ,'select' : new OpenLayers.Style({ externalGraphic : 'city-48x48.png' ,pointRadius : 27 }) }) } );
Des suggestions!!
Hors ligne
#2 Tue 24 August 2010 13:58
Re: Geoserver GML
Bonjour,
Remplace 'data/city.gml' par l'url que te donne GeoServer : http://localhost:8080/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sf:bugsites&maxFeatures=50 (un service WFS renvoie un GML par défaut).
Par contre je ne suis pas sur que cela fonctionne aussi simplement. Je pense qu'il vaut mieux utiliser un objet OpenLayers.vector avec le protocole WFS (définie dans les options de l'objet).
http://dev.openlayers.org/releases/Open … tocol.html (voir les sources de la page).
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
#3 Wed 25 August 2010 11:13
- soussou126
- Participant occasionnel
- Date d'inscription: 22 May 2010
- Messages: 21
Re: Geoserver GML
Merci Yves pour ta réponse,
en fait j'ai besoin d'un peu d'aide:
j'ai une form qui me permet de faire une recherche dans ma base de données (un champs texte ou je saisie le nom d'un ville et un bouton submit qui m'affiche des point sur ma map représentant les villes correspondantes au nom entré)
le problème et le suivant: je veux afficher des informations (à partir de ma base de données ou de Geoserver) en cliquant sur l'un des points afficher dans la map dans un popup!!
le code de ma form est le suivant:
Code:
var mapPanel, store, gridPanel, mainPanel, formPanel, vecLayer, map; function setStore (param) { store = new GeoExt.data.FeatureStore({ layer : vecLayer, fields : [{ name : 'name', type : 'string' }, { name : 'population', type : 'string' }], proxy : new GeoExt.data.ProtocolProxy({ protocol : new OpenLayers.Protocol.HTTP({ url : "../../world_cities/find?name=%"+param+"%", format : new OpenLayers.Format.GeoJSON({ internalProjection : map.projection, externalProjection : map.displayProjection }) }) }), autoLoad : true }); } Ext.onReady(function() { // create map instance map = new OpenLayers.Map(); var wmsLayer = new OpenLayers.Layer.WMS("vmap0", "http://labs.metacarta.com/wms/vmap0", { layers : 'basic' }); var wmsLayer2 = new OpenLayers.Layer.WMS("world_cities", "http://192.192.2.33:8080/geoserver/wms", { layers : 'world_cities', format : 'image/png' }); // create vector layer vecLayer = new OpenLayers.Layer.Vector("vector"); map.addLayers([wmsLayer, wmsLayer2, vecLayer]); // create map panel mapPanel = new GeoExt.MapPanel({ title : "Map", region : "center", height : 400, width : 600, map : map, center : new OpenLayers.LonLat(0, 0), zoom : 2 }); // create feature store, binding it to the vector layer store = new GeoExt.data.FeatureStore({ fields : [{ name : 'name', type : 'string' }, { name : 'population', type : 'string' }] }); /*new GeoExt.data.FeatureStore({ layer : vecLayer, fields : [{ name : 'name', type : 'string' }, { name : 'population', type : 'string' }], proxy : new GeoExt.data.ProtocolProxy({ protocol : new OpenLayers.Protocol.HTTP({ // url: // "mfbase/geoext/examples/data/world_cities.json", url : "../../world_cities", params : { limit : 10//Ext.getCmp("place").getValue() }, format : new OpenLayers.Format.GeoJSON({ internalProjection : map.projection, externalProjection : map.displayProjection }) }) }), autoLoad : true });*/ // create grid panel configured with feature store gridPanel = new Ext.grid.GridPanel({ title : "Feature Grid", region : "south", store : store, ds: store, width : 200, height : 200, columns : [{ header : "Name", width : 200, dataIndex : "name" }, { header : "Population", width : 100, dataIndex : "population" }], sm : new GeoExt.grid.FeatureSelectionModel() }); // create form panel formPanel = new Ext.form.FormPanel({ standardSubmit : true, id : 'myFormPanel', region : "center", frame : true, title : 'Register', defaultType : 'textfield', items : [{ fieldLabel : 'A Place', id : 'place', name : 'place', allowBlank : false }], buttons : [{ text : 'Submit', handler : function() { setStore(Ext.getCmp("place").getValue()); }, scope : store }] }); ER = { region : 'east', title : ' ', width : 300, collapsible : true, collapsed : false, margins : '0 0 0 5', defaults : { border : true, frame : true }, layout : 'border', items : [formPanel, gridPanel] } // create a panel and add the map panel and grid panel // inside it map.addControl(new OpenLayers.Control.LayerSwitcher()); mainPanel = new Ext.Panel({ renderTo : "mainpanel", layout : "border", height : 600, width : 920, items : [mapPanel, ER] // items : [mapPanel, gridPanel] }); });
j'ai essayé de rajouter le code suivant:
Code:
var info = new OpenLayers.Control.WMSGetFeatureInfo({ url: 'http://192.192.2.33/geoserver/wms', title: 'Identify features by clicking', queryVisible: true, eventListeners: { getfeatureinfo: function(event) { map.addPopup(new OpenLayers.Popup.FramedCloud( "chicken", map.getLonLatFromPixel(event.xy), null, event.text, null, true )); } } }); map.addControl(info); info.activate();
mais rien ne s'affiche
j'ai essayé une 2ième solution:
Code:
var vecLayer= new OpenLayers.Layer.GML('city','data/city.gml', { styleMap: new OpenLayers.StyleMap({ 'default' : new OpenLayers.Style({ externalGraphic : 'city-48x48.png' ,pointRadius : 17 }) ,'select' : new OpenLayers.Style({ externalGraphic : 'city-48x48.png' ,pointRadius : 27 }) }) } ); vecLayer.events.on({ featureselected: function(e) { alert('events.on'); if(typeof(popup) != "undefined"){ popup.destroy(); } var content = "<b>"+e.feature.attributes.Name+"</b><br /> Lon : "+e.feature.attributes.Longitude+"<br /> Lat : "+e.feature.attributes.Latitude; popup = new GeoExt.Popup({ title : 'City' ,feature : e.feature ,width : 200 ,html : content ,collapsible: true ,anchored : true }); popup.show(); } });
ça marche très bien avec un fichier
data/city.gml
qui j'ai trouver avec l'exemple que j'ai suivie
par contre, lorsque je le remplace par une url ça ne marche plus!! et si j'enregistre le fichier généré par cette url et le passe dans les paramètres j'ai une erreur javascript :
mal formé
pourrais tu m'aider, j'ai l'impression que je bloque sur un truc débile!!!
Hors ligne
#4 Wed 25 August 2010 12:15
Re: Geoserver GML
ca semble clair : ton fichier gml généré est mal formé!
Tu peux passer ton fichier au validateur gml : http://cite.opengeospatial.org/test_eng … validator/
Hors ligne