Pages: 1
- Sujet précédent - Automatiser le calcul des directions & longueurs de lignes - Sujet suivant
#1 Mon 04 February 2013 17:27
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Automatiser le calcul des directions & longueurs de lignes
Bonjour,
Je possède MapInfo version 11.5.2 et Discover 3D version 2012.02 / (Win7).
Objectif : statistique sur des linéaments avec MapInfo / Discover (je suis géologue!).
Problème : calculer automatiquement (sinon, je connais l'outil MapCad pour le faire manuellement) les valeurs de l’azimut et de la longueur de tous les linéaments (= lignes et polylignes) d'une carte.
Il me faut donc :
1) calculer la direction des lignes par rapport au Nord géographique ;
2) calculer la longueur de ces lignes;
3) faire une boucle pour récupérer la totalité de ces informations dans la table et remplir ainsi 2 colonnes (que j'aurai préalablement ajoutées: direction / longueur) de cette table avec la totalité des objets traités (plusieurs centaines);
4) ensuite... je devrais réussir seul à dessiner une rosace avec Discover !
J'ai lu différentes approches (déjà anciennes) de ce "problème", sans réussir à trouver une solution claire et aboutie (pour mon niveau de compréhension!).
Question: comment faire ? Existe-t-il un add-on ?
Petite précision : la programmation et la trigo ne font pas partie de mes atouts (si tenté est que j'en eus !) et MapBasic reste pour moi un langage mystérieux.
Merci à Vous de m'avoir lu ... et répondu ...
JM Regnoult
Hors ligne
#2 Mon 04 February 2013 19:32
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Salut et bienvenue,
Ce type de traitement peut être fait avec la FMB (Fenêtre MapBasic) Options --> Voir Fenêtre MapBasic
Cette fenêtre couplée avec un petit Log appelé Scriptgen peut t'aider.
N'hésite pas à faire des recherches sur le forum avec comme mot clef "Scritpgen" "générateur de scripts".
A+
Joël
Hors ligne
#3 Tue 05 February 2013 08:01
Re: Automatiser le calcul des directions & longueurs de lignes
Bonjour,
Petit rappel : depuis la version 9.0, MapBasic est gratuit :
http://www.pbsoftware.eu/fr/support/tel … basic.html
Cela permet d'automatiser des traitements sans passer par Scriptgen... à condition d'avoir quelques notions de programmation.
Bonne journée,
Christophe Damour (SIGéal)
Hors ligne
#4 Tue 05 February 2013 09:45
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Merci Joël pour ta promptitude.
Comme je l'écrivais dans mon post, je ne suis pas un chantre de la
programmation. toutefois je vais aller fouiller le "Scriptgen" sur le forum.
JMR
Hors ligne
#5 Tue 05 February 2013 09:45
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Merci Christophe pour ta réponse.
J'y aurais appris "l'avantage" de Mapbasic sur Scriptgen.
Toutefois j'ai mal dû rédiger ma demande d'aide, car mon "problème" est le
dessin d'un graphe en rosace à partir d'un fouillis de lignes plus ou moins
droites, qui sont la matérialisation de traces de "failles" (plusieurs
centaines) sur une carte.
L'automatisation n'est donc pas ma préoccupation ... pour le moment !
J'attends donc toujours un éclairage sur mon "histoire de rosace".
A vous lire.
JMR
Hors ligne
#6 Tue 05 February 2013 10:46
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Salut à vous deux,
Je ne comprend pas tout
MapBasic c'est de la programmation pure et dure (production d'outil compilé en .mbx)
La FMB c'est utilisé quelques requêtes MapBasic au travers d'une fenêtre de commandes
On va dire --> la programmation en dose homéopathique
Scriptgen est juste là pour dupliquer les commandes pour arriver à une automatisation.
Je te mets en pièce jointe ce qui est faisable avec la FMB
Voir "Calculer un angle par rapport à une droite Horizontale"
PS:Pour en revenir à scriptgen, ce petit logiciel permets de dupliquer des commandes et donc être utile pour tout logiciel ayant une fenêtre de commande --> Autocad, Arcgis, Mapinfo, Fenêtre de commande Dos etc...........
et aussi un gros avantage, il est facilement portabilisable donc sur une clef USB.
A+
Joël
Dernière modification par Spacejo (Tue 05 February 2013 14:55)
Hors ligne
#7 Tue 05 February 2013 14:34
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Re
Pour Tes longueurs de segments:
Ajoute un champ à ta table en Décimal
Ouvre la Fenêtre MapBasic avec Options --> Voir Fenêtre MapBasic
Puis tu colles (avec les modifs pour ton cas personnel) cette commande dans la Fenêtre
Code:
Update Ta_Table Set Ton_Champ_Longueur = ObjectLen(obj, "km")
Tu auras déjâ tes distances
Pour l'angle (voir la pièce jointe)
Enfin pour le reste je te laisse potasser ceci:
Pour les formules --> http://williams.best.vwh.net/avform.htm#Crs
Ceci pour compléter --> http://www.forumsig.org/showthread.php? … ht=azimuth
A+
Joël
Dernière modification par Spacejo (Tue 05 February 2013 15:54)
Hors ligne
#8 Wed 06 February 2013 20:18
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Merci Joël de rebondir sur les tenants et aboutissants de MapBasic et
Scriptgen, mais vous êtes tous les deux beaucoup plus calés que moi sur le
sujet. Alors je lis consciencieusement ... mais je ne sais toujours pas
comment résoudre mon "problème" de lignes et rosaces.
Concrètement, il me faudrait extraire l'azimut de chaque lignes... avec la
contrainte que ce ne sont pas toujours des droites (puisque ce sont des
failles / linéaments et que la Nature n'est pas que pure Géométrie !).
Je sais que ArcGis a une routine qui fait ce genre d'opération... mais
peut-être pas MapInfo / Discover.
Discover fait des rosaces... mais il lui faut une table avec des azimuts.
Merci pour la réponse.
JM Regnoult
Hors ligne
#9 Wed 06 February 2013 20:20
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Merci Joël pour ces précisions qui sont vraiment dans le coeur de mon sujet.
Pour ce qui est des Longueurs... je comprends ce que tu m'écris et je
"sens" que je vais en tirer qq. chose.
Pour les angles, c'est bcp. plus "rigolo" et j'ai lu sur le forum plus d'un
article sur le sujet... pour me rendre compte que ce n'est pas simple. Ton
lien conforte mon point de vue... mais je reconnais que ça ressemble à ce
que je dois réussir à faire.
J'ai grillé beaucoup de temps à faire du surplace sur ce "problème" et mon
boulot s'enlise. Je vais donc déblayer un peu le bureau et revenir après
sur mes rosaces... et te laisser aussi bosser.
Je te tiens au courant.
Sympa de ta part !
A+
JMR
Hors ligne
#10 Wed 06 February 2013 21:42
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Salut,
Pour ce qui concerne tes failles (pas de problème car il te faudra extraire les points de début et de fin).
Il existe des outils pour ça ---> En voilà 2 --> http://www.directionsmag.com/files/view … nts/139018
---> http://www.routeware.dk/toolbox.php ---> Voir "Add Nodes"
Maintenant si tu suis le pdf (l'angle est mesuré par rapport à une horizontale) --> en changeant la formule tu auras l'angle par rapport à une verticale.
1-Extraire les points de début et de fin de tes failles
2-Crée le code pour une routine (calcul de l'angle avec la verticale grâce aux points extraits--> pour une faille)
3-Automatisation de cette routine grâce à une liste de tes points (début et fin) pour chaque faille (avec Scriptgen)
4-Traçage de tes rosaces avec les éléments contenus dans ta table (champs longueur et azimuth)
Voilà le plan d'attaque
A+
Joël
Dernière modification par Spacejo (Wed 06 February 2013 22:06)
Hors ligne
#11 Wed 06 February 2013 23:55
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Bonjour Joël,
Merci pour le plan d'attaque ... mais je ne vois pas de quel PDF tu parles. Ou bien j'ai zappé un fichier ?!
Pourtant je me souviens avoir lu qu'il fallait prendre garde à la méthode utilisée pour la mesure de l'azimut : par rapport à la verticale ou l'horizontale.
SVP, pourrais-tu me dire de quel PDF tu parles ?
A+
JM Regnoult
Hors ligne
#12 Thu 07 February 2013 15:17
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Salut,
Le pdf est celui que j'ai mis en pièce jointe ci dessus.
A+
Joël
Hors ligne
#13 Thu 07 February 2013 16:31
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Bonjour Joël,
Ok, Ok ! J'avais déjà rangé le PDF en lieu sûr (trop sûr!) et quand tu m'en as reparlé d'un PDF, je n'étais pas connecté sur Georezo avec mon code.
Oui, je sais, c'est C...! Mais maintenant, les choses sont rentrées dans l'ordre et je comprends le sens de ton message.
La balle est dans mon camp.
Fini bien ta journée.
JMR
Hors ligne
#14 Sat 16 February 2013 09:07
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Bonjour Joël,
Ton aide a été efficace car j'ai réussi à extraire mes longueurs (facile), puis les coordonnées des extrémités de mes lignes (plus compliqué car il s'agissait de polylignes que j'ai dues "éclater" et j'ai ratatouillé pour le Code). Enfin, je me sens un peu plus familier avec la "FMB" (qui jusqu'à lors restait pour moi une fenêtre "magique")
Et maintenant je cale sur les angles...
Cordialement.
JMR
Hors ligne
#15 Sat 16 February 2013 12:03
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Salut,
As tu extraits les points (début et fin) de tes segments?
Avec add nodes de la toolbox (c'est faisable).
Puis extraire les coordonnées de ces points (utilisation de coordinate Extractor) c'est en natif dans Mapinfo il me semble.
Si tu ne trouves pas --> http://testdrive.mapinfo.com/techsupp/m … D6006E3B70
Pour la détermination de l'angle --> Essaye de trouver la procédure pour un segment.
Pour l'automatisation on regardera aprés
A+
Joël
Dernière modification par Spacejo (Sat 16 February 2013 14:01)
Hors ligne
#16 Sun 17 February 2013 20:11
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Merci pour le suivi, Joël,
Grâce à tes premières explications, j'ai réussi à extraire mes points de début et fin de segments.
Maintenant je bloque sur l'extraction automatique de l'azimuth des segments.
Explication:
- voici le code que j'ai utilisé dans la FMB pour calculer l'azimuth :
Code:
Select * from MaTable where (Y2-y1) > 0 and (X2-x1) < 0 Into azimut '==> NW => angles de 90 à 180° Update MaTable Set azimut = 180 - atn(abs(Y2-y1)/abs(X2-x1))*57.2958 Select * from MaTable where (Y2-y1) < 0 and (X2-x1) < 0 Into azimut2 '==> SW => angles de 180 à 270° Update MaTable Set azimut2 = 180 + atn(abs(Y2-y1)/abs(X2-x1))* 57.2958 Select * from MaTable where (Y2-y1) < 0 and (X2-x1) > 0 Into azimut3 '==> SE => angles de 270 à 360° Update MaTable Set Azimut3 = 360 - atn(abs(Y2-y1)/abs(X2-x1))* 57.2958
Explication sur les paramètres:
- (x1,y1) coord. début segment et (X2,Y2) coord. fin segment;
- azimut : écriture anglaise sans "h" = direction par rapport au Nord géographique du segment. "Azimut" est le nom d'une colonne dans MaTable. J'ai créé une colonne pour chaque quadrangle (azimut, azimut2, azimut3).
Préalables:
- MI 10.5.2 sous Win7.
- des essais ont été faits avec des cartes en Long-lat DD WGS84 et en UTM-WGS84.
- tous les segments sont dans le même sens.
Remarque :
- pourquoi MapInfo emplit-il toutes les lignes des colonnes "azimut", alors que je lui impose des conditions (delta y) - (delta x) etc . ? Mon code est-il mal rédigé !?
Résultats:
- je trouve des azimuths corrects, sauf pour certains segments aberrants (environ 10% ?!). Par contre lorsque j'utilise l'outil "Calculer la direction" de MapCad dans MI 10.5.2, je trouve que tous les azimuths sont corrects en mesurant les segments un par un (tu parles d'un boulot!).
Interprétation possible (selon moi!): l'origine des erreurs provient de ce que je ne maîtrise pas le point d'origine des segments (puisque le calcul a été fait automatiquement par MI) et que Mapinfo "cafouille" à ce moment.
Solution : As-tu une suggestion ? (moi je suis sec).
Au plaisir de te relire.
JM Regnoult
Hors ligne
#17 Sun 17 February 2013 22:06
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Est ce que ceci t'éclaire un peu:
Code:
Select * from MaTable where (Y2-y1) > 0 and (X2-x1) < 0 Into Selection1 Update Selection1 Set azimut = 180 - atn(abs(Y2-y1)/abs(X2-x1))*57.2958 Select * from MaTable where (Y2-y1) < 0 and (X2-x1) < 0 Into Selection2 Update Selection2 Set azimut = 180 + atn(abs(Y2-y1)/abs(X2-x1))* 57.2958 Select * from MaTable where (Y2-y1) < 0 and (X2-x1) > 0 Into Selection3 Update Selection3 Set azimut = 360 - atn(abs(Y2-y1)/abs(X2-x1))* 57.2958
A+
Joël
Dernière modification par Spacejo (Sun 17 February 2013 22:09)
Hors ligne
#18 Mon 18 February 2013 00:05
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Bonsoir Joël,
Pas de repos pour les braves :-(
Ton Code ne change pas tellement les choses par rapport à ce que j'ai pu déjà faire grâce à tes conseils. Pour être plus clair, tu trouveras ci-joint une copie d'écran et un fichier texte du tableau de mes segments.
La colonne la plus à droite correspond à des mesures faites "à la main" (outil MapCad) ... donc justes, par rapport au Nord géographique !
Le "malheur" est qu'il n'y a pas de règle absolue qui se dégage du résultat dans le tableau (ci-joint).
Comme je le disais dans mon précédent post, ça doit venir du fait que les points de début des segments ne sont pas tous orientés de la même façon (bien que j'ai pris soin de vérifier que tous les segments sont dans le même sens).
Merci pour ton aide active ... ça fait du bien d'être épaulé.
JMR
PS : désolé , mais je n'ai pas réussi à attacher mes fichiers en ligne ... comme recommandé sur le site ! Je fais glisser mon icône sur le message ou son bord, mais rien ne se passe ... Comment fait-on ? Merci
Merci pour m'avoir expliqué la "jointure". J'espère que les 2 fichiers (1 petite image et 1 Excel) sont là !
Dernière modification par data_public (Mon 18 February 2013 10:19)
Hors ligne
#19 Mon 18 February 2013 07:52
- nicoboud
- Membre
- Lieu: Nantes
- Date d'inscription: 12 Oct 2007
- Messages: 860
Re: Automatiser le calcul des directions & longueurs de lignes
PS : désolé , mais je n'ai pas réussi à attacher mes fichiers en ligne ... comme recommandé sur le site ! Je fais glisser mon icône sur le message ou son bord, mais rien ne se passe ... Comment fait-on ? Merci
Poste ton message puis clique sur "Modifier", tu auras alors la main pour ajouter un fichier joint.
Nicolas.
Co-modérateur du forum Mapinfo
Utilisateur Mapinfo et QGIS
Hors ligne
#20 Mon 18 February 2013 10:29
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Salut
J'avais une question --> pourquoi 2 nouveaux champs azimut?
La différence entre mon code et le tien c'est que mes "update" ce font uniquement sur mes sélection succéssives.
Pour ton cas à chaque fois tu "update" toute ta table donc tes conditions et donc tes requêtes ne servent pas.
Code:
Select * from MaTable where (Y2-y1) > 0 and (X2-x1) < 0 Into Selection1 Update Selection1 Set azimut = 180 - atn(abs(Y2-y1)/abs(X2-x1))*57.2958 Select * from MaTable where (Y2-y1) < 0 and (X2-x1) < 0 Into Selection2 Update Selection2 Set azimut2 = 180 + atn(abs(Y2-y1)/abs(X2-x1))* 57.2958 Select * from MaTable where (Y2-y1) < 0 and (X2-x1) > 0 Into Selection3 Update Selection3 Set azimut3 = 360 - atn(abs(Y2-y1)/abs(X2-x1))* 57.2958
A essayer avec tes 3 champs "azimut"
PS:Je regarde tes fichiers pour mieux comprendre ta problèmatique
Peux tu m'envoyer le fichier .xlsx en .dbf --> plus facile pour moi je suis resté en excel 2003
A+
Joël
Dernière modification par Spacejo (Mon 18 February 2013 10:44)
Hors ligne
#21 Mon 18 February 2013 12:00
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
D'accord Joël, je comprends ce que tu me dis et pourquoi j'update à chaque
moi "MaTable" (je pensais que les 2 codes était équivalents. Avec le tien
je créé un nouveau fichier .TAB et avec le mien, je repasse à la moulinette
tout le fichier initial.)
J'attends que tu puisses avoir le temps de lire mes fichiers.
J'avoue être impatient de ta réponse ... mais prends tout le temps qu'il
faut.
Bonne semaine.
JMR
Joël, j'ai mis le tableau de données sous 2 formats qui devraient te permettre de les ouvrir.
Je répète, la manip que tu m'as conseillée fonctionne. Le problème est que certains azimuths sont corrects (après remise au Nord géographique par moi-même), mais quelques données sont aberrantes par rapport aux conditions imposées <, > etc. C'est ce que je ne comprends pas !
Et encore merci pour le temps passé... qui ne suspend jamais son vol... à moins que tu connaisses une commande MBX pour ça :-)
JMR
Dernière modification par data_public (Mon 18 February 2013 13:16)
Hors ligne
#22 Sun 24 February 2013 21:28
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: Automatiser le calcul des directions & longueurs de lignes
Salut,
Après une petite analyse, je me suis aperçu que tu as des entités qui ont été digitalisées du nord vers le sud (donc à l'envers).
J'avais une question --> pourquoi avoir besoin de 4 colonnes "azimut".
A+
Joël
Hors ligne
#23 Mon 25 February 2013 08:43
- data_public
- Participant occasionnel
- Lieu: Pierrevert
- Date d'inscription: 11 Jan 2013
- Messages: 37
Re: Automatiser le calcul des directions & longueurs de lignes
Bonsoir Joël,
J'ai résolu mon problème d'intersection de segments grâce à tes conseils
qui m'ont guidés vers la solution.
Maintenant on peut effacer toutes nos discussions et pour ceux qui auraient
le même besoin, je conseille cet excellent outil : GeoMapVector.
"GeoMapVector for MapInfo calculates the azimuth (trend, orientation)
and/or the length of line or polyline objects in a MapInfo table. The
procedure works on the current Selection of objects and either updates
pre-existing trend and/or length columns or produces a new table with the
added columns.
Référence : GeoMapVector© for MapInfo is a product of Rod Holcombe,
Department of Earth Sciences, The University of Queensland, Queensland, 4072
Lien : http://www.holcombe.net.au/software/rod … .htm"
Nota : Auparavant j'ai pris la précaution de vérifier que tous mes
"segments" (j'en avais presque 1600 !) étaient tous dans le même sens.
J'ai choisi le sens du Sud vers le Nord.
Je pense que ce lien intéressera pas mal de gens.
Merci encore et je pense que le débat est clos (pour ma part en tout cas !)
sur ce sujet.
JM Regnoult
Hors ligne
Pages: 1
- Sujet précédent - Automatiser le calcul des directions & longueurs de lignes - Sujet suivant