#1 Fri 08 February 2008 14:51
- Daniel
- Membre
- Lieu: Victoriaville, Québec
- Date d'inscription: 6 Sep 2005
- Messages: 2028
SQL avec lien géographique
Bonjour
Mapinfo 9.0.2. Je dispose d'une couche de polygones et d'une couche ponctuelle. La couche de polygone représente la surface que couvre une orthophoto tandis que la couche ponctuel représente le (pseudo) centroide de l'orthophoto. Je dis pseudo car le centroide de mes polygones n'est pas toujours directement au même endroit que la couche ponctuelle.
Ma couche de polygone a été fait à partir d'un petit logiciel qui extrait les quatres coins que l'on retrouve dans le fichier TAB de l'orthophoto pour créer un fichier texte délimité. Par la suite, on relie les quatres coins pour former les polygones. Dans la couche ponctuelle, on y retrouve la base de données des orthophotos (nom, date de prise de photos, etc...). Je cherche à transférer l'information de la couche ponctuelle à la couche de polygone. Jusqu'à présent, il n'y a pas de problème car je peux utiliser la fonction à l'intérieur de pour faire le lien entre les deux table. Par contre, il n'y a pas régularité dans la prise de photo. Donc, il est possible que je retrouve plus d'un centroide dans un polygone. Comment je peux faire pour assigner la base de données de mon fichier ponctuel à celui des polygones? Je crois que le centroide est la clef!!!
Voir fichier joint. Carré bleu = zone couverte par l'ortho, petit carré bleu = centroide du carré et point rouge = table ponctuel.
Merci
Daniel
De retour à la géomatique
Hors ligne
#2 Fri 08 February 2008 23:53
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: SQL avec lien géographique
Bonjour
La distance entre centroïde bleu et ponctuel rouge est toujours assez réduite
On peut donc utiliser la distance entre ces deux entités en questionnant les deux tables (poly_ortho et points_bd) et en utilisant comme critère dans la clause where:
distance(centroiX(poly_ortho.obj),centroidY(poly_ortho.obj),centroiX(points_bd.obj),centroidY(points_bd.obj),"m")<100
si on prend 100 m comme distance limite.
nb: taper dans la fenêtre MapBasic Set CoordSys Table poly_ortho (puis 'enter' sur la ligne) pour forcer les calculs dans la projection de poly_ortho
Hors ligne
#3 Mon 11 February 2008 19:13
- Daniel
- Membre
- Lieu: Victoriaville, Québec
- Date d'inscription: 6 Sep 2005
- Messages: 2028
Re: SQL avec lien géographique
Salut
Merci Maurice. Je vais essayer cette fonction mais je ne suis pas certain de bien comprendre qand appliquer cette dernière.
Daniel
De retour à la géomatique
Hors ligne
#4 Mon 11 February 2008 20:37
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: SQL avec lien géographique
Et pour cause: ma réponse est loin d'être explicite...elle est même fausse puisqu'on ne peut pas utiliser cette expression dans une mise à jour !!
La solution risque d'être plus laborieuse:
- numéroter les rectangles (par rowid) s'ils n'ont pas déjà d'identifiant unique
- sur une copie de la table rectangle, transformer ceux-ci en cercles de 100 m de rayon (par exemple) par
update copie_table set obj=createcircle(centroidX(obj),centroidY(obj),100)
précédé comme évoqué par un set coordsys table copie_table et set distance units "m" dans la FMB
- mettre à jour les attributs des cercles par ceux des ponctuels rouges: là on peut utiliser le critère "within"... (on peut aussi faire une requête entre ces deux tables: le résultat joindra toutes les colonnes d'un coup)
- finir par une jointure entre la table originale de rectangles ma_table et la table de cercles copie_table sur le critère de l'égalité de numéro (ou d'identifiant unique)
Il y a peut être plus élégant mais ...il est tard
Hors ligne
#5 Wed 13 February 2008 02:00
- Daniel
- Membre
- Lieu: Victoriaville, Québec
- Date d'inscription: 6 Sep 2005
- Messages: 2028
Re: SQL avec lien géographique
Bonjour
Merci Maurice. J'avais trouvé une solution semblable à la vôtre (la dernière!).
J'ai, en premier lieu, essayé de trouver la distance la plus grande entre le centroide des polygones et le centre des photos. J'ai trouvé jusqu'à plus de 500 m. J'ai donc changé de méthode.
J'ai donné un ID unique à mes carrés, et par la suite, en faisant une copie des centres de photos et ajoutant une colonne ID vide, j'ai attribué le ID de mes carrés à celui des centre de photos en utilisant une relation géographique (à l'intérieur de...). Je me suis retrouvé avec les erreurs dont je parlais dans le premier post mais il n'y en avait qu'une quinzaine sur 455. Pas mal mais cette étape et la plus petite car je dois faire la même chose mais pour 1300 données. Je vais essayer d'utiliser votre méthode.
En passant, on retrouve dans le fichier .TAB d'une image, les quatres coins de l'image en question. Est-il possible ou existe-t-il une façon plus rapide de créer le carré vecteur de ces quatres coins? Ma méthode est facile et simple mais longue si on a plusieurs polygones!!!
Merci
Daniel
De retour à la géomatique
Hors ligne
#6 Wed 13 February 2008 11:54
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: SQL avec lien géographique
...Est-il possible ou existe-t-il une façon plus rapide de créer le carré vecteur de ces quatres coins? ...l
Le plus simple:
- utiliser cet outil pour créer la couche logique des images
- copier cette couche logique et dans le TAB de cette copie passer IsSeamless à FALSE
- renommer cette table qui est le tableau d'assemblage vectoriel "propre" des images
ps: vous pouvez même munir ce tableau d'un hotlink pour que le clic sur un rectangle ouvre l'image correspondante ...
Hors ligne