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 13 July 2010 10:02

manumanu
Participant occasionnel
Date d'inscription: 7 May 2010
Messages: 11

Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour à tous,

je suis un néo-développeur en train de monter une application carto sur le web en html/JS

je rencontre un problème dans mon code: les données vecteur ne s'affichent pas...j'ai bien mon tableau (gridpanel) dont les en-têtes de colonne s'affichent, mais pas les données...elles ne sont pas non plus placées sur la carte... auriez-vous une solution à ce problème?

merci d'avance, et super site au passage, ça donne envie de continuer à coder!

ci-dessous le code JS:

Code:

Ext.apply(Ext.form.VTypes, {
    daterange : function(val, field) {
        var date = field.parseDate(val);

        if(!date){
            return;
        }
        if (field.startDateField && (!this.dateRangeMax || (date.getTime() != this.dateRangeMax.getTime()))) {
            var start = Ext.getCmp(field.startDateField);
            start.setMaxValue(date);
            start.validate();
            this.dateRangeMax = date;
        } 
        else if (field.endDateField && (!this.dateRangeMin || (date.getTime() != this.dateRangeMin.getTime()))) {
            var end = Ext.getCmp(field.endDateField);
            end.setMinValue(date);
            end.validate();
            this.dateRangeMin = date;
        }
        /*
         * Always return true since we're only using this vtype to set the
         * min/max allowed values (these are tested for after the vtype test)
         */
        return true;
    }
});

// Parmètres d'affichage de la carte
// var lon=2
// var lat=47
// var zoom=5

// Une fois le chargement effectué...
Ext.onReady(function() {

// ----------------------------- OpenLayers -----------------------------------------------

    OpenLayers.Lang.code="fr";
    
    // Nouvel objet Map
    var map = new OpenLayers.Map( 'map', optionsMap );
    
    // Options de la carte
    var optionsMap = {
        projection: new OpenLayers.Projection("EPSG:900913"),
        displayProjection: new OpenLayers.Projection("EPSG:4326"),
        units: "m",
    };
    
    // Couche Google Physical
    var gphy = new OpenLayers.Layer.Google(
        "Google Physical",
        {type: G_PHYSICAL_MAP}
    );
    
    // Couche Google Hybrid
    var ghyb = new OpenLayers.Layer.Google(
        "Google Hybrid",
        {type: G_HYBRID_MAP}
    );
    
    // Couche Google Satellite
    var gsat = new OpenLayers.Layer.Google(
        "Google Satellite",
        {type: G_SATELLITE_MAP}
    );

    // Couche Google Street
    var gmap = new OpenLayers.Layer.Google(
        "Google Streets",
        {type: G_NORMAL_MAP}
    );
    
    // Creation d'une couche vecteur
    var vecLayer = new OpenLayers.Layer.Vector("vector",
        {
            projection: new OpenLayers.Projection("EPSG:4326"), 
            displayProjection: new OpenLayers.Projection("EPSG:4326")
        }
    );
    
    // Ajout des couches raster à la carte
    map.addLayers([gsat, gphy, ghyb, gmap, vecLayer]);
    
// -------------------------------------------------------------------------------------------

    // Nouvel objet Panel
    var panel = new OpenLayers.Control.Panel({defaultControl: pan});
    
    // Nouveau control Pan
    var pan = new OpenLayers.Control.MouseDefaults({title:"Déplacement"});
    
    // Historique de navigation
    nav = new OpenLayers.Control.NavigationHistory();
    map.addControl(nav);
    
    // Gestionnaire de couches
    map.addControl(new OpenLayers.Control.LayerSwitcher());
    
    // Le cadre acceuillant les differents controls
    panel.addControls([
        pan,
        new OpenLayers.Control.ZoomBox({title:"Zoom +"}),
        nav.next,nav.previous,
        new OpenLayers.Control.ScaleLine(),
        new OpenLayers.Control.Permalink('permalink'),
        new OpenLayers.Control.MousePosition(),
        new OpenLayers.Control.Navigation()
    ]);
    
    // Ajout des controls à la carte
    map.addControl(panel);
    
// --------------------- GeoExt --------------------------------------------------------
    var mapUI = new GeoExt.MapPanel({
        region : 'center',
        title: 'A Simple GeoExt Map',
        center: new OpenLayers.LonLat(2, 47),
        zoom: 5,
        map: map
    }); 
    
    // Creation du bloc de données pour la "grid"
    var store = new GeoExt.data.FeatureStore({
        layer: vecLayer,
        fields: [
            {name: 'code_capta', type: 'integer'},
            {name: 'Departemen', type: 'integer'},
            {name: 'Molecule', type: 'string'},
            {name: 'Commune', type: 'string'},
            {name: 'Point_X', type: 'integer'},
            {name: 'Point_Y', type: 'integer'}    
        ],
        proxy: new GeoExt.data.ProtocolProxy({
            protocol: new OpenLayers.Protocol.HTTP({
                url: "http://manu.thiebaut4.free.fr/data/captage_wgs84.geojson",
                format: new OpenLayers.Format.GeoJSON(),
            })
        }),
        autoLoad: true
    });

    // Création de la "grid" configurée à partir du "store"
    var gridPanel = new Ext.grid.GridPanel({
        store: store,
        region: 'east',
        title: 'Observations',
        width: '30%', 
        split: true,
        columns: [{
            header: "Code",
            dataIndex: "code_capta",
            sortable:true
        }, {
            header: "Département",
            dataIndex: "Departemen",
            sortable:true
        }, {
            header: "Molécule Active",
            dataIndex: "Molecule",
            sortable:true
        }, {
            header: "Commune",
            dataIndex: "Commune",
            sortable:true
        }, {
            header: "Coordonnée X",
            dataIndex: "Point_X",
            sortable:true
        }, {
            header: "Coordonnée Y",
            dataIndex: "Point_Y",
            sortable:true
        }],
        sm: new GeoExt.grid.FeatureSelectionModel() 
    });
    
    // Viewport
    new Ext.Viewport({
        layout: "border",
        items: [mapUI, gridPanel]
    });   

});

Hors ligne

 

#2 Tue 13 July 2010 10:51

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

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour,

As tu pensé à utiliser Firebug pour voir s'il n'y a pas d'erreur ?

http://georezo.net/wiki/main:logiciels: … rs:firebug

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 Tue 13 July 2010 11:31

manumanu
Participant occasionnel
Date d'inscription: 7 May 2010
Messages: 11

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Merci Yves! je viens de l'installer


par contre la console m'affiche ça:

GET http://manu.thiebaut4.free.fr/data/captage_wgs84.gml  200OK  x  379ms                                                OpenLayers.js(ligne 1081)


je ne sais pas ce que ça veut dire, j'imagine bien que l'appel (méthode GET) fonctionne, mais pourquoi alors ne m'affiche-t-il rien?

Dernière modification par manumanu (Tue 13 July 2010 11:53)

Hors ligne

 

#4 Tue 13 July 2010 14:37

mdelsinne
Invité

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Il faut que tu es ça pour ta couche kml ou gml :

var kml= new OpenLayers.Layer.GML(
    nom_de_la_couche,
    "accès_au_fichier.kml",
    options_kml
);

 

#5 Thu 15 July 2010 12:14

manumanu
Participant occasionnel
Date d'inscription: 7 May 2010
Messages: 11

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

je reviens à la charge pour ce problème que j'essaie tant bien que mal de résoudre...

le problème de SOP je pense pas, j'ai essayé en mettant la même adresse et ça ne fonctionnait pas non plus...

désormais, en ne conservant que le strict nécessaire, j'arrive au code suivant:

Code:

var mapPanel, store, gridPanel, mainPanel;

Ext.onReady(function() {

    
    // Couche Google Physical
    var map = new OpenLayers.Map();
    var gphy = new OpenLayers.Layer.Google(
        "Google Physical",
        {type: G_PHYSICAL_MAP},
        {layers: 'basic'}
    );

    // create vector layer
    var vecLayer = new OpenLayers.Layer.Vector("vector", "manu.thiebaut4.free.fr/data/captage_wgs84");
    map.addLayers([gphy, vecLayer]);

    // create map panel
    mapPanel = new GeoExt.MapPanel({
        title: "Map",
        region: "center",
        height: 400,
        width: 600,
        map: map,
        center: new OpenLayers.LonLat(5, 45),
        zoom: 6
    });
 
    // create feature store, binding it to the vector layer
    store = new GeoExt.data.FeatureStore({
        layer: vecLayer,
        fields: [
            {name: 'code_capta', type: 'string'},
            {name: 'Departemen', type: 'float'},
            {name: 'Molecule', type: 'float'},
            {name: 'Commune', type: 'float'},
            {name: 'Point_X', type: 'float'},
            {name: 'Point_Y', type: 'float'}
        ],
        proxy: new GeoExt.data.ProtocolProxy({
            protocol: new OpenLayers.Protocol.HTTP({
                url: "http://manu.thiebaut4.free.fr/data/captage_wgs84",
                format: new OpenLayers.Format.GeoJSON()
            })
        }),
        autoLoad: true
    });

    // create grid panel configured with feature store
    gridPanel = new Ext.grid.GridPanel({
        title: "Feature Grid",
        region: "east",
        store: store,
        width: 320,
        columns: [{
            header: "Code captage",
            width: 200,
            dataIndex: "code_capta"
        }, {
            header: "Département",
            width: 100,
            dataIndex: "Departemen"
        }, {
            header: "Molécule",
            width: 100,
            dataIndex: "Molecule"
        }, {
            header: "Commune",
            width: 100,
            dataIndex: "Commune"
        }, {
            header: "Coordonnée X",
            width: 100,
            dataIndex: "Point_X"
        }, {
            header: "Coordonnée Y",
            width: 100,
            dataIndex: "Point_Y"
        }],
        sm: new GeoExt.grid.FeatureSelectionModel() 
    });

    // create a panel and add the map panel and grid panel
    // inside it
    mainPanel = new Ext.Panel({
        renderTo: "mainpanel",
        layout: "border",
        height: 400,
        width: 920,
        items: [mapPanel, gridPanel]
    });
});

qui m'affiche la page toujours visible à cette adresse: http://sce.alwaysdata.net/

au cas où, la commande qui a généré mon geojson, même si le contenu est correct, p-e un oubli de ma part:
ogr2ogr -f "GeoJSON" captage_wgs84.geojson captage_wgs84.shp

voili-voilou, moi je sèche depuis un moment déjà...

Hors ligne

 

#6 Thu 15 July 2010 13:15

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

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour,

Normal :

Access to restricted URI denied" code: "1012


Il faut mettre tous les scripts, données, code HTML sur le même serveur ou bine mettre en place un proxy pour la couche vecteur.

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

 

#7 Thu 15 July 2010 13:17

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

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

autre info :

Code:

var vecLayer = new OpenLayers.Layer.Vector("vector", "manu.thiebaut4.free.fr/data/captage_wgs84");

je ne sais pas si l'absence du protocole dans l'url peut poser problème.

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

 

#8 Mon 16 August 2010 14:35

manumanu
Participant occasionnel
Date d'inscription: 7 May 2010
Messages: 11

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour,

j'ai réussi à afficher mes données vecteur, cependant il reste toujours un soucis au niveau du placement de mes points...

selon vous, est-ce que mon paramétrage de map est bon?
voilà les parties concernées, dans mon code:

Code:

var mapPanel, store, gridPanel, viewport;

// Initialisation
Ext.onReady(function() {
    
    // Langue francaise
    OpenLayers.Lang.code="fr";
    
    // New Map Object
    var map = new OpenLayers.Map('map', optionsMap);
    
    // Map Options
    var optionsMap = {
        projection: new OpenLayers.Projection("EPSG:900913"),
        displayProjection: new OpenLayers.Projection("EPSG:4326"),
        units: "m",
    };

    // Google Physical Layer
    var gphy = new OpenLayers.Layer.Google(
        "Google Physical",
        {type: G_PHYSICAL_MAP}
    );

    // Google Hybrid Layer
    var ghyb = new OpenLayers.Layer.Google(
        "Google Hybrid",
        {type: G_HYBRID_MAP}
    );
    
    // Google Satellite Layer
    var gsat = new OpenLayers.Layer.Google(
        "Google Satellite",
        {type: G_SATELLITE_MAP}
    );

    // Google Street Layer
    var gmap = new OpenLayers.Layer.Google(
        "Google Streets",
        {type: G_NORMAL_MAP}
    );
    
    // WFS Layer    
    layer_captage = new OpenLayers.Layer.WFS(
        "Captages d'Alimentation en Eau Potable",
        "/captage/filter/kml/" + critere_selection + "/",
            {
            }, {
                'projection': new OpenLayers.Projection("EPSG:4326"),
                'format': OpenLayers.Format.KML,
                'formatOptions': { extractAttributes: true }
            } );
            
    
    // Add Layers to Map
    map.addLayers([gphy, gsat, gmap, ghyb, layer_captage]);
    map.setBaseLayer(gphy);
    
    
    // Create Map Panel
    mapPanel = new GeoExt.MapPanel({
        title: "Map",
        region: "center",
        map: map,
        center: new OpenLayers.LonLat(2, 47),
        zoom: 5
    });
 
    // Create feature store, binding it to the vector layer
    store = new GeoExt.data.FeatureStore({
        layer: layer_captage,
        fields: [
            {name: 'code_capta', type: 'string'},
            {name: 'departemen', type: 'string'},
            {name: 'molecule', type: 'string'},
            {name: 'commune', type: 'string'}
        ],
        proxy: new GeoExt.data.ProtocolProxy({
            protocol: new OpenLayers.Protocol.HTTP({
                url: "/captage/filter/kml/" + critere_selection + "/",
                format: new OpenLayers.Format.KML({
                })
            })
        }),
        autoLoad: true
    });
});

merci beaucoup pour l'aide apportée!

Hors ligne

 

#9 Mon 16 August 2010 23:39

BenoitFr
Juste Inscrit !
Lieu: Issy-les-Moulineaux
Date d'inscription: 24 Mar 2008
Messages: 6

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

C'est quoi exactement ton problème de placement des points?
Il s'affiche, mais sont décalés par rapport à leur position normale? Ou alors tous placé au point (0'0)? Ou autre chose?

Y a des chances que cela vienne de la définition de la projection de ta couche WFS. La projection GoogleMaps c'est EPSG:4326, mais il y a de forte chance que les coordonnes de tes points ne soient pas dans cette même projection. Donc essaye d'utiliser 'internalprojection' et 'externalprojection'.

Hors ligne

 

#10 Tue 17 August 2010 09:45

manumanu
Participant occasionnel
Date d'inscription: 7 May 2010
Messages: 11

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Salut Benoît,

ouais le problème c'est qu'ils s'affichent, mais sont décalés par rapport à leur position normale...
je pensais déjà à la projection de la couche qui devait être différente de celle de la map...
merci pour ton conseil, je suis en train de tester deux trois choses!

*****EDIT*****

juste pour info EPSG:4326 c'est pour les coordonnées en WGS84 et non pas Google Maps (EPSG:900913)

donc normalement je dois déclarer ma map:
    projection: new OpenLayers.Projection ('EPSG:900913'),
    displayProjection: new OpenLayers.Projection ('EPSG:4326')

et pour mon layer:
    projection: new OpenLayers.Projection ('EPSG:4326')

==> sauf que chez moi ça ne marche pas...  sad

Dernière modification par manumanu (Tue 17 August 2010 17:44)

Hors ligne

 

#11 Wed 18 August 2010 07:07

BenoitFr
Juste Inscrit !
Lieu: Issy-les-Moulineaux
Date d'inscription: 24 Mar 2008
Messages: 6

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Ouais c'est vrai 4326 c'est WGS 84 et pas Google.
Je sais qu'on avait aussi eu des problèmes mais je crois qu'on avait contourné le problème en reprojetant les points avec PostGis.

Sinon essaie de t'aider de cet exemple du site d'Openlayers :
http://dev.openlayers.org/releases/Open … ection.htm

Ou sinon essaie de voir sur cette page http://docs.openlayers.org/library/sphe … cator.html
Ca m'a aidé, mais dans mon cas mes points ne venait pas d'un WFS.

J'espère que ces deux liens pourrons t'aider, si tu ne les connaissais pas déjà.

Hors ligne

 

#12 Thu 19 August 2010 15:19

manumanu
Participant occasionnel
Date d'inscription: 7 May 2010
Messages: 11

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

au fait, dans ton cas, tes points venaient de quoi si ce n'était pas un wfs?

je crois que je vais me tourner vers la solution proj4JS...

Hors ligne

 

#13 Thu 19 August 2010 15:27

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

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour,

Pour reprojeter des données au sein de la lib OpenLayers tu dois inclure la lib proj4js car ol s'en sert.

Y.
PS : je déplace le fil sur geolibre_web plus à sa place. Merci.


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

 

#14 Fri 20 August 2010 06:29

BenoitFr
Juste Inscrit !
Lieu: Issy-les-Moulineaux
Date d'inscription: 24 Mar 2008
Messages: 6

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

manumanu a écrit:

au fait, dans ton cas, tes points venaient de quoi si ce n'était pas un wfs?

je crois que je vais me tourner vers la solution proj4JS...


Comme mes objets sont des points, peu nombreux, que leurs positions ne changent pas et que leur nombre est fixe, on a décidé de stocker leur coordonnés dans 2 champs  de la base de données. Ainsi au chargement de la page, plusieurs requêtes se font sur la BDD et mon code Php retourne une variable GeoJson. Et donc après dans mon application je peux directement accéder à cette variable et représenter mes points sur la carte.

Par contre, ce qui est bizarre c'est que je dois reprojeter mes points, comme toi du WGS84 à Google Mercator, mais je n'ai pas eu besoin de Proj4. J'utilise juste ça :

var format = new OpenLayers.Format.GeoJSON({
  'internalProjection': new OpenLayers.Projection("EPSG:900913"),
  'externalProjection': new OpenLayers.Projection("EPSG:4326")
});

Mais par contre maintenant je dois également afficher des polygones, donc ca va être par WFS.

Hors ligne

 

#15 Tue 24 August 2010 18:39

BenoitFr
Juste Inscrit !
Lieu: Issy-les-Moulineaux
Date d'inscription: 24 Mar 2008
Messages: 6

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Finalement pour afficher mes polygones je ne passe pas par du WFS. Comme on ne change pas une équipe qui gagne, j'ai stocké mes polys en GéoJson. Mais dans ce cas c'est un fichier .geojson qui sera mis sur le serveur et non plus  une variable créée par du code Php.

J'utilise ce code

Code:

vecReg = new OpenLayers.Layer.GML( "Régions", "../fichier/js/reg10.geojson",{
    format: OpenLayers.Format.GeoJSON,
    projection: new OpenLayers.Projection("EPSG:900913")
});

Cela ressemble un peu à ton code pour définir ton WFS. Et comme toi au début j'avais mis projection: new OpenLayers.Projection("EPSG:4326") et ca ne marchais pas.
Et quand tu regarde la doc d' openlayers (http://dev.openlayers.org/releases/Open … er-js.html), pour le parametre projection, d'après ce que j'a compris il faut mettre la projection dans laquelle on souhaite afficher la couche.

J'ai donc mis 900913 pour la projection et cela affiche bien mes polys et au bon endroit.

Donc voila je sais pas si tu as déjà essayé cela, remplace donc 4326 par 900913 dans ton paramètre projection de ta définition de ton WFS.

Hors ligne

 

#16 Wed 25 August 2010 16:49

manumanu
Participant occasionnel
Date d'inscription: 7 May 2010
Messages: 11

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

bon bah j'ai pas trouvé...je crois que ça va être dur a la soutenance d'expliquer pourquoi mes points apparaissent dans la mer...

j'aimerais bien jeter un oeil sur ton code benoit, du moins pour voir les paramètres de ta carte et si tu gardes aussi le paramètre sphericalMercator: true pour tes couches google...

je laisse mon code, au cas où quelqu'un trouverait une solution...

Code:

var critere_selection = "tout"
var layer_captage;

Ext.apply(Ext.form.VTypes, {
    daterange : function(val, field) {
        var date = field.parseDate(val);

        if(!date){
            return;
        }
        if (field.startDateField && (!this.dateRangeMax || (date.getTime() != this.dateRangeMax.getTime()))) {
            var start = Ext.getCmp(field.startDateField);
            start.setMaxValue(date);
            start.validate();
            this.dateRangeMax = date;
        } 
        else if (field.endDateField && (!this.dateRangeMin || (date.getTime() != this.dateRangeMin.getTime()))) {
            var end = Ext.getCmp(field.endDateField);
            end.setMinValue(date);
            end.validate();
            this.dateRangeMin = date;
        }
        /*
         * Always return true since we're only using this vtype to set the
         * min/max allowed values (these are tested for after the vtype test)
         */
        return true;
    }
});

var mapPanel, store, gridPanel, viewport;

// Initialisation
Ext.onReady(function() {
    
    // Langue francaise
    OpenLayers.Lang.code="fr";
    
    // New Map Object
    var map = new OpenLayers.Map('map', optionsMap);
    
    // Map Options
    var optionsMap = {
        projection: new OpenLayers.Projection("EPSG:900913"),
        units: "m",
        numZoomLevels: 18,
        maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34)
    };

    // Google Physical Layer
    var gphy = new OpenLayers.Layer.Google(
        "Google Physical",
        {type: G_PHYSICAL_MAP}
    );

    // Google Hybrid Layer
    var ghyb = new OpenLayers.Layer.Google(
        "Google Hybrid",
        {type: G_HYBRID_MAP}
    );
    
    // Google Satellite Layer
    var gsat = new OpenLayers.Layer.Google(
        "Google Satellite",
        {type: G_SATELLITE_MAP}
    );

    // Google Street Layer
    var gmap = new OpenLayers.Layer.Google(
        "Google Streets",
        {type: G_NORMAL_MAP}
    );
    
    // WFS Layer    
    layer_captage = new OpenLayers.Layer.GML(
        "Captages d'Alimentation en Eau Potable",
        "/captage/filter/kml/" + critere_selection + "/",
            {
                'projection': new OpenLayers.Projection("EPSG:4326"),
                'format': OpenLayers.Format.KML,
                'formatOptions': { extractAttributes: true }
            } 
    );

    // Couche dessin
    vlayer = new OpenLayers.Layer.Vector("Editable");
    
    // Ajout de la barre d'outil dessin
    var editable = new OpenLayers.Control.EditingToolbar(vlayer, {div: document.getElementById("editable")});
    map.addLayer(vlayer);
    map.addControl(editable);

    // Add Layers to Map
    map.addLayers([gphy, gsat, gmap, ghyb]);
    map.addLayer(layer_captage);
    map.setBaseLayer(gphy);
    
    // -------------------------------------------------------------------------------------------

    // Layer Switcher
    map.addControl(new OpenLayers.Control.LayerSwitcher());
    
    // New Pan Control 
    var pan = new OpenLayers.Control.MouseDefaults({title:"Déplacement"});
    
    // Historique de navigation
    var nav = new OpenLayers.Control.NavigationHistory();
    map.addControl(nav);
    
    // New Panel Objet 
    var panel = new OpenLayers.Control.Panel({defaultControl: pan});
    
    // Panel & Controls
    panel.addControls([
        pan,
        new OpenLayers.Control.ZoomBox({title:"Zoom +"}),
        nav.next,nav.previous,
        new OpenLayers.Control.ScaleLine(),
        new OpenLayers.Control.Permalink('permalink'),
        new OpenLayers.Control.MousePosition(),
        new OpenLayers.Control.Navigation(),
        new OpenLayers.Control.PanZoomBar()
    ]);
    
    // Add Panel to Map
    map.addControl(panel);
    
    // -------------------------------------------------------------------------------------------
    
    // Create Map Panel
    
    mapPanel = new GeoExt.MapPanel({
        title: "Map Panel",
        region: "center",
        width: '50%',
        split: true,
        map: map,
        center: new OpenLayers.LonLat(2, 47),
        zoom: 5
    });
 
    // Create feature store, binding it to the vector layer
    store = new GeoExt.data.FeatureStore({
        layer: layer_captage,
        fields: [
            {name: 'code_capta', type: 'string'},
            {name: 'departemen', type: 'string'},
            {name: 'molecule', type: 'string'},
            {name: 'commune', type: 'string'}
        ],
        proxy: new GeoExt.data.ProtocolProxy({
            protocol: new OpenLayers.Protocol.HTTP({
                url: "/captage/filter/kml/" + critere_selection + "/",
                format: new OpenLayers.Format.KML({
                })
            })
        }),
        autoLoad: true
    });

    // Create grid panel configured with feature store
    gridPanel = new Ext.grid.GridPanel({
        title: "Feature Grid",
        region: "east",
        store: store,
        width: "40.5%",
        columns: [{
            header: "Code captage",
            sortable:true,
            dataIndex: "code_capta",
            width: 100
        }, {
            header: "Département",
            sortable:true,
            dataIndex: "departemen",
            width: 80
        }, {
            header: "Molécule",
            sortable:true,
            dataIndex: "molecule",
            width: 60
        }, {
            header: "Commune",
            sortable:true,
            dataIndex: "commune",
            width: 150
        }],
        sm: new GeoExt.grid.FeatureSelectionModel() 
    });
    
    // EnTete
    var header = new Ext.Panel({
        frame: true,
        height: 40,
        region: 'north',
        items: [document.getElementById("header")]
    });

    // Le viewport regroupant l'ensemble des objets
    viewport = new Ext.Viewport({
        layout: 'border',
        height: 400,
        width: 920,
        items: [mapPanel, gridPanel, header]
    });
});

Dernière modification par manumanu (Wed 25 August 2010 16:53)

Hors ligne

 

#17 Wed 25 August 2010 17:33

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

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour,

Dans le mer mais où exactement ? As tu une url public pour visualiser cela ?

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

 

#18 Wed 25 August 2010 18:08

manumanu
Participant occasionnel
Date d'inscription: 7 May 2010
Messages: 11

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

http://sce.alwaysdata.net/

à l'ouest de l'afrique...

et si j'enlève l'option sphericalMercator:true, mes points s'affichent sur le Nord de la France...

Dernière modification par manumanu (Wed 25 August 2010 18:10)

Hors ligne

 

#19 Wed 25 August 2010 18:31

BenoitFr
Juste Inscrit !
Lieu: Issy-les-Moulineaux
Date d'inscription: 24 Mar 2008
Messages: 6

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Tes points sont affichés aux coordonnés pratiquement (0,0) car il considère tes points comme étant projeté en Google Mercator et donc en mètre. Ainsi si tuas un point en WGS84 qui a pour longitude 5°  et pour latitude 45°, il va etre placé à 5 mètre à l'Est et 45 mètre au Nord du point (0,0). Du moins c'est ce que je crois comprendre.

Donc laisse sphericalMercator, mais as tu essayé comme je te l'ai dit de changer 4326 par 900913 dans la definition de la projection de ta couche WFS. Ça donnerais donc cela

Code:

    // WFS Layer    
    layer_captage = new OpenLayers.Layer.GML(
        "Captages d'Alimentation en Eau Potable",
        "/captage/filter/kml/" + critere_selection + "/",
            {
                'projection': new OpenLayers.Projection("EPSG:900913"),
                'format': OpenLayers.Format.KML,
                'formatOptions': { extractAttributes: true }
            } 
    );

Sinon voila une partie de mon code, ce qui concerne la définition de la carte et de mes couches vectorielles. Si tu veux je t'envoye tout mon code par mail.

Code:

// Options de la carte
var optionsMap = {
    //Enlève tout les controles présents par défaut    
    controls:[],
    projection:  new OpenLayers.Projection("EPSG:900913"),
    //Unité de la carte, le mètre
    units: 'm',    
    //Définition de l'extent maximal comme étant le Québec    
    maxExtent: bbox,    
    //Empeche le pan en dehors du Québec
    restrictedExtent: bbox,        
    //Événements liés à la carte
    eventListeners: {
        //Au changement de fond cartographique on appele la fonction chgtBase
        "changebaselayer": chgtBase,    
        //À la fin d'un mouvement de la carte, on appele la fonction finMvtCarte
        "moveend" : finMvtCarte,
        //À la fin d'un zoom sur la carte, on appele la fonction finZoomCarte
        "zoomend" : finZoomCarte            
    }
};
    
//Creation de la couche des regions
vecReg = new OpenLayers.Layer.Vector( "Régions",{
    //Définition du style de la couche
    styleMap: new OpenLayers.StyleMap({
        //Application du style défini au-dessus
        'default': stylereg,
        //Lors de la sélection juste l'opacité change
        'select': {fillOpacity: 0.65}
    }),
    //Charge tout les polygones une seul fois au début
    strategies: [new OpenLayers.Strategy.Fixed()],
    //Pour allert lire le fichier GeoJSon où sont stockés nos polygones
    protocol: new OpenLayers.Protocol.HTTP({
        url: "../fichier/js/reg10.geojson",
        format: new OpenLayers.Format.GeoJSON
    }),
    //On ne veut pas que cette couche soit affichée dans le sélectionneur de couche
    displayInLayerSwitcher: false
});
//Ajout de la couche des régions à la carte
map.addLayer(vecReg);

//Creation de la couche des communautés
vectors = new OpenLayers.Layer.Vector("Communautés",{
    //Application des styles
    styleMap: new OpenLayers.StyleMap({
        'default': monStyle,
        //Lors de la sélection juste la couleur change
        'select': {fillColor: "rgb(0,250,0)"}
    }),
    //On ne veut pas que cette couche soit affichée dans le sélectionneur de couche
    displayInLayerSwitcher: false
});
                
//Nos points sont stockés dqns une variable GeoJSON, en coordonnées WGS 84 (4326) et seront affichées en cooordonnées GoogleMercator (900913)
var format = new OpenLayers.Format.GeoJSON({
    'internalProjection': new OpenLayers.Projection("EPSG:900913"),
    'externalProjection': new OpenLayers.Projection("EPSG:4326")
});
            
//Ajout des points présent dans 'communautes' (var GeoJSON) à la nouvelle variable 'features'
features = format.read(communautes);

//Ajout des elements de 'features' à la couche
vectors.addFeatures(features);

Et sinon tu as dans mon précédent message une autre façon que j'avais utilisée pour afficher mes régions.

Dernière modification par BenoitFr (Wed 25 August 2010 20:08)

Hors ligne

 

#20 Tue 07 June 2011 13:57

lagnomance
Juste Inscrit !
Lieu: Dakar
Date d'inscription: 20 May 2011
Messages: 8

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour benoitFR,
j'ai suivi tes intervention sur le problème de manumanu,je souhaiterais avoir de l'aide.mon soucis est le suivant je suis entrain de mettre en place une carto web avec fond de carte openstreetmap,j'utilise openlayer coté java script,j'ai numérisé des polygones sous arcgis dans un fichier shp et j'ai importé ce fichier dans ma base de données postgis ce que je souhaiterais faire c'est d'afficher mes polygones via openlayer sur openstreetmap.toutes mes données sont dans ma base de données postgis!comment les affichés via openlayers sur openstreetmap?
merci


BenoitFr a écrit:

Tes points sont affichés aux coordonnés pratiquement (0,0) car il considère tes points comme étant projeté en Google Mercator et donc en mètre. Ainsi si tuas un point en WGS84 qui a pour longitude 5°  et pour latitude 45°, il va etre placé à 5 mètre à l'Est et 45 mètre au Nord du point (0,0). Du moins c'est ce que je crois comprendre.

Donc laisse sphericalMercator, mais as tu essayé comme je te l'ai dit de changer 4326 par 900913 dans la definition de la projection de ta couche WFS. Ça donnerais donc cela

Code:

    // WFS Layer    
    layer_captage = new OpenLayers.Layer.GML(
        "Captages d'Alimentation en Eau Potable",
        "/captage/filter/kml/" + critere_selection + "/",
            {
                'projection': new OpenLayers.Projection("EPSG:900913"),
                'format': OpenLayers.Format.KML,
                'formatOptions': { extractAttributes: true }
            } 
    );

Sinon voila une partie de mon code, ce qui concerne la définition de la carte et de mes couches vectorielles. Si tu veux je t'envoye tout mon code par mail.

Code:

// Options de la carte
var optionsMap = {
    //Enlève tout les controles présents par défaut    
    controls:[],
    projection:  new OpenLayers.Projection("EPSG:900913"),
    //Unité de la carte, le mètre
    units: 'm',    
    //Définition de l'extent maximal comme étant le Québec    
    maxExtent: bbox,    
    //Empeche le pan en dehors du Québec
    restrictedExtent: bbox,        
    //Événements liés à la carte
    eventListeners: {
        //Au changement de fond cartographique on appele la fonction chgtBase
        "changebaselayer": chgtBase,    
        //À la fin d'un mouvement de la carte, on appele la fonction finMvtCarte
        "moveend" : finMvtCarte,
        //À la fin d'un zoom sur la carte, on appele la fonction finZoomCarte
        "zoomend" : finZoomCarte            
    }
};
    
//Creation de la couche des regions
vecReg = new OpenLayers.Layer.Vector( "Régions",{
    //Définition du style de la couche
    styleMap: new OpenLayers.StyleMap({
        //Application du style défini au-dessus
        'default': stylereg,
        //Lors de la sélection juste l'opacité change
        'select': {fillOpacity: 0.65}
    }),
    //Charge tout les polygones une seul fois au début
    strategies: [new OpenLayers.Strategy.Fixed()],
    //Pour allert lire le fichier GeoJSon où sont stockés nos polygones
    protocol: new OpenLayers.Protocol.HTTP({
        url: "../fichier/js/reg10.geojson",
        format: new OpenLayers.Format.GeoJSON
    }),
    //On ne veut pas que cette couche soit affichée dans le sélectionneur de couche
    displayInLayerSwitcher: false
});
//Ajout de la couche des régions à la carte
map.addLayer(vecReg);

//Creation de la couche des communautés
vectors = new OpenLayers.Layer.Vector("Communautés",{
    //Application des styles
    styleMap: new OpenLayers.StyleMap({
        'default': monStyle,
        //Lors de la sélection juste la couleur change
        'select': {fillColor: "rgb(0,250,0)"}
    }),
    //On ne veut pas que cette couche soit affichée dans le sélectionneur de couche
    displayInLayerSwitcher: false
});
                
//Nos points sont stockés dqns une variable GeoJSON, en coordonnées WGS 84 (4326) et seront affichées en cooordonnées GoogleMercator (900913)
var format = new OpenLayers.Format.GeoJSON({
    'internalProjection': new OpenLayers.Projection("EPSG:900913"),
    'externalProjection': new OpenLayers.Projection("EPSG:4326")
});
            
//Ajout des points présent dans 'communautes' (var GeoJSON) à la nouvelle variable 'features'
features = format.read(communautes);

//Ajout des elements de 'features' à la couche
vectors.addFeatures(features);

Et sinon tu as dans mon précédent message une autre façon que j'avais utilisée pour afficher mes régions.

Hors ligne

 

#21 Tue 07 June 2011 14:04

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

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour,

Quelle est la projection de ta couche polygones ?

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

 

#22 Tue 07 June 2011 17:04

lagnomance
Juste Inscrit !
Lieu: Dakar
Date d'inscription: 20 May 2011
Messages: 8

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

salut Yves,
la projection de ma couhe est WGS84  EPSG:4326
merci

Hors ligne

 

#23 Tue 07 June 2011 17:18

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

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Bonjour,

Il faut que les données soient en 900913, deux solutions : les reprojeter côté serveur ou côté client via OpenLayers.

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

 

#24 Tue 07 June 2011 17:43

lagnomance
Juste Inscrit !
Lieu: Dakar
Date d'inscription: 20 May 2011
Messages: 8

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

Donc changer la projection de ma couche en 900913 ok et projeté coté client via openlayers+geoext!
mais j'ai importé mes couches sur postgis dans des tables je veux pouvoir accéder a ces données et ensuite les affichés sur openstreetmap en utilisant openlayers+geoext coté javascript!
merci,cordialement!

Hors ligne

 

#25 Thu 01 December 2011 17:27

lagnomance
Juste Inscrit !
Lieu: Dakar
Date d'inscription: 20 May 2011
Messages: 8

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

salut a tous,
SVP j'ai un petit soucis,je voudrais comprendre la fonction de extent: [-59.64701, 19.99951, -31.96942, 41.37974],j'ai mis en place une appli et d'apres tt ce ke j'ai vu je comprends pas le extent pouvez vous m'aider?est ce que c'est l'étendu de la carte?ou la position géographique qui doit être affichée?

Hors ligne

 

#26 Mon 06 February 2012 17:50

facteur
Juste Inscrit !
Date d'inscription: 6 Feb 2012
Messages: 1

Re: Pb affichage vecteur [ExtJS/GeoExt/OpenLayers]

slt, comment debuter un application de géolocalisation pour tracker un portable ?

Hors ligne

 

Pied de page des forums

Powered by FluxBB