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 Mon 20 July 2009 11:20

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

[OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

Je tente d'afficher sur ma carte l'emprise de toutes les dalles SRTM3, c'est-à-dire des carrés d'un degré par un degré à l'échelle du globe. Pour ça j'ai créé un fichier kml qui est assez volumineux (4,4 Mo). Je n'ai pas besoin d'afficher cette couche sur une vue globale mais même lorsque je ne l'affiche sur une zone relativement restreinte, c'est très lent (je pense qu'il charge beaucoup plus que la zone en question).

Bref je débute un peu et je voudrais savoir si il y a une meilleure stratégie à adopter pour obtenir le résultat que j'attends avec de bonnes performances. Je ne sais pas si on peut faire le même genre de chose qu'avec des tuiles raster ou si il faut que j'affiche mon vecteur autrement ou encore si utiliser un fichier kml est une erreur.

Voici mon code :

Code:

var map;
function init()
{
    var options = {resolutions: [1.40625, 0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125]};
    
    map = new OpenLayers.Map('map', options);
    
    var wms = new OpenLayers.Layer.WMS("OpenLayers WMS",
        "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'
        });
    
    var test_kml = new OpenLayers.Layer.Vector("test_kml", {
        maxResolution: 0.17578125, minResolution: 0.0439453125,
        strategies: [new OpenLayers.Strategy.BBOX()],
        protocol: new OpenLayers.Protocol.HTTP({ url: "./test.kml",
            format: new OpenLayers.Format.KML({format: OpenLayers.Format.KML})})});
    
    map.addLayers([wms, test_kml]);
    
    map.zoomToMaxExtent();
    
    map.addControl(new OpenLayers.Control.LayerSwitcher());
}

J'attends vos suggestions smile
Merci d'avance !

Hors ligne

 

#2 Mon 20 July 2009 11:44

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

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

Utiliser un kml dans ce cas est une erreur smile En effet OpenLayer va charger tout le fichier  puis filtrer les données. Dans ton cas il vaut mieux utiliser un service WFS où tu pourras filtrer les données côté serveur.

Autre solution, appeler un script php qui va renvoyer les données au format GeoJSON (plus facile et certainement plus efficace que d'écrire un fichier kml à la volé) en ayant pris soin de filtrer les données. Si tes données sont dans une base spatiale cela sera plus simple grâce à une requête spatiale.

Tout dépend si tu as un serveur cartographique ou non 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

 

#3 Mon 20 July 2009 13:45

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Merci pour ta réponse !

Je viens d'aller voir ce qu'est un service WFS et le GeoJSON. Comment mettre en place ces solutions ? Quand tu parles de serveur cartographique, c'est un serveur sur lequel est installé une solution qui permet de gérer des données géographiques en plus des services traditionnels, c'est ça ? Je n'ai que Mapserver de compilé sur mon serveur pour ce qui est des données géo.

Bref je suis sûr que ce serait beaucoup mieux de filtrer les données mais pour l'instant je ne vois pas comment m'y prendre.

Pour ce qui est de WFS, dois-je installer quelque chose pour m'en servir avec OpenLayers ?

Pour le format GeoJSON, je n'ai pas très bien compris l'idée. Mon fichier kml n'est pas généré à la volée, il est déjà créé et est lu par OpenLayers. Du coup je ne suis pas sûr de saisir.

Hors ligne

 

#4 Mon 20 July 2009 13:45

vdb
Participant actif
Lieu: Chambéry
Date d'inscription: 21 Jun 2006
Messages: 56

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

Si le but est simplement d'afficher ces emprises, une layer WMS est
idéale. Cela implique d'avoir un serveur carto (mapserver, geoserver,
mapguide ...).
S'il faut également récupérer de l'information au survol ou au clic
sur les emprises, le plus simple est probablement de passer par des
requetes WMS getFeatureInfo (cf le controle du même nom dans
Openlayers).

Il existe également d'autres solutions impliquant des composants
serveurs tels que MapFish, ou un serveur WFS ...

Cordialement,
F.

Hors ligne

 

#5 Mon 20 July 2009 13:51

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

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

scpsc a écrit:

Merci pour ta réponse !

Je viens d'aller voir ce qu'est un service WFS et le GeoJSON. Comment mettre en place ces solutions ? Quand tu parles de serveur cartographique, c'est un serveur sur lequel est installé une solution qui permet de gérer des données géographiques en plus des services traditionnels, c'est ça ? Je n'ai que Mapserver de compilé sur mon serveur pour ce qui est des données géo.


MapServer est ce que j'appel un serveur carto wink

scpsc a écrit:

Bref je suis sûr que ce serait beaucoup mieux de filtrer les données mais pour l'instant je ne vois pas comment m'y prendre.

Pour ce qui est de WFS, dois-je installer quelque chose pour m'en servir avec OpenLayers ?


Non WFS est un format d'échange.

scpsc a écrit:

Pour le format GeoJSON, je n'ai pas très bien compris l'idée. Mon fichier kml n'est pas généré à la volée, il est déjà créé et est lu par OpenLayers. Du coup je ne suis pas sûr de saisir.


GeoJSON est "comme" le WFS  : c'est un format d'échange. Mais structuré différemment. Je te conseil d'utiliser MapServer en tant que serveur WFS si tes données à envoyer ne sont pas trop importante puisqu'il semble que tu ais tout ce dont il faut wink

La doc de MapServer t'expliquera comment configurer MapServer en tant que service WFS !

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

 

#6 Mon 20 July 2009 14:06

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Je commence à comprendre :p

Par contre, par rapport à ce que suggère vdb, d'après ce que je comprends en effectuant quelques recherches, WMS permet d'obtenir une image. Du coup est-ce que c'est l'étape suivante qui me permettra d'afficher mes infos filtrées par le serveur WFS ou alors ce sont deux solutions différentes ?

Enfin je comprendrai sûrement mieux après avoir lu la doc.

Merci beaucoup, je reviens vers vous en cas de problème wink

Hors ligne

 

#7 Mon 20 July 2009 14:23

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

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

WFS et WMS sont deux services différents mais complémentaire. WMS vous obtenez une carte, WFS vous obtenez les données. L'avantage du WMS est que vous pouvez gérer et afficher un grand nombre de données. L'avantage avec le WFS est que vous pouvez gérer la sémiologie côté client et faire des filtres à la volée.

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 Wed 22 July 2009 16:54

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

Je suis en train de tester pour comprendre comment me servir d'un serveur WFS et je bloque.
J'ai compilé mapserver 5.4.1, avec j'espère tout ce qu'il faut pour que ça fonctionne en tant que serveur WFS.

Voici mon mapfile :

Code:

MAP
    NAME "WFS-server"
    SIZE 774 387
    EXTENT -180 -89.9778 179.9778 90
    UNITS DD
    SHAPEPATH "data"
    IMAGECOLOR 255 255 255
    
    WEB
        IMAGEPATH "/var/www/html/tmp"
        IMAGEURL "/tmp/"
        METADATA
            "wfs_title" "WFS server"
            "wfs_onlineresource" "http://*adresse_IP*/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&"
            "wfs-srs" "epsg:4326"
        END
    END
    
    PROJECTION
        "init=epsg:4326"
    END
    
    LAYER
            NAME ASTER_GDEM
        STATUS ON
        METADATA
            "wfs_title"        "aster_gdem"
            "gml_featureid"        "ID"
            "gml_include_items"    "all"
        END
        PROJECTION
            "init=epsg:4326"
        END
        DUMP TRUE
            TYPE POLYGON
        DATA aster_gdem
            CLASS
            COLOR 50 50 50
            OUTLINECOLOR 0 0 0
            END
    END # layer
END # map

Il interroge des shapefiles (aster_gdem.*) dans le répertoire data/.

Et voici le code de ma page web :

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>test WFS</title>
    <script src="./OpenLayers-2.8/OpenLayers.js"></script>
    <script type="text/javascript">
        var map;
        function init()
        {
            var options = {resolutions: [1.40625, 0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125],
                controls: [new OpenLayers.Control.PanZoom(),new OpenLayers.Control.LayerSwitcher()]
                };
            
            map = new OpenLayers.Map('map', options);
            
            var wms = new OpenLayers.Layer.WMS("OpenLayers WMS",
                "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'
                });
            
            var test_WFS = new OpenLayers.Layer.WFS("test WFS",
                "http://*adresse_IP*/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&",
                {typename: 'aster_gdem'},
                {}
                );
            
            map.addLayers([wms, test_WFS]);
            
            map.zoomToMaxExtent();
        }
    </script>
</head>
<body onload="init()">
    <div id="map" style="width: 512px;height: 256px;border: 1px solid #d1d1d1;"></div>
</body>
</html>

Je me suis inspiré du lien que vous avez fourni ainsi que d'un tuto que j'ai trouvé ici. Je n'ai pas compris quoi mettre exactement pour l'option "typename" de ma couche WFS.

Malheureusement mes vecteurs ne s'affichent pas et je progresse tout doucement. Votre aide me ferais sans doute gagner beaucoup de temps.

Lorsque je teste directement l'url "http://*adresse_IP*/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&", j'ai un message d'erreur qui pourrait expliquer que ça ne marche pas :

msProcessProjection(): Projection library error. no system list, errno: 2

J'ai vérifié que PROJ.4 était bien installée, c'est le cas (je trouve bien libproj.*) et un mapserv_5.4.1 -v me donne :

MapServer version 5.4.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS INPUT=TIFF INPUT=EPPL7 INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE

Merci d'avance !

Hors ligne

 

#9 Wed 22 July 2009 17:39

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

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

J'ai eu le même problème pour un serveur WMS. Je me demande si ce n'est pas un bug de MapServer. Des dev de MS sont ils dans les parages pour confirmer ? smile

Merci,

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

 

#10 Thu 23 July 2009 14:23

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

J'ai enfin compris comment résoudre le problème avec PROJ.4 : en plus de la librairie libproj utilisée pour compiler mapserver, il faut installer le package proj pour avoir tout ce qu'il faut, c'est-à-dire quelques fichiers qui sont installés dans /usr/share/proj/ dont un fichier epsg qui permet à MapServer de comprendre la nomenclature epsg.

J'ai maintenant un autre message d'erreur wink

mapserv(): Web application error. Traditional BROWSE mode requires a TEMPLATE in the WEB section, but none was provided.

Pourtant il n'y a pas "TEMPLATE" dans le tuto que j'ai lu ni sur l'exemple du site officiel. J'ai essayé de trafiquer un faux TEMPLATE mais ça n'affiche rien d'intéressant, pas de XML à l'horizon sad

Bref il y a encore quelque chose qui m'échappe !

Hors ligne

 

#11 Wed 19 August 2009 13:13

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Je me permets de relancer la communauté du forum : quelqu'un a-t-il une idée qui pourrait m'aider ?

Merci !

Hors ligne

 

#12 Wed 19 August 2009 13:18

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

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

La requête que tu utilises pour interroger MapServer doit être incorrecte, peux tu la poster ici ?

Généralement, ce message apparait quand tu interroges MapServer en mode CGI sans avoir founie les paramètres nécessaire. Par contre ce n'est pas ce que tu souhaites.

Merci,

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

 

#13 Wed 19 August 2009 13:28

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

Voici la requête que j'utilise : http://adresse-ip/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&

Merci !

Hors ligne

 

#14 Wed 19 August 2009 13:37

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

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Ben voilà la réponse est là, tu n'envoies aucun paramètres. Si tu veux interroger ton serveur WFS, il faut passer quelques paramètres :

http://adresse-ip/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetCapabilities

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 Wed 19 August 2009 13:39

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

En effet, ça fonctionne mieux comme ça wink

Il me reste à voir comment filtrer et afficher le secteur qui m'intéresse sans devoir charger toute ma couche vecteur.

Merci beaucoup pour ton aide !

Hors ligne

 

#16 Wed 19 August 2009 13:49

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

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

Voilà la liste des paramètres :

Code:

REQUEST=GetFeature&TYPENAME=maCouche&FILTER=XXXXBBOX=000,000,000,000

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 Thu 20 August 2009 13:13

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

J'avance petit à petit et j'ai à nouveau une question !

Comme je n'obtenais pas l'affichage de mes vecteurs en faisant la requête WFS au sein de mon code OpenLayers, je me suis mis à tester le flux XML qui est généré et je me suis rendu compte que le format n'allait pas.

La requête est la suivante : http://adresse-ip/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&TYPENAME=poly&BBOX=40,10,70,30

J'ai un peu modifié ce que tu m'as fourni, Yves, parce que je ne trouvais pas comment utiliser FILTER. Voici le résultat :

Code:

<?xml version="1.0" encoding="ISO-8859-1"?>
<wfs:FeatureCollection xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mapserver.gis.umn.edu/mapserver http://adresse-ip/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&amp;SERVICE=WFS&amp;VERSION=1.1.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=poly&amp;OUTPUTFORMAT=text/xml; subtype=gml/3.1.1  http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
      <gml:boundedBy>
          <gml:Envelope srsName="EPSG:4326">
              <gml:lowerCorner>54.773809 16.453694</gml:lowerCorner>
              <gml:upperCorner>62.669312 22.333324</gml:upperCorner>
          </gml:Envelope>
      </gml:boundedBy>
    <gml:featureMember>
      <ms:POLY gml:id="POLY.1">
        <gml:boundedBy>
            <gml:Envelope srsName="EPSG:4326">
                <gml:lowerCorner>54.773809 16.453694</gml:lowerCorner>
                <gml:upperCorner>62.669312 22.333324</gml:upperCorner>
            </gml:Envelope>
        </gml:boundedBy>
        <ms:msGeometry>
          <gml:Polygon srsName="EPSG:4326">
            <gml:exterior>
              <gml:LinearRing>
                <gml:posList srsDimension="2">56.033730 21.577371 62.669312 22.333324 62.585317 17.125652 56.873677 16.453694 54.773809 19.729488 56.033730 21.577371 </gml:posList>
              </gml:LinearRing>
            </gml:exterior>
          </gml:Polygon>
        </ms:msGeometry>
        <ms:ID>1</ms:ID>
      </ms:POLY>
    </gml:featureMember>
</wfs:FeatureCollection>

Or je ne parviens pas à afficher ce fichier XML avec OpenLayers en créant une couche toute simple :
var test_XML = new OpenLayers.Layer.GML("test_XML", "poly.xml");

Par contre, j'y parviens avec un fichier que j'ai trouvé sur le net. J'ai donc adapté mon fichier XML en prenant comme modèle ce fichier et à ce moment-là ma couche s'affiche bien, donc il me semble que j'ai un soucis de format. Par contre je ne sais pas si c'est dû à mes données initiales (je teste avec des shapefiles créées avec MAPublisher ou ENVI) ou alors à ma requête ou encore au serveur WFS (ce qui m'étonnerait).

Pour afficher ma couche, j'ai modifié les deux occurences de :

Code:

<gml:Envelope srsName="EPSG:4326">
       <gml:lowerCorner>54.773809 16.453694</gml:lowerCorner>
       <gml:upperCorner>62.669312 22.333324</gml:upperCorner>
</gml:Envelope>

et également :

Code:

<gml:posList srsDimension="2">56.033730 21.577371 62.669312 22.333324 62.585317 17.125652 56.873677 16.453694 54.773809 19.729488 56.033730 21.577371 </gml:posList>

pour obtenir le fichier suivant :

Code:

<?xml version="1.0" encoding="ISO-8859-1"?>
<wfs:FeatureCollection xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mapserver.gis.umn.edu/mapserver http://adresse-ip/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&amp;SERVICE=WFS&amp;VERSION=1.1.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=poly&amp;OUTPUTFORMAT=text/xml; subtype=gml/3.1.1  http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
      <gml:boundedBy>
          <gml:Envelope srsName="EPSG:4326">
              <gml:coordinates>54.773809,16.453694 62.669312,22.333324</gml:coordinates>
          </gml:Envelope>
      </gml:boundedBy>
    <gml:featureMember>
      <ms:POLY gml:id="POLY.1">
        <gml:boundedBy>
            <gml:Envelope srsName="EPSG:4326">
                <gml:coordinates>54.773809,16.453694 62.669312,22.333324</gml:coordinates>
            </gml:Envelope>
        </gml:boundedBy>
        <ms:msGeometry>
          <gml:Polygon srsName="EPSG:4326">
            <gml:exterior>
              <gml:LinearRing>
                <gml:coordinates>56.033730,21.577371 62.669312,22.333324 62.585317,17.125652 56.873677,16.453694 54.773809,19.729488 56.033730,21.577371 </gml:coordinates>
              </gml:LinearRing>
            </gml:exterior>
          </gml:Polygon>
        </ms:msGeometry>
        <ms:ID>1</ms:ID>
      </ms:POLY>
    </gml:featureMember>
</wfs:FeatureCollection>

Comment faire pour que mon flux généré utilise <gml:coordinates> plutôt que <gml:lowerCorner>, <gml:upperCorner> et <gml:posList srsDimension="2"> ?

Merci !

Dernière modification par scpsc (Thu 20 August 2009 13:15)

Hors ligne

 

#18 Thu 20 August 2009 13:23

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

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

Le paramètre FILTER est optionnel, comme BBOX, etc.

Tu utilises un constructeur GML pour une source en WFS, c'est donc normal que tu n'obtiennes pas ce que je tu veux wink

Utilises le constructeur WFS plutôt !

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

 

#19 Thu 20 August 2009 13:33

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Merci pour ta réponse et ton aide précieuse !

En utilisant WFS à la place de GML (var test_XML = new OpenLayers.Layer.WFS("test_XML", "poly.xml")wink, j'ai le même soucis : si j'importe les données de mon fichier XML initial, rien ne s'affiche mais ça marche avec le fichier modifié. D'ailleurs les vecteurs s'affichent en ne modifiant que la ligne <gml:posList srsDimension="2">, j'avais modifié plus que nécessaire. J'ai tout de même l'impression que mon problème vient de là mais comme je patauge un peu... :p

Dernière modification par scpsc (Thu 20 August 2009 13:33)

Hors ligne

 

#20 Thu 20 August 2009 15:32

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

J'ai trouvé : c'est un problème de version de GML. En explicitant le format dans la requête, j'obtiens ce que je veux :

http://adresse-ip/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&TYPENAME=poly&BBOX=40,10,70,30&OUTPUTFORMAT=GML2


Ceci dit, peut-être aussi que OpenLayers lit le GML3, je vais regarder.

Hors ligne

 

#21 Fri 21 August 2009 10:39

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Bonjour,

Je suis une nouvelle fois coincé : je n'arrive pas à faire fonctionner ma requête avec OpenLayers. J'ai testé deux solutions trouvées ici et ici. Dans l'exemple du second lien, il a l'air de manquer quelques "&" et une virgule que j'ai rajoutés mais sans succès.

Voici mon code OpenLayers au complet :

Code:

var map, wms, test_WFS;
        function init()
        {
            map = new OpenLayers.Map('map', {
                controls: [new OpenLayers.Control.Navigation(),
                    new OpenLayers.Control.PanZoom(),
                    new OpenLayers.Control.LayerSwitcher()
                    ]
                });
            
            wms = new OpenLayers.Layer.WMS("OpenLayers WMS",
                "http://labs.metacarta.com/wms/vmap0",
                {layers:'basic'
                });
            
//            test_WFS = new OpenLayers.Layer.WFS("test WFS",
//                "http://adresse-ip/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map&",
//                {service:'WFS', version:'1.1.0', request:'GetFeature', bbox:'70,35,75,37', typeName:'aster_gdem', outputFormat:'GML2'},
//                {}
//                );
            
            test_WFS = new OpenLayers.Layer.GML("test WFS", [
                "http://adresse-ip/cgi-bin/mapserv_5.4.1",
                "?map=/var/www/html/WFS_server/test.map",
                "&SERVICE=WFS",
                "&VERSION=1.1.0",
                "&REQUEST=GetFeature",
                "&BBOX=70,35,75,37",
                "&TYPENAME=aster_gdem",
                "&OUTPUTFORMAT=GML2"].join(",")
                );
            
            map.addLayers([wms, test_WFS]);
            
            map.zoomToMaxExtent();
        }

C'est vraiment chaud de trouver de la doc pour rédiger ce genre de requêtes sur le net ! A part quelques exemples comme ceux que j'ai copiés, je ne trouve rien d'intéressant…

Merci d'avance !

Hors ligne

 

#22 Mon 24 August 2009 12:31

scpsc
Participant occasionnel
Date d'inscription: 6 Jul 2009
Messages: 20

Re: [OpenLayers] Stratégie d'affichage pour un grand nombre de vecteurs

Ca y est, ça marche ! Je donne la solution, ça peut servir :

Code:

test_WFS = new OpenLayers.Layer.Vector(test WFS", {
    strategies: [new OpenLayers.Strategy.BBOX()],
    protocol: new OpenLayers.Protocol.WFS({
        url: "http://adresse-ip/cgi-bin/mapserv_5.4.1?map=/var/www/html/WFS_server/test.map",
        featureType: "ma_couche",
        featureNS: "http://mapserver.gis.umn.edu/mapserver"
    })
});

Hors ligne

 

Pied de page des forums

Powered by FluxBB