#1 Mon 09 September 2002 15:47
- Wfabrice
- Invité
requete SQL
Bonjour !
Alors voila : j'ai 2 tables (une de traits et l'autre de points : c'est un maillage de reseau ou les points sont a chaque noeud ou extremite de troncon). Tous ces elements sont en fusion.
J'aimerai selectionner les points relies a une seule polyligne. Ya t-il une expression de requete SQL capable de selectionner ces points ?
Merci d'avance
#2 Wed 16 October 2002 10:23
- Zitoucoullet
- Invité
Re: requete SQL
Bonjour,
J'utilise des donnees provenant d'une BD (sql server) que j'interroge via une connexion ODBC sous MI 6.5.Pour des raisons de structure de la BS j'utilise une requete en deux partie:
'Create View xx as
1er bloc Select
Union
2e bloc Select
Select *
from matable,xx
Where cdt de jointure'
Cette requete ne marche pas!
J'aurais voulu savoir si on peut utiliser la commande Create View depuis Mapinfo?
D'avance merci!
PS: je pense que l'on doit pouvoir remplacer cette requete par des requetes imbriquees, mais quelle prise de tete!
#3 Fri 25 October 2002 16:12
- Corinne Cabéro
- Invité
Re: requete SQL
Bonjour,
J'ai une table maille (maillage) et une table routes contenant pour chaque troncon la masse de polluants emis.
Objectif : trouver tous les troncons de routes qui passent dans une maille et calculer de facon proportionnelle a la taille de chaque troncon la valeur en polluant pour chaque maille.
Je n'ai pas trouve la bonne solution par la fenetre SQL.
Quelqu'un a t-il une idee ?
#4 Fri 25 October 2002 17:33
- Pascal Geraut
- Invité
Re: requete SQL
Bonjour
si j'ai bien compris, il faut desagreger une valeur de la table ligne selon la longueur des troncons de ligne qui traversent chaque maille ?
si c'est cela, petit souci car les valeurs ne se desagregent par sur une ligne que l'on decoupe.
j'utilise l'astuce suivante (un peu compliquee) :
1 - table route : ajouter une colonne qui va contenir sa longueur totale (mise a jour colonne avec objectlen), en plus de la valeur de polluant
2 - faire une decoupe de la table route par la maille : il va y avoir en sortie des troncons appartenant a une maille (objet decouper)
3 - dans chaque troncon route decoupe, on trouve : l'identifiant du troncon de depart, la valeur polluant initiale de tout le troncon et la longueur initiale de toute le troncon
4 - ajouter une colonne dans route et y calculer la longueur des troncons apres decoupe (objectlen)
5 - le calcul peut alors etre fait : polluant / longueur initiale * longueur apres decoupe
6 - ensuite les troncons peuvent etre reassembles.
c'est clair ? il y a peut-etre plus simple
cordialement
#5 Mon 28 October 2002 13:26
- Denis Jouin
- Invité
Re: requete SQL
Bonjour !
Votre probleme concerne la repartition de polluants emis par la circulation routiere sur un maillage. Cette question a ete envisagee au ministere de l'equipement par le CERTU (Centre d'Etudes sur les Reseaux, les Transports, l'Urbanisme et les constructions publiques).
Pour cette etude j'ai ecrit un petit outil en mapbasic qui repartit la masse de polluants emis sur chaque maille d'une grille.
Cet outil devrait repondre a votre besoin.
Je vous l'enverrai sur simple demande a denis.jouin@. equipement.gouv.fr
Cordialement
#6 Mon 28 October 2002 20:48
- Elise Henrot
- Invité
Re: requete SQL
Cet outils est-il adaptable pour d'autres types d'information (propagation d'une crue, niveau sonore depuis un lineaire ou un ponctuel, perception olfactive...) ?
#7 Wed 30 October 2002 15:12
- Denis Jouin
- Invité
Re: requete SQL
Bonjour !
Il est possible d'utiliser une selection SQL pour effectuer la repartition souhaitee, en combinant les fonctions overlap et objectlen. La syntaxe suivante saisie dans la boite de dialogue de la selection SQL donne le resultat attendu :
Select Maille.Id,
sum(Polluant*objectlen(overlap(Routes.obj,Maille.obj), mi )/objectlen(Routes.obj, mi ))
from Maille, Routes
where Maille.Obj Intersects Routes.Obj
group by Maille.Id
into Repartition
Par contre cela necessite que la table Maille possede une colonne identifiant (maille.id) et le resultat sera une table non graphique (du au group by) qu'il faut rabouter a la table maille par un autre select.
Il y a une solution plus elegante qui consiste a utiliser la syntaxe SQL de l'ajout de colonne :
Add Column Maille (Polluant Integer)
>From Routes
Set To sum (Polluant * objectlen (overlap(Routes.obj,Maille.obj) , mi ) / objectlen (Routes.obj, mi ))
Where intersects Dynamic
Dans ce cas le resultat est immediatement exploitable. Le seul inconvenient est que cette syntaxe ne peut etre saisie dans la boite de dialogue « Mettre a jour colonne » car celle ci ne propose que les colonnes de la table qui est designee comme origine des valeurs, et qu'une verification en est faite avant validation. La commande doit donc etre saisie, au moins en partie, dans la fenetre mapbasic.
Ce type de requete permet, par exemple, de trouver, a partir d'une table ROUTES et d'une tables DEPARTEMENTS, la longueur totale des routes par departement, ceci en une seule commande.
Cordialement