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 Thu 08 July 2010 11:23

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

[Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Je bute sur un problème sans doute très bête : je n'arrive pas à afficher des points contenus dans un shapefile, alors que dans le cas de polygones ou lignes, ca ne me pose pas de soucis.

Voici le code javascript que j'utilise pour afficher une couche contenant autre chose que des points :

Code:

    var lanildut_wms = new OpenLayers.Layer.WMS(
        "lanildut",
        "http://localhost/cgi-bin/mapserv?map=/var/www/tests/brest.map&",
        {
            projection: new OpenLayers.Projection("EPSG:27582"),
            layers: 'lanildut',
            transparent:"true",
            format: 'image/png'
        },
        {
            singleTile: false,
            opacity: 0.5,
            isBaseLayer : false,
        }
    );

J'ai essayé d'autres pistes comme passer par une couche "Vector" en WFS, sauf que je n'ai même pas réussi à la mettre en oeuvre avec des lignes ou polygones. Ca a l'air assez récent, je n'ai pas réussi à trouver des masses d'exemples dessus.
La doc d'OL recommande cette structure de données comme remplacement de "Layers.WFS", mais cette dernière me semble plus simple d'utilisation...

J'avais quelque chose de ce genre quand j'ai tenté une couche Vector :

Code:

    var points = new OpenLayers.Layer.Vector(
        "Estran Vecteur",
        {
            strategies: [new OpenLayers.Strategy.BBOX()],
            protocol: new OpenLayers.Protocol.WFS({
                version: "1.1.0",
                srsName: "EPSG:27582",
                url:    "http://localhost/tests/lanildutMap/estran.map",
                featureType: "estran",
        }),
        styleMap: new OpenLayers.StyleMap({
            strokeColor: "black",
            strokeWidth: 2,
            strokeOpacity: 0.5,
            fillOpacity: 0.2
        }),
        renderers: ["Canvas", "SVG", "VML"]
        }
    );

Après je me plante peut-être aussi dans la définition de ma couche de points dans le *.map. Ca ressemble à quelque chose comme ca :

Code:

    LAYER
        NAME pointsLayer
        METADATA
            ### WMS 
            "wms_title"    "Points" 
            ### WFS 
            "wfs_title"        "Points"
            "gml_featureid"  "NAME" 
            "gml_include_items" "all"
        END
        PROJECTION
            "init=epsg:27582"
        END
        DUMP    TRUE
        TYPE            POINT
        STATUS    ON
        DATA            pointsLayer

Une petite question au passage : au début, mon shapefile s'appelait "Points", et je me faisais insulter par MapServer lors du chargement du shapefile. Je l'ai renommé et l'insulte a disparu... Je trouve assez étrange qu'il bloque sur un nom de fichiers comme ca. C'est normal ?

Hors ligne

 

#2 Fri 09 July 2010 11:26

Satare
Juste Inscrit !
Lieu: Raismes
Date d'inscription: 30 Mar 2009
Messages: 2

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

var points = new OpenLayers.Layer.Vector(
        "Estran Vecteur",
        {
            strategies: [new OpenLayers.Strategy.BBOX()],
            protocol: new OpenLayers.Protocol.WFS({
                version: "1.1.0",
                srsName: "EPSG:27582",
                url:    "http://localhost/tests/lanildutMap/estran.map",
                featureType: "estran",
        }),
        styleMap: new OpenLayers.StyleMap({
            strokeColor: "black",
            strokeWidth: 2,
            strokeOpacity: 0.5,
            fillOpacity: 0.2
        }),
        renderers: ["Canvas", "SVG", "VML"]
        }
    );


J'aurais mis l'adresse du serveur moi là : http://localhost/mapserv?map=c:/chemin/vers/mapfile.map&" - un truc comme ca smile

Et quand vous appelez le layer "estran" : vous n'avez aucun layer nommé comme tel dans votre mapfile ?

Hors ligne

 

#3 Fri 09 July 2010 14:11

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Merci de votre réponse.

J'ai bien un layer "estran" dans mon mapfile. Effectivement, ce n'est pas ce que j'ai montré, mais la structure générale du layer est la même. Il y a juste un champ CLASS - COLOR, OUTLINECOLOR en plus.

J'arrive à afficher ce que je veux en passant par "OpenLayers.Layer.WFS". Je m'en serais bien contenté, sauf qu'il est indiqué dans la doc que ca va disparaitre dans la version 3.0 d'OL...

Utiliser l'adresse du serveur me semble mieux aussi, merci. Sauf que ca ne marche pas mieux... Je n'ai toujours rien qui change quand j'active/désactive la couche Vector. Pas même une tuile rose.

Je vais continuer de creuser le problème donc...

Hors ligne

 

#4 Tue 13 July 2010 10:32

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Il me semble que si j'arrive à résoudre mon problème d'affichage de données WFS via un "Vector" d'OpenLayers, je ne serai plus très loin de l'affichage de mes points contenus dans un shapefile.

Le hic c'est que pour le moment je patauge... Serait-il possible d'avoir un exemple d'utilisation de vecteur avec Mapfile ?

Merci d'avance.

Hors ligne

 

#5 Tue 13 July 2010 10:52

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

Re: [Openlayers] Comment afficher un shapefile contenant des points


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

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Merci, mais ce n'est pas tellement la partie Mapsever qui me pose problème, mais son utilisation dans OL.

J'ai bien vu des exemples sur le site d'OL utilisant la classe vector, mais c'était à chaque fois avec geoserver et une url pointant vers un fichier ".../wfs" que je ne possède pas.

Pour le moment, le code de mon layer ressemble à peu près à ca :

Code:

    var estran_wfs_vect = new OpenLayers.Layer.Vector(
        "Estran Vecteur",
        {
            strategies: [new OpenLayers.Strategy.BBOX()],
            protocol: new OpenLayers.Protocol.WFS({
                version: "1.0.0",
                srsName: "EPSG:27582",
                url:    "http://localhost/cgi-bin/mapserv?map=/var/www/tests/lanildutMap/estran.map&",
                featureType: "estran",
                }),
            styleMap: new OpenLayers.StyleMap({
                strokeColor: "black",
                strokeWidth: 2,
                strokeOpacity: 0.5,
                fillOpacity: 0.7
                }),
            renderers: ["Canvas", "SVG", "VML"]
        }
    );

Ca ne plante ni n'affiche d'erreur dans firebug, mais ca n'affiche pas quelque chose pour autant. Quelqu'un verrait une erreur dans mon bout de code ou il faudrait aller la chercher ailleurs ?

Hors ligne

 

#7 Tue 13 July 2010 11:42

Guillaume Sueur
Participant assidu
Lieu: Toulouse
Date d'inscription: 23 Sep 2005
Messages: 331
Site web

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Il faudrait que tu procèdes en deux temps : d'abord vérifier que le service WFS est opérationnel, en testant avec un client lourd par exemple, et ensuite essayer de l'intégrer dans OpenLayers.
Dans Firebug, tu dois aussi pouvoir repérer les requêtes émises vers le service WFS et voir si elle sont déconnantes ou pas. En les ouvrant dans un nouvel onglet, il se peut que tu vois apparaître un message d'erreur.

Guillaume

Hors ligne

 

#8 Mon 02 August 2010 11:11

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Excusez-moi pour le temps de réponse, j'étais passé à quelque chose de plus prioritaire entre-temps.

Le serveur WFS est bien opérationnel. Voici une requete et ce qu'elle revoie :

Code:

http://localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&PROJECTION=EPSG%3A27582&TYPENAME=estran&FORMAT=image%2Fpng&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&SRS=EPSG%3A27582&BBOX=50000,2397500,100000,2422500

Code:

<wfs:FeatureCollection xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd                         http://mapserver.gis.umn.edu/mapserver localhost/cgi-bin/mapserv?map=/var/www/tests/lanildut.map&SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType&TYPENAME=estran&OUTPUTFORMAT=XMLSCHEMA">
−
<gml:boundedBy>
−
<gml:Box srsName="epsg:27582">
−
<gml:coordinates>
75096.603132,2409373.548219 80585.157175,2411777.410681
</gml:coordinates>
</gml:Box>
</gml:boundedBy>
−
<!--
 WARNING: FeatureId item 'NAME' not found in typename 'estran'. 
-->
−
<gml:featureMember>
−
<ms:estran>
−
<gml:boundedBy>
−
<gml:Box srsName="epsg:27582">
−
<gml:coordinates>
75096.603132,2409373.548219 80585.157175,2411777.410681
</gml:coordinates>
</gml:Box>
</gml:boundedBy>
−
<ms:msGeometry>
−
<gml:Polygon srsName="epsg:27582">
−
<gml:outerBoundaryIs>
−
<gml:LinearRing>
−
<gml:coordinates>
75400.004370,2410536.800205 [...beacoup de coordonnées...] 75400.004370,2410536.800205 
</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</ms:msGeometry>
<ms:AREA>7.10612e-004</ms:AREA>
<ms:PERIMETER>1.93870e-001</ms:PERIMETER>
<ms:COMLIT2_>1176</ms:COMLIT2_>
<ms:COMLIT2_ID>49</ms:COMLIT2_ID>
<ms:NOM>ESTRAN</ms:NOM>
</ms:estran>
</gml:featureMember>
</wfs:FeatureCollection>

Dans OpenLayers ma couche ressemble à ceci :

Code:

    var estran = new OpenLayers.Layer.Vector(
        "estran Vector SHP", {
            strategies: [new OpenLayers.Strategy.BBOX()],
            projection: new OpenLayers.Projection("EPSG:27582"),
            protocol: new OpenLayers.Protocol.WFS({
                version: "1.1.0",
                url: "http://localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&",
                featureNS: "http://mapserver.gis.umn.edu/mapserver",
                featureType: "estran",
                schema: "http://localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&PROJECTION=EPSG%3A27582&TYPENAME=estran&FORMAT=image%2Fpng&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&SRS=EPSG%3A27582&BBOX=50000,2397500,100000,2422500"
            })
        }
    );

J'obtiens la requête suivante dans Firebug :

Code:

http://localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&

Requête qui me revoie l'erreur suivante:

Code:

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

[EDIT]
Après avoir rajouté un champ "TEMPLATE" rempli par un fichier vide dans la section "WEB" de mon mapfile, j'obtiens un nouveau jeu d'erreurs. Je ne m'attendais pas à autre chose, mais ca peut faire avancer le problème.

Code:

msDrawMap(): Image handling error. Unable to initialize image. msPrepareImage(): General error message. Image dimensions not specified. msCalculateScale(): General error message. Invalid image extent, minx=-1.000000, miny=-1.000000, maxx=-1.000000, maxy=-1.000000. mapserv(): Web application error. No way to generate map extent.

[/EDIT]
Apparament je dois me taper la rédaction d'un template MapServer... Je ne savais pas que ca existait ^^'. Je vais aller potasser la doc.

Dernière modification par Fol (Mon 02 August 2010 11:27)

Hors ligne

 

#9 Mon 02 August 2010 11:27

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

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Non cela signifie que OpenLayers n'envoie pas la bonne requête (il n'a pas rajouté les paramètres WFS obligatoire : GetFeature, TYPENAME, etc.)

Ton problème vient de la configuration de la couche WFS dans le code JavaScript.

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 Mon 02 August 2010 11:52

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Merci de la rapidité de la réponse.

La requête POST effectuée par OpenLayer se base uniquement sur le champ "url" de l'objet protocol. Je peux mettre n'importe quoi autour, ca n'est pas pris en compte. Du moins c'est l'impression que j'ai.

Pourtant au vu de ce sujet ca ne me semble pas logique du tout :

scpsc a écrit:

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"
    })
});


Entrer toute la requête à la main ne me semble pas la bonne solution. Surtout que ca ne change presque rien au résultat. J'obtiens juste soit différentes erreurs en fonction des paramètres que je donne, soit la même chose que précédemment une fois les erreurs corrigées... La seule différence notable se situe au niveau du nombre de paramètres détectés par Firebug.

[EDIT]
J'ai parlé trop vite. J'ai quelque chose qui ressemble pas mal à une requête dans le POST :

xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WF … action.xsd http://mapserver.gis.umn.edu/mapserver http://localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&amp;PROJECTION=EPSG%3A27582&amp;TYPENAME=estran&amp;FORMAT=image%2Fpng&amp;SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=GetFeature&amp;SRS=EPSG%3A27582&amp;BBOX=50000,2397500,100000,2422500"

Dernière modification par Fol (Mon 02 August 2010 12:11)

Hors ligne

 

#11 Mon 02 August 2010 12:54

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

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Peux tu tester la requête envoyé en post  et voir si cela fonctionne ?

Tu as une extension sympas sous Firefox : poster qui te permet d'écrire et d'envoyer des requêtes POST.

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 Mon 02 August 2010 14:58

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Je viens de tester la requête en post, et j'obtiens l'erreur suivante :
mapserv(): Web application error. Traditional BROWSE mode requires a TEMPLATE in the WEB section, but none was provided.

Quand j'ajoute un paramètre template dans mon mapfile, ca se change en :
msDrawMap(): Image handling error. Unable to initialize image.
msPrepareImage(): General error message. Image dimensions not specified.
msCalculateScale(): General error message. Invalid image width or height.

Je vais continuer de fouiller pour voir si j'arrive à avoir une requête différente.

[EDIT]
Je viens de me rendre compte que la requête émise ( http://localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&amp;PROJECTION=EPSG%3A27582&amp;TYPENAME=estran&amp;FORMAT=image%2Fpng&amp;SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=GetFeature&amp;SRS=EPSG%3A27582&amp;BBOX=50000,2397500,100000,2422500 ) provient de ce que j'ai mis dans le paramètre "schema" de l'objet protocole de ma couche dans OpenLayers... avec un "amp;" rajouté après les caractères "&". J'ai essayé en remettant la requête émise en post dans le "schema". Résultat : je me retrouve avec "&amp;amp;" un peu partout.

Dernière modification par Fol (Mon 02 August 2010 15:14)

Hors ligne

 

#13 Thu 05 August 2010 11:17

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

L'edit précédent semble être une belle fause piste... Et la requete que j'avais trouvé n'est en fait que le schema que j'avais entré en paramètre dans le protocol ^^'.

J'ai l'impression que mon objet OL.Layer.Vector en protocole WFS fonctionne tout à fait correctement.
D'un côté la requête POST envoyée vers mapserver est identique ce qui est envoyé vers une couche Vector TinyOWS/PostGIS.
De l'autre, la réponse ressemble énormément à celle d'une couche OL.Layer.WFS, sauf qu'elle ne contient pas les coordonnées des points de la forme géométrique.
Voici ce que j'obtiens en réponse à la couche Vector en protocole WFS :

Code:

<?xml version='1.0' encoding="ISO-8859-1" ?>
<wfs:FeatureCollection
    xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
    xmlns:wfs="http://www.opengis.net/wfs"
    xmlns:gml="http://www.opengis.net/gml"
    xmlns:ogc="http://www.opengis.net/ogc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.opengis.net/wfs
                        http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd 
                        http://mapserver.gis.umn.edu/mapserver
                        localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&amp;SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=feature:estran&amp;OUTPUTFORMAT=XMLSCHEMA">
    <gml:boundedBy>
        <gml:Box srsName="epsg:27582">
            <gml:coordinates>75096.603132,2409373.548219 80585.157175,2411777.410681</gml:coordinates>
        </gml:Box>
    </gml:boundedBy>
<!-- WARNING: FeatureId item 'NAME' not found in typename 'estran'. -->
    <gml:featureMember>
        <ms:estran>
            <!-- Dans le cas de OL.Layer.WFS, la forme géométrique est ici -->
            <ms:AREA>7.10612e-004</ms:AREA>
            <ms:PERIMETER>1.93870e-001</ms:PERIMETER>
            <ms:COMLIT2_>1176</ms:COMLIT2_>
            <ms:COMLIT2_ID>49</ms:COMLIT2_ID>
            <ms:NOM>ESTRAN</ms:NOM>
        </ms:estran>
    </gml:featureMember>
</wfs:FeatureCollection>

Ce qui est récupéré dans la balise gml:featureMember correspond exactement à ce qui est contenu dans le *.dbf associé à mon *.shp. Le soucis est que les coordonnées des points de la forme géométrique ne sont pas dans ce fichier... Et là je n'ai pas vraiment d'idée sur la façon d'aller les récupérer dans un des autres fichiers du shapefile (*.sbn, *.shp, *.sbx, *.shx).
Changer le protocole WFS par autre chose ?

Bon, ca avancé, mais je ne suis toujours pas arrivé au bout du problème.

Hors ligne

 

#14 Thu 05 August 2010 11:22

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

Re: [Openlayers] Comment afficher un shapefile contenant des points

Comme le dit le WARNING : il ne trouve pas la couche estran appelé par le paramètre "featureType: "estran"," dans OL.

ton mapfile, incomplet, affiche seulement une couche pointLayer ... que tu nommes "points" dans les paramètres wfs_title et wms_title (que tu peux réunir en ows_title pour éviter d'avoir deux lignes.

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 Thu 05 August 2010 12:36

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Bonjour,

Merci de ta réponse, mon mapfile avait effectivement quelques soucis. Je ne m'étais pas plus que ca intéressé au WARNING car il apparaissait aussi avec la classe OL.Layer.WFS.
Le warning a maintenant disparu. J'ai maintenant <ms:estran fid="estran.49">, où 49 correspond au contenu de ce que j'ai mis dans "gml_featureid", COMLIT2_ID ici.

Sauf que ca ne fait toujours pas le lien avec la forme géométrique. =/ (Le shapefile sur lequel je fais mes tests est un des seuls en ma possession à avoir un semblant d'id.)
Je ne sais pas trop ce qui pourrait m'aider du côté de la doc de mapserver. gml_geometries et gml_[nom]_type me semblainent pas mal, mais rien à faire.

Je remet mon mapfile, histoire que ce soit un peu plus clair :

Code:

MAP
    NAME "Test"
    UNITS METERS
    IMAGECOLOR 255 255 255
    SHAPEPATH "../shapefiles"
    TRANSPARENT ON
    EXTENT 70000 2400000 80000 2420000
 
    WEB
        IMAGEPATH    "/var/tmp/"
        IMAGEURL    "/tmp/"
        METADATA
            ### WMS 
            "wms_title"                "WMS Estran"
            "wms_onlineresource"    "localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&"
            "wms_srs"                "epsg:27582"
            "wms_format"             "image/png"
            ### WFS
            "wfs_title"                "WFS Estran"
            "wfs_onlineresource"    "localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&"  ## Recommended
            "wfs_srs"                "epsg:27582"  ## Recommended
        END
    END

    PROJECTION
        "init=epsg:27582"
    END


    OUTPUTFORMAT
        NAME png
        DRIVER "GD/PNG"
        MIMETYPE "image/png"
        IMAGEMODE PC256
        EXTENSION "png"
    END

    ###### Estran #######################
    LAYER
        NAME    estran
        DATA        Estran
        METADATA
            "ows_title"        "Estran" 
            ### WFS 
            "gml_featureid"        "COMLIT2_ID" 
            "gml_include_items"    "all"
            "gml_geometries"    "Estran.shp"
            "gml_Estran.shp_type"    "polygon"
        END
        PROJECTION
            "init=epsg:27582"
        END
        DUMP    TRUE
        TYPE    POLYGON
        STATUS    ON
        CLASS
            COLOR 0 204 204
            OUTLINECOLOR 51 153 153
        END
    END ###### END Estran ######

END ###### END OF Map File  ######

Dernière modification par Fol (Thu 05 August 2010 14:00)

Hors ligne

 

#16 Thu 05 August 2010 14:12

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

Re: [Openlayers] Comment afficher un shapefile contenant des points

Quelques corrections (qui ne créent peut être pas de problème pour le WFS) :

IMAGEPATH    "/var/tmp/"
        IMAGEURL    "/tmp/"


l'url du paramètre IMAGEURL doit tomber sur le répertoire définie par IMAGEPATH : je doute que localhost/tmp/ tombe sur /var/tmp/ mais je peux me tromper si tu as configurer correctement apache.

"wfs_srs"                "epsg:27582"


Mettre epsg en majuscule (et seulement dans ce cas là, pour la définition de la projection dans le paramètre PROJECTION il faut qu'il soit en minuscule.

"wfs_onlineresource"    "localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&"


Je ne sais pas si l'absence de "http://" peut poser problème ....

Je ne voie rien de problématique, les paramètres gml_geometries et gml_Estran.shp_type ne sont pas obligatoire.

Si tu écris une requête GetFeature WFS, avec un extent qui correspond à celui de la couche qu'est ce que cela donne ?

Peux tu tester ton service WFS avec QGIS ou autre application légère qui gère le 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

 

#17 Fri 06 August 2010 09:48

Fol
Participant occasionnel
Date d'inscription: 28 Jun 2010
Messages: 13

Re: [Openlayers] Comment afficher un shapefile contenant des points

Merci Yves ! Ca fonctionne, je reçois enfin toutes les infos de mon shapefile en réponse à la requête POST. Ca venait bien de mon mapfile. Et après un petit réglage dans la couche OL ca s'affiche comme il faut big_smile

Voici la fameuse réponse :

Code:

<?xml version='1.0' encoding="ISO-8859-1" ?>

<wfs:FeatureCollection
    xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
    xmlns:wfs="http://www.opengis.net/wfs"
    xmlns:gml="http://www.opengis.net/gml"
    xmlns:ogc="http://www.opengis.net/ogc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.opengis.net/wfs
                        http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd 
                        http://mapserver.gis.umn.edu/mapserver
                        http://localhost/cgi-bin/mapserv?map=/var/www/tests/estran.map&amp;SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=feature:estran&amp;OUTPUTFORMAT=XMLSCHEMA">
    <gml:boundedBy>
        <gml:Box srsName="EPSG:27582">
            <gml:coordinates>75096.603132,2409373.548219 80585.157175,2411777.410681</gml:coordinates>
        </gml:Box>
    </gml:boundedBy>
    <gml:featureMember>
        <ms:estran fid="estran.49">
            <gml:boundedBy>
                <gml:Box srsName="EPSG:27582">
                    <gml:coordinates>75096.603132,2409373.548219 80585.157175,2411777.410681</gml:coordinates>
                </gml:Box>
            </gml:boundedBy>
            <ms:Estran.shp>
                <gml:Polygon srsName="EPSG:27582">
                    <gml:outerBoundaryIs>
                        <gml:LinearRing>
                            <gml:coordinates>75400.004370,2410536.800205 [un paquet de points...] 75435.159814,2410519.553683 75400.004370,2410536.800205 </gml:coordinates>
                        </gml:LinearRing>
                    </gml:outerBoundaryIs>
                </gml:Polygon>
            </ms:Estran.shp>
            <ms:AREA>7.10612e-004</ms:AREA>
            <ms:PERIMETER>1.93870e-001</ms:PERIMETER>
            <ms:COMLIT2_>1176</ms:COMLIT2_>
            <ms:COMLIT2_ID>49</ms:COMLIT2_ID>
            <ms:NOM>ESTRAN</ms:NOM>
        </ms:estran>
    </gml:featureMember>
</wfs:FeatureCollection>

La requête manuelle me renvoie également ce qui est ci-dessus.

Je met pour finir le code OL qui va avec, on ne sait jamais, ca peut servir :

Code:

var estranV = new OpenLayers.Layer.Vector(
    "estran Vector SHP", {
        strategies: [new OpenLayers.Strategy.BBOX()],
        projection: new OpenLayers.Projection("EPSG:27582"),
        style: featureStyle(1, "#000000", "#FF00FF", 0.5),
        protocol: new OpenLayers.Protocol.WFS({
            version: "1.0.0",
            srsName: "EPSG:27582",
            url: "../cgi-bin/mapserv?map=/var/www/tests/estran.map",
            featureNS: "http://mapserver.gis.umn.edu/mapserver",
            featureType: "estran",
        })
    }
);

Hors ligne

 

Pied de page des forums

Powered by FluxBB