|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Étudiant Inscription : janvier 2008 Messages : 237 ![]() |
Bonjour,
J'étudie actuellement les capacités d'un moteur comme postGIS pour tenter de mieux répondre à mes besoins GIS que ce que le fait actuellement MySQL et un peu de code maison en couche 2. Mon système actuel modélise 2 types d'objets : les points et les chemins (qui peuvent être fermés pour former un polygone). Mon but est de trouver les correspondances exactes dans postGIS. Mes points présentent actuellement deux colonnes lat/lon qu'il est facile de rassembler en une seule colonne de type POINT, ca n'est pas un problème. Par contre pour les chemins, j'utilise 3 tables : Une table qui représente le chemin (son numéro et quelques propriétés propres à tout le chemin), la table des points et une 3ième table pour établir une liaison entre le chemin et les points qui le composent. Ca permet de pouvoir documenter précisément chaque point qui compose le chemin, à la manière de ce que fait Openstreetmap par exemple : il est possible de taguer les Nodes d'une Way. La documentation du type LINESTRING de PostGIS montre visiblement que toutes les coordonnées sont stockées dans la colonne même. Je chercherai donc à produire un LINESTRING avec une suite d'identifiants d'enregistrements (qui comportent une colonne POINT) plutôt que de stocker uniquement les coordonnées des points. Est-ce possible? Merci par avance pour vos réponses. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 163 ![]() |
À partir d'une géométrie vous pouvez extraire ce que vous voulez. Par exemple pour un LINSTRING, vous pouvez extraire le point de position N.
Le but d'une base de données étant de ne pas avoir de redondance, soit vous partez de vos nuages de point et des liens sémantiques entre eux pour constituer une LINESTRING par requête, soit vous partez justement de la LINESTRING pour constituer vos nuages de points. Tout dépend du traitement des données qui devra être fait dans vos applications A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Étudiant Inscription : janvier 2008 Messages : 237 ![]() |
Bonsoir,
Citation:
Le but est cependant de pouvoir lier des données de structure variables (-> jointures) à chaque point mais aussi au chemin complet. L'opération ici ne donnera qu'un objet POINT manipulable par les fonctions spatiales mais il va tout de même, je crois, manquer une clé de jointure. Citation:
Mon modèle actuel (nuage de point + jointure pour constituer un objet chemin qui m'est propre) se suffit à lui-même. Aussi je pensais passer à PostGIS pour bénéficier des traitements spatiaux pour alléger ma couche 2 sans pourtant remettre en cause mes objets. Si la constitution d'une LINESTRING par requête au besoin n'est pas trop lourd pour pouvoir faire des opérations (calcul ou sélection) dessus ensuite, c'est ce qui me conviendrait le mieux. Auriez-vous une idée de la requête à mettre en oeuvre? Merci et bonne soirée. |
||
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 163 ![]() |
Sans un exemple plus concret, difficilement !
PS : vous pouvez venir à mon cours sur le sujet : http://www.orsys.fr/formation-donnees-spatiales.asp Prochaine session le 24 septembre.... A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#5 | |||
|
Membre du Club
![]() Étudiant Inscription : janvier 2008 Messages : 237 ![]() |
Oui je comprends, c'est stupide de ma part.
Voici donc un peu de SQL (des tables MySQL pour l'instant, j'ai adapté le type de la colonne point pour donner une idée de ce à quoi ca pourrait ressembler sous postgre) Je ne donne que les tables principales. S'y ajoutent pour les points et les chemins 2 tables pour y faire correspondre des paires clés/valeur (des "tags") qui ne concernent pas le périmètre de cette étude. Code :
Mon ORM gère lui-même les versions successives d'un même objet dans la base. Ainsi, les chemins et les points disposent de 3 champs essentiels : - record_id : Le numéro d'enregistrement unique dans la table - obj_id : Le numéro d'objet logique (toutes les versions d'un même objet disposent du même numéro d'objet). - version : Le numéro de version. La table chemins_contenu présente des noeuds qui ciblent eux-même les points d'une manière particulière. Le doublet (classe, obj_id) permet de cibler la bonne table de points (il y en a plusieurs). Obj_id est utilisé au lieu de la clé primaire puisqu'un changement de version d'un point obligerait à la restauration de toutes les liaisons aux 4 coins de la base en cas de modification du seul point. Pour info, deux versions ne peuvent pas co-exister à un même instant temporel et d'autres champs qui n'ont pas été indiqués ici permettent de faire le distinguo en fonction de la date. C'est de toute façon intégré au ON de la jointure entre points et chemins_contenu (ON obj_id=... AND time < %TIME%). Un même noeud peut être présent dans plusieurs chemins à la même position (rare mais ça existe). On relie donc simplement chemins et nœuds avec la table chemins_contenuCollection. Je n'ai pas de jeu de test à fournir car tout ceci est encore vide malheureusement. Est-il donc possible en 2 jointures d'obtenir un LINESTRING par requêtes de telle sorte à pouvoir effectuer des opérations géographiques/géométriques (j'hésite encore mais peu importe) dessus? Citation:
|
|||
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 12 163 ![]() |
Oulala, vous me donnez une table en MySQL avec toutes les merdes possible de MySQL qui n'a rien d'un SGBDR et il faudrait que je me plonge dans le nettoyage pendant une heure !!!!
Commencez donc par travailler sous l'outil adéquate et fournir un jeu PG ou au moins en SQL pur ! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() Étudiant Inscription : janvier 2008 Messages : 237 ![]() |
Bonjour,
Oui mes tables viennent de MySQL et je souhaite justement m'en séparer. J'ai pas forcément eu le temps de tout mettre en place, mais voici ce que donne mon schéma sous postgre 9.1, postGIS 1.5.1 (mais migration vers 2.0 dès que possible sur ma prod) et pgadmin III : Code :
Je reste par là pour tout autre problème. A+ |
||
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Étudiant Inscription : janvier 2008 Messages : 237 ![]() |
Bonjour,
Je me permets de relancer ce topic. Moi même n'ayant pas plus progressé sur cette question, peut-être que d'autres auront une réponse à m'apporter suivant le schéma fourni dans le message précédent. Merci par avance. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com