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 22 July 2009 12:07

Jule
Participant occasionnel
Date d'inscription: 21 Jul 2009
Messages: 48

[MapFish / OpenLayers / FeatureServer / PostGIS] Besoin de conseils

Bonjour

Je découvre depuis quelques semaines toute la communauté et les solutions de web mapping libres et malgré tout ce que j'ai pu trouver quelques zones floues m'empêchent de bien comprendre tout le système et donc de faire mes choix.

A terme mon projet consiste à :
- afficher une carte du monde
- éditer un vectorLayer avec les outils de dessins classiques
- afficher ce vectorLayer en overlay (évidemment...)
- sauvegarder ces informations ajoutées sur un serveur

Pour ce que j'ai découvert en terme d'APIs j'ai fais le choix d'utiliser MapFish et donc implicitement :
- GeoExt / ExtJS : framework d'édition
- OpenLayers : rendu cartographique
De plus, je compte utiliser (peut-être) :
- FeatureServer : serveur R/W de données spatiales
- PostGIS : serveur R/W de données spatiales en bases SQL

Au point où en est mon projet, je suis capable de tout faire mais en utilisant un code de tutoriel que je ne comprend qu'à moitié et qui utilise FeatureServer en WFS-T pour sauvegarder dans un fichier au format DBM.



Maintenant que vous connaissez le décor voilà mes interrogations :


    [1] Fonctionnement d'un serveur WFS-T

Si j'ai bien compris lorsque je dessine mes features elles sont encodées dans un format que je décide en utilisant par exemple :

Code:

geojson = new OpenLayers.Format.GeoJSON();
[...]
var json = geojson.write(vectorLayer.features);

Ensuite pour les envoyer j'utilise la fonction :

Code:

url = "/htmlfeatureserver/featureserver.cgi/scribble";
new OpenLayers.Ajax.Request(url, 
        {    method: 'post', 
            postBody: json,
            requestHeaders: ['Accept', 'application/json'],
            onSuccess: success,
            onFailure: function(xhr) {
                $('info').innerHTML = "Failed upload (status code "+xhr.status+"). Check your URL.";
            }
        }
);

Ainsi mes features sont sauvegardées dans un fichier .scribble au format DBM par défaut dans un chemin que j'ai spécifié dans le fichier de configuration du FeatureServer.
Mes questions étant :
- Le format des features (GeoJSON, WFS, OSM...) importe-t-il réellement ? Si oui, comment choisir ?
- Lorsque je fais ma requête Ajax, les features formatées GeoJSON dans mon application sont-elles formatées WFS-T pour communiquer avec le serveur ?
- Si oui, cela signifie-t-il que dans mon fichier .scribble au format DBM les informations sont au format WFS ?
- Si non, sont-elles au format GeoJSON ou bien le serveur WFS-T fait le transcodage ?


    [2] Performances

Il faut savoir que mon serveur Apache va contenir tous les services en local, c'est-à-dire que l'interface d'édition web, le FeatureServer et le serveur PostGIS seront sur la même machine.

- Ainsi je me demande si le protocole transactionnel WFS-T est le meilleur moyen ou bien existe-t-il une autre façon de sauvegarder ces données sans passer par un serveur intermédiaire ?
- Sachant qu'il risque à terme d'y avoir beaucoup de features sur la carte, quel est le meilleur format de stockage en terme de performances ? DBM, WFS, PostGIS, OSM, ... ?

- Enfin dernière chose, j'ai cru comprendre qu'il était possible de faire des requêtes afin que le serveur ne renvoi que les features nécessaires à l'affichage via la BBOX et le niveau de zoom, est-ce correct ? Si oui, est-ce que cela signifie que les informations sont stockées de manière optimales (ABR, classement par niveau de zoom, ...) avec des algorithmes de recherche efficaces ou bien est-ce que le serveur parcourt toutes les données de manière linéaire pour y pêcher celles qui correspondent à la requête ?


    [3] Conclusion

Désolé pour la longueur mais je tiens à récolter tous vos commentaires et conseils tout en vous fournissant un maximum d'informations sur ma situation.
N'hésitez surtout pas à me reprendre si j'ai dit des choses erronées ou incomplètes.

Enfin, je pense que ce thread pourra aider beaucoup de gens à mieux comprendre le processus de fonctionnement des WFS-T avec MapFish/OpenLayers qui présente, à mon avis, des lacunes conséquentes dans la documentation, mais ceci est une autre histoire...


Merci.

Jule

Hors ligne

 

#2 Wed 22 July 2009 13:44

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

Re: [MapFish / OpenLayers / FeatureServer / PostGIS] Besoin de conseils

Bonjour,

Tout d'abord FeatureServer ne gère pas le WFS, c'est un serveur basé sur le concept RESTFul. Il n'utilise pas les standards de l'OGC (WMS, WFS, et compagnie).

Les services WFS, le GeoJSON, le GML sont des formats de données, généralement utilisé pour transférer des données d'une appli cliente vers une appli serveur. Au final les données sont stockées dans le format choisi dans la configuration. Concernant le format DBM, il faut lire le fichier pour voir ce qu'il y a dedans. Cela ne me parait pas optimale pour la gestion des données spatiales.

Généralement on se tourne vers deux formats : Shapefile ou PostGIS (pour les formats publics ou libres). Pour un grand nombre de données, le format de stockage préconisé est la base de données (le temps de connection est minime par rapport au temps de récupération des données). La base de données avec cartouche spatiale ou le format shp propose un certaine nombre d'index pour optimise la rercherche.

- Le format des features (GeoJSON, WFS, OSM...) importe-t-il réellement ? Si oui, comment choisir ?


Oui et non, mais à priori à ton niveau cela dépend plus des choix techniques. Certaines personnes (recherche un message précédent, quelqu'un à posait la même question) font une différence entre les technos RESTFul et celle de l'OGC.

- Lorsque je fais ma requête Ajax, les features formatées GeoJSON dans mon application sont-elles formatées WFS-T pour communiquer avec le serveur ?


Cherche la doc sur les webservice OGC car là on voit que tu ne comprend pas à quoi sert un service WFS.

- Si oui, cela signifie-t-il que dans mon fichier .scribble au format DBM les informations sont au format WFS ?


non le WFS est un format d'interopérabilité, de transfert en quelque sorte, pas de stockage.

- Sinon, sont-elles au format GeoJSON ou bien le serveur WFS-T fait le transcodage ?


Le serveur fait le transcodage.

Note qu'utiliser MapFish et FeatureServer me semble faire doublon.

- Ainsi je me demande si le protocole transactionnel WFS-T est le meilleur moyen ou bien existe-t-il une autre façon de sauvegarder ces données sans passer par un serveur intermédiaire ?


Il faudra toujours un serveur puisque tu as choisi d'utiliser une appli cliente couplé à une appli serveur. Cette appli serveur peut être quelque chose de très simple ou plus complexe (mais avec plus de contrainte). Il existe deux manières d'envoyer des données pour sauvegarde : WFS-T et RESTFul.

- Sachant qu'il risque à terme d'y avoir beaucoup de features sur la carte, quel est le meilleur format de stockage en terme de performances ? DBM, WFS, PostGIS, OSM, ... ?


Voir plus haut. DBM ne me semble pas être optimisé pour les données spatiales, OSM pas mieux. WFS n'est pas un format de stockage wink

- Enfin dernière chose, j'ai cru comprendre qu'il était possible de faire des requêtes afin que le serveur ne renvoi que les features nécessaires à l'affichage via la BBOX et le niveau de zoom, est-ce correct ? Si oui, est-ce que cela signifie que les informations sont stockées de manière optimales (ABR, classement par niveau de zoom, ...) avec des algorithmes de recherche efficaces ou bien est-ce que le serveur parcourt toutes les données de manière linéaire pour y pêcher celles qui correspondent à la requête ?


Voir plus haut.

J'espère que cela sera plus clair.

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

Jule
Participant occasionnel
Date d'inscription: 21 Jul 2009
Messages: 48

Re: [MapFish / OpenLayers / FeatureServer / PostGIS] Besoin de conseils

Tout d'abord un grand merci car vos réponses sont exactement ce que j'attendais !

En effet vous me faites remarquer que je n'avais pas du tout fait le discernement entre RESTful et WFS-T !


Maintenant je vais juste revenir sur une notion que j'avais semble-t-il complètement compris de travers... Le service WFS & Cie.

Tout d'abord je vais vous donner l'adresse de tutoriel qui semble-t-il m'a beaucoup induit en erreur : http://geotribu.net/node/44.
Peut-être que certaines corrections pourraient y être suggérées par vos remarques avisées !
Typiquement :

http://geotribu.net/node/44 a écrit:

Résumé du tutoriel :
Nous apprendrons, au moyen de FeatureServer, à mettre en place un serveur WFS supportant des requêtes de mise à jour, suppression et création d'objets géographique.


Ce qui entre en contradiction avec votre première remarque...


Question préliminaire :
WFS est un Web Service ou un protocole (ou les deux...) ?
J'aurais tendance à dire que le "serveur WFS" est un Web Service tandis que "WFS" est un protocole dont les spécifications sont maintenues par OGC.
(cf. Définition WFS et Définition d'un Web Service)

Sources de données & Formats de données :
Arrêtez moi si je me trompe :
Sources de données = application serveur qui fournit les données spatiales.
Formats de données = format des données spatiales lors des l'échanges client/serveur.
Autrement dit sur un exemple :
---------------------------------------------------------------------------------------------------------
                    BDD                       |           Serveur           |                   Client
PostGIS (Source de données) <= | => (Transcodage) <= | => JSON (Formats de données)
---------------------------------------------------------------------------------------------------------

Principe du WFS :
Si je ne m'abuse j'ai lu que le principe d'échange et de traitement d'informations avec un serveur WFS passe par une URL formatée.
Quand je posais la question :

- Lorsque je fais ma requête Ajax, les features formatées GeoJSON dans mon application sont-elles formatées WFS-T pour communiquer avec le serveur ?


Ce qui me tracassait était le fait de lire que FeatureServer savait lire le GeoJSON mais que puisqu'il faisait du WFS je pensais qu'il ne pouvait recevoir que des URLs formatées au "format WFS". Alors que je viens de me rendre compte que l'objet formaté JSON est directement envoyé à FeatureServer.
Il est évident que j'ai quelques lacunes dans mes connaissances en FeatureServer et que je vais aller me documenter un peu mieux... Je vous questionnerai à ce sujet si jamais le besoin s'en fait sentir ! wink

Principe du WFS-T :
Arrêtez moi toujours si je me trompe, celui-ci est un WFS amélioré de possibilités transactionnelles, à savoir l'ajout, la modification et la suppression de features avec gestion de verrous d'édition. D'ailleurs il semblerait que WFS-T soit en fait une appellation exotique donnée par certaines personnes pour faire la différence avec un serveur WFS disponible seulement en lecture : autrement dit l'appellation "WFS" englobe l'appellation "WFS-T".


Choix des serveur :

Note qu'utiliser MapFish et FeatureServer me semble faire doublon.


Au temps pour moi... Je suis une vraie bille à force de chercher à droite et à gauche j'avais complètement perdu de vue la partie MapFish Server... -_-'

Stockage :
Vos propos rejoigne donc l'idée que je m'étais faites à savoir que je vais très certainement opter pour une base avec PostGIS.

WFS-T ou RESTful :
Après une documentation rapide j'ai la vague impression que fondamentalement il s'agit de la même chose mais que dans l'idée et dans les spécifications il y a quelques différences.
La question qui en découle : quels sont les avantages de tel ou tel concept dans le cadre de mon projet ? D'instinct je serais poussé à utiliser WFS-T puisque maintenu par OGC mais bon...



En tout cas encore merci c'est déjà beaucoup plus clair pour moi même si ça manque encore un peu de pratique ! wink


Jule

Dernière modification par Jule (Wed 22 July 2009 16:53)

Hors ligne

 

#4 Wed 22 July 2009 17:11

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

Re: [MapFish / OpenLayers / FeatureServer / PostGIS] Besoin de conseils

WFS est un standard dont les spécifications sont maintenues par OGC et ceux-ci sont gérés par un serveur, les services WFS  utilisent le protocole (HTTP)

REST utilise aussi le protocole HTTP, mais de manière plus complète car il utilise les possibilité DELETE, UPDATE, SELECT en plus de GET et POST (j'espère ne pas dire de bêtise). Plus d'information : http://fr.wikipedia.org/wiki/Representa … e_Transfer

Le concept de REST utiliser à fond si je puis dire le protocole HTTP contrairement aux standards de l'OGC. C'est, je pense, le principale reproche que certains font. Le web propose déjà des protocoles puissants sous utilisés.

Je regarderai le tutorial de GeoTribu, mais je crains que la réponse ne soit pas celles que tu as proposés.

Sources de données = endroit où son stocké les données. Celles-ci sont stocké dans un format.
Formats de données = manière dont les données (spatiales) sont stockés (binaire, suite de coordonnées, nomenclature plus contraignante, etc.)

Je compléterai plus tard pour le WFS-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

 

#5 Thu 23 July 2009 10:40

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

Re: [MapFish / OpenLayers / FeatureServer / PostGIS] Besoin de conseils

Bonjour,

Je viens de passer quelques minutes sur la doc de Featureserver et je comprend mieux la partie format=WFS. En fait Featureserver se comporte pour certain aspect comme un serveur WFS, notamment pour la prise en charge de la bbox. Il a la possibilité de renvoyer les données sous la forme de plusieurs format : GeoJSON, GeoRSS et WFS/GML.

Par exemple, dans le code de GeoTribu :

Code:

    wfs = new OpenLayers.Layer.WFS(
        "WFS", "featureserver.py/scribble?format=WFS", 
        {maxfeatures: "100"}, 
        {extractAttributes: true, displayInLayerSwitcher: false}
    );

On ne retrouve pas l'option layers qui est censé définir les noms des couches, celles-ci sont définie dans l'url et non par les paramètres, toujours sur le site de GéoTribu :

Code:

http://myfeatureserver.com/featureserver.cgi/mylayer/all?
    maxfeatures=25
    &bbox=-124.1,47.2,-123.9,47.5
    &queryable=category,species
    &category=fun
    &species=mongoose
    &color=brown

C'est une astuce intéressante je trouve 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

 

#6 Thu 23 July 2009 10:49

Jule
Participant occasionnel
Date d'inscription: 21 Jul 2009
Messages: 48

Re: [MapFish / OpenLayers / FeatureServer / PostGIS] Besoin de conseils

Merci pour les renseignements, je reste tout de même intrigué par l'interprétation des deux expressions employées dans le tutoriel de GeoTribu, même si en faisant abstraction du tutoriel vos définitions me sembles judicieuses !

Merci mille fois, j'ai dors et déjà une bien meilleure compréhension de tout cet environnement et vous avez donné des réponses, d'une qualité indéniable, à toutes mes interrogations.

J'attends le bonus WFS-T avec impatience ! wink
EDIT: L'attente aura été courte -> cf. post juste au dessus ! ^^

Dernière modification par Jule (Thu 23 July 2009 10:51)

Hors ligne

 

Pied de page des forums

Powered by FluxBB