De l'utilité de PostGIS

Problèmes, bugs et difficultés rencontrés sur le site.
Avatar du membre
yip
Messages : 387
Enregistré le : 08 mars 2004, 23:32

De l'utilité de PostGIS

Message par yip »

J'aimerais savoir si je suis le seul a qui ça fait bizarre de "casser" les objets geom dès qu'on veut les sortir de la base ?
(casser = AsGML, Astext..., leur enlever leur signification de géométrie, pour les transformer en chaines et floats qui ne veulent rien dire.
Ces mêmes floats seront ensuite retransformés en géométrie chez le client)

Grace à ce type d'objet, on a gagné une couche d'abstraction.
malheureusement on la reperds aussitôt en les décapsulant aussi sec, pour les traiter a l'ancienne avec des X et des Y.

Comme si on s'en servait juste pour faire des intersects et Within de temps a autre (avantage),
et on luttait contre le reste du temps avec des AsX et AsText pour retrouver le fonctionnement d'avant.

Désolé j'arrive pas à m'y faire. ça me semble pas naturel. pas PostGIS-friendly en fait.
De voir toute l'énergie dépensée dans cette phase de décapsulage, ça me fait bizarre, comme un anachronisme.

Ya sans doute pas de solution parfaite, c'est peut-etre inévitable, mais ça vous fait pas un petit pincement ?
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

non ;-)

Pensée philo-technique du soir :

J'ai l'impression que toute l'informatique se résume à ce schéma, et je pense que ça s'explique relativement bien, chaque outil a son modèle de donnée pour les traiter efficacement selon les besoins qu'on veut de cet outil et lorsque l'on veut faire communiquer deux outils entre eux on passe par un modèle de donnée fait pour l'échange.

Dans mon bidulephone, j'ai un carnet de contact téléphonique, je n'ai fichtre aucune idée de comment il stocke ça en interne (et je m'en fiche un peu, bien que je suppose que ça doit être une base binaire avec index, redondance et que sais-je encore qui lui permette d'être performant) et lorsque je veux transférer ça dans mon logiciel sur mon ordinateur (thunderbird, qui lui stoque dans une base sqlite dont le schéma est prévu pour être performant dans son cadre d'utilisation) je demande au premier de m'exporter au format "vcard" une copie de sa base, que je transmets à thunderbird qui lit le vcard et s'empresse de le stocker dans son sqlite.

L'analogie me semble similaire entre postGIS et OpenLayers. Chacun gère en interne sa sauce (PG avec index, format binaire et OL avec son parseur de géométrie et sans doute une représentation en RAM des géométries), et ça n'a pas de sens à mon avis d'espérer copier d'un modèle interne de l'un vers l'autre car leurs besoins sont différents et la représentation suit ce besoin.

C'est pourquoi PG autant que OL savent gérer un format d'échange commun qu'il faut sortir de l'un pour faire manger à l'autre, et en plus, on a largement l’embarra du choix : géoJSON, GML, WKT, WKB qu'il nous faut choisir selon les additifs qu'on souhaite placer pour éviter d'avoir plusieurs canaux de communication (d'où GML plutôt que WKB pour faire passer nos icones et nos styles, mais on pourrait sans doute choisir WKB)

Ça ne me semble pas étrange car :
yip a écrit :J'aimerais savoir si je suis le seul a qui ça fait bizarre de "casser" les objets geom dès qu'on veut les sortir de la base ?
Je ne pense pas qu'il existe, en premier lieu, "d'objet géométrique" stocké dans les fichiers de PG, pas au sens un "truc" que connaîtrait quelqu'un d'autre que PG, il n'y a qu'une représentation interne, et représentation interne qu'il ne nous est même pas possible d'atteindre.
Le tinyows faisait d'ailleurs exactement ça, faire un ST_GeomFromGML http://lists.maptools.org/pipermail/tin ... 00085.html

Mapnik que j'utilise et qui fonctionne pourtant de local à local (par d'internet entre les deux) demande le format WKB qui est plus concis encore que GML et un peu plus rapide à parser, mais ne touche jamais en direct les géométries stockées dans les fichiers de PG.

Le format WKB c'est ce que tu obtiens en ne demandant aucune conversion à PG, mais même s'il ne sont pas clairement visible, les X et les Y sont là quand même ;-)

Code : Tout sélectionner

test=> select geom from points_gps limit 1;
                        geom                        
----------------------------------------------------
 0101000020E610000000000000000018400000000000804740
(1 ligne)

test=> select st_asEWKB(geom) from points_gps limit 1;
                      st_asewkb                       
------------------------------------------------------
 \x0101000020e610000000000000000018400000000000804740
(1 ligne)


Avatar du membre
yip
Messages : 387
Enregistré le : 08 mars 2004, 23:32

Message par yip »

Merci de la longue réponse Sly.
J'ai l'impression que toute l'informatique se résume à ce schéma, et je pense que ça s'explique relativement bien, chaque outil a son modèle de donnée pour les traiter efficacement selon les besoins qu'on veut de cet outil et lorsque l'on veut faire communiquer deux outils entre eux on passe par un modèle de donnée fait pour l'échange.
Oui, avec la difference que les niveaux sont variables.
rien n'est figé, et des couches au modèle se rajoutent régulièrement.
Au début, les cartes de WRI etaient des PNG sur disque, le modèle de donnée commun etait "les pixels en partant du haut a gauche".
Maintenant le modèle de donnée commun est "une coordonnée WGS84". mais en descendant dans les couches, on trouvera toujours des pixels.
Plus tard, ce sera peut-être "le regard de l'utilisateur" :shock: , mais il y aura encore des WGS84, et dessous tout en bas, des pixels.
Ceux ci etaient pourtant au sommet des couches il y a 10 ans. Et le jour où on a laissé tomber les pixels pour passer a la couche du dessus, les degrés, on y a gagné.
Il me semble qu'on vient de franchir une étape comme ça.

Le format WKB c'est ce que tu obtiens en ne demandant aucune conversion à PG, mais même s'il ne sont pas clairement visible, les X et les Y sont là quand même
Evidemment, en interne tous les outils descendent dans les couches et analysent les data. les X et les Y sont forcément qqpart je me doute, quand même....
Tous les outils GIS font des AsGML/AsWK* a un moment ou a un autre ...
Les datas sont forcement représentés sous forme de float et d'octet.
le AsGML (de la surcouche-scripts PGIS) lui même fait surement appel a des fonctions de conversions blob->decimal (de la couche PostGres) qui elle-mêmes ont des pointeurs C++ sur des dumps? (de la couche libc6 ?)...
C'est trop terre à terre. Chacune fait de l'abstraction pour celle du dessous.
C'est pourquoi PG autant que OL savent gérer un format d'échange commun qu'il faut sortir de l'un pour faire manger à l'autre, et en plus, on a largement l’embarra du choix : géoJSON, GML, WKT, WKB qu'il nous faut choisir selon les additifs qu'on souhaite placer pour éviter d'avoir plusieurs canaux de communication (d'où GML plutôt que WKB pour faire passer nos icones et nos styles, mais on pourrait sans doute choisir WKB)
(aucun de ces formats ne gère de style, a part KML. On est en fait passés par 2 standards: GML et SLD. Il y a 2 canaux de toute façon => Firebug. et c'est pas plus mal pour séparer le data et la mise en forme)

PG et OL, C'est la même chose que Apache et Firefox. Pour dialoguer, les 2 se base sur le standard TCP.
On s'occupe pourtant pas de savoir s'ils se sont concertés pour les JumboTrames ou les buffers d'ACKnowledge :mrgreen:
On a donné a bouffer nos pages HTML à apache, et FF se demerde pour les recevoir et les afficher.
ça marche bien parce qu’il sont du même niveau dans le modèle OSI.
Que ça se fasse par pigeon voyageur ou par rsync, tant que les 2 se comprennent ...

Il y a quand même une difference. OL sait traiter avec la couche de transport (disons GML) mais pas PG.
Ils sont pas au même niveau...
PG ne sait pas générer une couche de transport(il doit pas être fait pour).
Tout ce qu'il sait faire c'est faire un peu de formatage pour faciliter le travail, mais pas au point de gagner une couche. c'est du dirty-hack.
La fonction PG query_as_xml, accompagnée d'une feuille XSLT pourrait a la limite generer cette couche, mais elle se marrie mal avec PostGis, et ça a l'air crade aussi.
Pour moi, on a donc là une inégalité de niveau dans le modèle.(pô grave, juste pour montrer le truc).


On a tout intêret a bosser toujours au niveau le plus haut, et laisser faire les couches du dessous comme elles l'entendent.
par exemple, on touche à HTML, pas au HTTP->TCP (HTML ne veut rien dire pour un routeur)
on va coder en langage objet, pas a sa représentation interne, forcément séquentielle (un CPU est séquentiel, à un moment, le code est transformé)
on s'occupe de Degrés, pas de pixels (les degrés n'existent pas pour un ordi, les pixels, si)...

La reflexion que j'avais c'etait quelles sont les couches que couvrent nos outils, jusqu'à quel point on doit descendre dans les couches du dessous pour rattraper les inégalités... en essayant de ne pas penser technique au début.
Avec le "Grand Bond en Avant", il me semble qu'on a gagnés une couche d'abstraction, mais qu'on ne l'exploite pas a fond. Ceci dit j'arrive pas bien a mettre le doigt dessus ;)
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

yip a écrit : Avec le "Grand Bond en Avant", il me semble qu'on a gagnés une couche d'abstraction, mais qu'on ne l'exploite pas a fond. Ceci dit j'arrive pas bien a mettre le doigt dessus ;)
Je comprend un peu mieux à quoi tu faisais allusion en disant "gagner une couche" j'ai juste l'impression qu'on ira pas bien plus haut à moins de perdre de la flexibilité en l'état actuel des outils qu'on a explorés.
Mais continuons à être ouverts aux nouveautés ;-)