Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 Wed 10 June 2009 10:40

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

[Openlayers] Récupérer les données d'une couche

Bonjour,

Je travaille sur un projet sur lequel j'ai besoin de récupérer les données d'une couche qui a été sélectionnée au préalable. Je tente de m'expliquer un peu mieux smile

Donc j'ai un fond de carte avec plusieurs layers. Je voudrais pouvoir sélectionner soit un point soit une zone et avoir en retour les données correspondante à la couche que j'ai sélectionnée. Auriez vous quelques pistes svp.

Merci

Hors ligne

 

#2 Wed 10 June 2009 10:51

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

Re: [Openlayers] Récupérer les données d'une couche

Bonjour,

Pour une couche raster voir http://trac.openlayers.org/wiki/GetFeatureInfo

Si c'est une couche vecteur (WFS, GeoJSON, etc.) les données sont déjà dans openlayers, il suffit de récupérer l'id de l'objet et de renvoyer les données vers l'affichage.

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 10 June 2009 11:15

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

Re: [Openlayers] Récupérer les données d'une couche

Merci de ta réponse. Par contre je ne sais pas quoi mettre pour la variable prox.
Je ne sais pas trop à quoi cela correspond malgré le commentaire : prox is a layer defined elsewhere

Merci

Hors ligne

 

#4 Wed 10 June 2009 11:29

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

Re: [Openlayers] Récupérer les données d'une couche

Tu dois avoir un objet layer :

Code:

var prox = new OpenLayers Layers.WMS();

C'est l'objet JavaScript de la couche que tu veux interroger.

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

 

#5 Wed 10 June 2009 11:35

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

Re: [Openlayers] Récupérer les données d'une couche

Yves a écrit:

Bonjour,

Pour une couche raster voir http://trac.openlayers.org/wiki/GetFeatureInfo

Si c'est une couche vecteur (WFS, GeoJSON, etc.) les données sont déjà dans openlayers, il suffit de récupérer l'id de l'objet et de renvoyer les données vers l'affichage.

Y.


Donc en fait nous on a des MXD et on fait des requêtes WMS pour afficher les layers. Donc en gros je voudrais récupérer les informations contenus dans le layer sélectionné.

Merci

En gros je voudrai le même principe que cela. Ça sera sans doute plus parlant en image. J'ai une couche et je récupère toutes ces informations soit en cliquant qqpart soit en faisant une zone de sélection
Dernière modification par Thewil007 (Wed 10 June 2009 12:09)

Hors ligne

 

#6 Wed 10 June 2009 16:36

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

Re: [Openlayers] Récupérer les données d'une couche

Bonjour,

J'ai bien compris et la solution a été donnée plus haut ! 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

 

#7 Wed 10 June 2009 17:08

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

Re: [Openlayers] Récupérer les données d'une couche

Il faut donc bien utiliser getFeatureInfo ? Mais je ne récupère rien avec ce paramètre donc je m'interreoge. Je ne sais pas ce que je fais mal sad

Hors ligne

 

#8 Wed 10 June 2009 17:11

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

Re: [Openlayers] Récupérer les données d'une couche

Oui c'est cette fonction, mais rien c'est à dire ? un message d'erreur dans firebug ? la requête ajax se lance t elle correctement ?

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

 

#9 Wed 10 June 2009 17:17

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

Re: [Openlayers] Récupérer les données d'une couche

Autant pour moi c'est moi qui commettait une erreur :$ dans ma requête. je m'embrouillais dans le numéro des couches avec Arcgis.
Donc ma requête ressemble à ça et ça marche pour ceux qui seraient éventuellement intéressé :

http://host........../WMSServer?VERSION=1.0.0&REQUEST=GetFeatureInfo&SRS=EPSG:27572&QUERY_LAYERS=5&INFO_FORMAT=text/html&WIDTH=1101&HEIGHT=226&BBOX=271529,2238868,329053,2272349&X=537&Y=119

Hors ligne

 

#10 Wed 10 June 2009 18:41

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

Re: [Openlayers] Récupérer les données d'une couche

Bon en fait si je reviens vers vous car j'ai un problème avec l'appel AJAX. J'obtiens une erreur de ce style :

Access to restricted URI denied" code: "1012

Merci

Hors ligne

 

#11 Wed 10 June 2009 19:50

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

Re: [Openlayers] Récupérer les données d'une couche

Est ce que l'adresse du serveur carto est la même que la page qui lance la requete AJAX ?

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

 

#12 Thu 11 June 2009 09:43

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

Re: [Openlayers] Récupérer les données d'une couche

Hum nan la requête est lancé à partir du cache du serveur alors que la requête est faite sur le serveur lui même

Hors ligne

 

#13 Mon 15 June 2009 17:46

Mathieu J.
Participant occasionnel
Lieu: Liège - Belgique
Date d'inscription: 15 Jun 2009
Messages: 24

Re: [Openlayers] Récupérer les données d'une couche

Bonjour,

Je me permets de relancer cette discussion car je suis confronté à un problème similaire dans le cadre de mon travail de fin d'étude.

Je souhaite donc questionner mon WMS pour en récupérer l'information attributaire. Je me suis inspiré de la page 'http://trac.openlayers.org/wiki/GetFeatureInfo' ainsi que d'un post précédent ([OpenLayers] Problème GetFeatureInfo WMS) pour ainsi parvenir à récupérer l'info au format 'text/plain'.

Je souhaite désormais récupérer l'information au format 'text/html' pour notamment l'afficher dans une info bulle mais je me heurte invariablement à la même erreur :  'Access to restricted URI denied" code: "1012'.
A la question posée précédemment par Yves "Est ce que l'adresse du serveur carto est la même que la page qui lance la requete AJAX ?", je ne suis pas sûr de bien comprendre la question. Je travail pour l'instant en local sous windows (MS4W - avec OL 2.7 placé dans le dossier 'apps' du package MS4W).
Ma page html qui lance la requête Ajax est placée dans les exemples d'OL.

A la lecture du web, j'ai cru comprendre que ce serait un problème de proxy. Comme indiqué dans le FAQ du site d'OpenLayers, j'ai récupéré l'exemple de fichier "proxy.cgi" que j'ai placé dans le répertoire cgi-bin de Apache et que j'ai édité afin qu'il tienne compte de l'url de mon application. Enfin, au sein de ma page html, je fait appel à ce fichier via la commande :
OpenLayers.ProxyHost="file:///C|/ms4w/Apache/cgi-bin/proxy.cgi?url=";
placée au sein de ma fonction init(). Néanmoins, malgré cette opération, l'erreur subsiste.

Ayant fait le tour de la question, je sollicite votre aide afin de m'aider à solutionner cette erreur (ou à la contourner) ou simplement à m'éclaircir sur certains éléments non compris de ma part.

D'avance merci

Mathieu

Hors ligne

 

#14 Mon 15 June 2009 18:04

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

Re: [Openlayers] Récupérer les données d'une couche

bonjour,

Si tu fais un test avec un fichier test dans le serveur où est installé le code js d'OpenLayers, est ce que cela fonctionne ?

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

 

#15 Tue 16 June 2009 11:53

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

Re: [Openlayers] Récupérer les données d'une couche

Je me permets de relancer mon sujet smile
J'avais bien réussi à faire cette méthode seulement maintenant j'aimerais améliorer un peu la chose en remplaçant le fait qu'une seule couche est interrogeable par l'interrogation de toutes les couches visible ou potentiellement visibles (genre en prenant en compte le seuil éventuel de zoom).

Je n'ai pour le moment rien trouvé dans l'API OL.

Si vous avez des tuyaux je suis preneur wink

Hors ligne

 

#16 Tue 16 June 2009 11:56

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

Re: [Openlayers] Récupérer les données d'une couche

bonjour,

tu fais un merge des layers visible que tu peux récupérer via OpenLayers pour le paramètre QUERY_LAYERS.

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

 

#17 Tue 16 June 2009 12:19

Thewil007
Participant occasionnel
Date d'inscription: 23 Apr 2009
Messages: 15

Re: [Openlayers] Récupérer les données d'une couche

D'acc je vais tenter de regarder de ce coté la. merci

Hors ligne

 

#18 Wed 17 June 2009 12:06

Mathieu J.
Participant occasionnel
Lieu: Liège - Belgique
Date d'inscription: 15 Jun 2009
Messages: 24

Re: [Openlayers] Récupérer les données d'une couche

Yves a écrit:

bonjour,

Si tu fais un test avec un fichier test dans le serveur où est installé le code js d'OpenLayers, est ce que cela fonctionne ?

Y.


Bonjour,

Merci Yves pour cette réaction express.

Je ne parviens toujours pas à récupérer l'info de ma couche en 'text/html'.
Lorsque je teste la solution où je place un fichier test proxy.cgi dans le répertoire où est installé le js d'OpenLayers, l'erreur reste la même 'Access to restricted URI denied" code: "1012' (était-ce bien cette solution que tu proposais Yves ?).
Par contre lorsque ma page html et le fichier proxy.cgi se trouvent dans le même répertoire, j'ai une fenêtre alerte html (ma fonction setHTML demande effectivement d'afficher la réponse à la requête dans une fenêtre de type 'alert' - voir code ci-dessous) qui s'ouvre avec le contenu de mon fichier proxy.cgi .
Quelqu'un peut-il m'expliquer pourquoi un tel contenu s'affiche ? Il y a sans doute certains aspects du JavaScript que je ne comprends pas encore.

Voici à quoi ressemble mon code OpenLayers :

Code:

        var lon = 237004.702965;
        var lat = 146667.632985;
        var zoom = 0;
        var mouseLoc;
    var map;
    var popup;
        
    function init() {
        
    OpenLayers.ProxyHost="proxy.cgi?url=";
        
        map= new OpenLayers.Map('map', 
       {
         resolutions:[26.4583, 6.6146, 1.3229, 0.2646],
     maxExtent:newOpenLayers.Bounds(231653.530965,139588.077985,242355.874965,153747.187985),
      projection:new OpenLayers.Projection("EPSG:31370")});     
            
    var wms1 = new OpenLayers.Layer.WMS("bati", 
        "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/tutorial/htdocs/ASE_LIEGE_GFI.map&", 
            {layers: "BATI", transparent: true, format: 'image/png'},
            {isBaseLayer: true});
             
    map.addLayer(wms1);
    map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
             
    map.events.register('click', map, function(event) 
    {
     var url = wms1.getFullRequestString
    ({
            REQUEST: "GetFeatureInfo",
            EXCEPTIONS: "application/vnd.ogc.se_xml",
            BBOX: wms1.map.getExtent().toBBOX(),
            X: event.xy.x,
            Y: event.xy.y,
            INFO_FORMAT: 'text/html',
            QUERY_LAYERS: wms1.params.LAYERS,
            WIDTH: wms1.map.size.w,
            HEIGHT: wms1.map.size.h});

            OpenLayers.loadURL(url, '', this, setHTML);
            Event.stop(event);
         });
         }
            
            
        function setHTML(response) {alert(response.responseText);}

Par ailleurs, Thewil007, peux-tu m'expliquer comment, de ton côté, tu as solutionné le problème lié à l'erreur 'Access to restricted URI denied" code: "1012'.

D'avance merci

Mathieu

Hors ligne

 

#19 Sat 20 June 2009 14:18

Mathieu J.
Participant occasionnel
Lieu: Liège - Belgique
Date d'inscription: 15 Jun 2009
Messages: 24

Re: [Openlayers] Récupérer les données d'une couche

Bonjour,

Pour info : mon problème d'erreur :"Access to restricted URI denied" code: "1012" est lié au fait que je travaille en local et avec firefox. L'alerte de sécurité locale serait lié en effet au fait que FF "n'accepte que des liens en relatif" dixit :http://www.developpez.net/forums/d59308 … -axis2-js/. Sous IE, cela passe.

Néanmoins, dans mon cas (MS4W), afin de pouvoir rapatrier mes données au format text/html, j'ai du mettre à jour le package ms4w sur base de la version 5.2.2 (http://www.maptools.org/ms4w/index.phtm … loads.html).

Mathieu

Hors ligne

 

Pied de page des forums

Powered by FluxBB