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é ?

#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

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

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

simon_g
Participant assidu
Lieu: Paris
Date d'inscription: 4 Oct 2006
Messages: 195
Site web

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

 

Pied de page des forums

Powered by FluxBB