Aller au contenu

[WIP]La transformation de systeme de projection Sans Plug-in autocad


Curlygoth

Messages recommandés

Ancien post :

 

Bonjour,

 

Juste pour infos et mettre les choses au clair :

Je sais qu'il existe des programmes pour convertir des points d'un système et les transformer vers un autre...

c'est juste que mes boss ne veulent pas dépenser dans ce genre de programme...

Qui pour moi sont indispensable lorsqu'on travail dans un bureau de topographie...

 

 

 

Tous les documents sont disponible sur le site de l'IGN :

 

donc je ne vais rien inventer ni révolutionner (sauf pour mes collègues et moi même XD)

 

J'ai lu la procédure de calcul, donc je connais la théorie...

J'ai chercher pour essayer de simplifier les transformations mais c'est peine perdu...

Donc j'ai décider d'y allez juste "bourrin" et

donc je vais développer traduire en VBA le code pour mettre ce système en place !

 

Allez c'est parti :

 

Je démarre par créer des fonctions pour chaque algo et j'ai commencé par le 13

(je prends les algos dans l'ordre : et je traite ceux qui doivent être appellé)

 

Bien sur ce que je poste ici est vérifié par les jeux d'essais

 

Function TRANSFORMATION_COORDONNEES_7_PARAMETRES_2_SYSTEME_GEO(T, D, R, U)
'Algo 013
Dim V(0 To 2) As Double
'T Translation
'D Facteur d'echelle
'R Rotation autour de l'axe (radian)
'U Vecteur de coordonnées cartésienne tridimensionnelle dans le systeme 1
x = 0
y = 1
Z = 2
V(x) = T(x) + (U(x) * (1 + D)) + U(Z) * R(y) - U(y) * R(Z)
V(y) = T(y) + (U(y) * (1 + D)) + U(x) * R(Z) - U(Z) * R(x)
V(Z) = T(Z) + (U(Z) * (1 + D)) + U(y) * R(x) - U(x) * R(y)
TRANSFORMATION_COORDONNEES_7_PARAMETRES_2_SYSTEME_GEO = V
End Function

 

Puis le 38 qui fait appel à l'algo 001 / 002 / 014 / 015 / 043

Function CALCUL_LATITUDE_ISOMETRIQUE(premiere_excentricite_ellipsoide, Lati)
'Algo 001
e = premiere_excentricite_ellipsoide
R = Lati
F1 = Tan(PI / 4 + R / 2)
F2 = (1 - e * Sin(R)) / ((1 + e * Sin(R)) ^ (e / 2))
E_M1 = 1 - e * Sin(R)
E_P1 = 1 + e * Sin(R)
E_MP = E_M1 / E_P1
E_PUIS = E_MP ^ (e / 2)
CALCUL_LATITUDE_ISOMETRIQUE = Log(F1 * E_PUIS)
End Function

 

 

EDIT :

Donc je vais mettre ici le code VBA après avoir télécharger et installé CircéBATCHFrance

 

Après l'installation, on ajoute le dossier du Circebatch.exe dans le PATH de windows voir video

 

en test il aparrait qu'il ne trouve pas les fichier donc j'ai copier le dossier pour le mettre dans c:/users/NOMPC

 

les commandes via cmd.exe fonctionne

 

[codage en cours]

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

STOP STOP si j ai bien compris tu n'as NI Covadis, NI AutoCAD MAP (ou AutoCAD CIVIL) !?

Et tu desires faire de la reprojection Lambert ...

 

Mais pourquoi tu n'installes pas l 'excellent outil GRATUIT de l'IGN : IGNMap

qui reprojette de nombreux formats: DXF, SHP, MIF-MID, GCD, etc

http://ignmap.ign.fr/

Ce que utilisent par exemple les gens qui ont un "simple" AutoCAD ou AutoCAD LT !

 

BON OK, il faut "Enregistrer sous en DXF" pour IGNMap

MAIS c quand meme pas le bout du monde !

ET APRES, il faut ouvrir en DXF et Re-enregistrer en DWG ...

 

De plus IGNMap a de nombreuses fonctionnalites Tip-Top !!

Je l'ai installe sur TOUS mes PCs (comme QGIS) et pourtant j'ai a disposition MAP, CIVIL, Covadis ...

 

LA SANTE, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous !

 

@ Fraid : oui mais il ne convertit que des points ou des listes de points ? ou il peut convertir des dwg ou dxf ?

 

Edit : du coup tu peux envoyer des coordonnées avec tel systeme et il te répond avec un point transformer ? car ça je pourrais boucler sur chaque entité et les déplacer ^^

 

@lecrabe : POUAH ! Mais ça a l'air énorme et ultra bien pour moi ! (je comptais faire un peu le même principe avec une liste des système d'origine vers un système de projection voulu

Pourquoi je n'installe pas pas l'outil ? parce que je savais même pas qu'il existait ! du coup il est installé ! et j'ai essayer même ! mais la, il me dit erreur de lecture du dxf ligne 3326...

(le dxf a convertir à des polylignes avec élévation que je peux mettre en 0 et des blocs de PTTOPO avec deux attributs MAT et un ALT)

 

Edit : l'erreur de la ligne dans Xrecord dépend de la modififcation que je fait sur le dessin !

Mais bon ce que je retiens c'est qu'il y a peut etre des API à connaitre ou d'autre programme qui pourrait m'éviter cette corvée !

Lien vers le commentaire
Partager sur d’autres sites

Au final j'ai mis tout en Z=0

il y a 2 polylignes et 12 point GPS bloc PTTOPO avec attribut

 

J'ai essayé : 2013 / 2010 / 2000 et malheureusement toujours avec une erreur xrecord :-)

 

c'est dommage ! XD

VILLE TYPE 001122 GEO.zip

Lien vers le commentaire
Partager sur d’autres sites

Edit : du coup tu peux envoyer des coordonnées avec tel systeme et il te répond avec un point transformer ? car ça je pourrais boucler sur chaque entité et les déplacer ^^

 

En fait, tu convertis 2 points éloignés,

puis la commande AutoCAD Aligner qui utilise un algorithme qui t’évite de reprendre chaque point (il le fait lui même)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

SNIFF SNIFF il est possible que IGNMap ne supporte pas "bien" les XRecords !

Meme probleme "possible" avec les objets Metiers ARX / Proxys / etc ...

 

OK avec Fraid car si tu generes par CIRCE 2 "bons" points en diagonale aux extremites du projet

Alors APRES un simple ALIGNER AutoCAD sera acceptable ...

 

SVP tu nous dis ...

 

LA SANTE, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

BON j'ai refais le test avec MON IGNMap et cela fonctionne bien !

SAUF qu'il ne faut pas de XRecords et autres trucs speciaux dans le DXF ... Voir mon message precedent !

 

Reprojection de Lambert 1 Nord vers du Lambert 93 France Entiere par exemple ...

 

Donc j'ai pris ton DWG dans les environs de Bethune en Lambert 1 Nord !

J'ai fais un SIMPLE WBLOC sur TOUT le DWG pour le filtrer parfaitement et produire un autre DWG "propre"

Que j'ai enregistre en DXF 2010 et LA IGNMap l'a parfaitement reprojete en DXF ...

 

De plus ce qui est GENIAL, c que IGNMap travaille en Batch

Donc si tu as N DXF "propres" dans ton dossier DXFINPUT

Tu auras N DXF reprojetes dans ton dossier DXFOUTPUT ...

 

Qu'on se le dise !!

 

LA SANTE, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

alors je fais la commande aligner avec 2 points... pour des blocs

 

SAUF qu'il ne faut pas de XRecords et autres trucs speciaux dans le DXF ... Voir mon message precedent !

Je savais pas qu'on avait des entités proxy ou autre dans nos relevés terrains xD

Au pire je prendrais un Lisp qui nettoie les plans, vous en avez fait plein pour nettoyer ce genre de chose je vais retrouver ça

 

Mais la mon objectif c'était de convertir chaque point de polyligne et refaire la polyligne histoire d'être plus que parfait XD

 

et du coup @LeCrabe si je le met en bloc et que je le reprojette, il va juste traiter le point d'insertion du bloc non ?

il prendra pas 2 points (tu sais l'espece d'angle entre 2 systemes) ?

 

apres j'aimerais bien avoir les 7 paramètres

('T Translation X Y Z

'D Facteur d'echelle

'R Rotation autour de l'axe (radian) X Y Z

'U Vecteur de coordonnées cartésienne tridimensionnelle dans le systeme 1 X Y Z)

entre chaque système !

 

puis la commande AutoCAD Aligner qui utilise un algorithme qui t’évite de reprendre chaque point (il le fait lui même)

une commande que je connais tres bien XD

vu que c'est ce que je fais je mets 2 ou 3 points suivant 2D ou 3D je les transfo via http://geofree.fr/gf/coordinateconv.asp (precis au cm dommage...)

 

Alors je vais être honnête je sais envoyer des requêtes SQL à une base de données mais je ne sais pas du tout envoyer une requete Batch ?

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

1) Un simple WBLOC filtre parfaitement les DWGs ...

Mais bien verifier avant qu il n'y a pas de Proxy (venant de Covadis ou CIVIL par exemple)

 

2) No comprendo ta demande sur une Polyligne !

 

3) J'ai dessine sur le DWG en L1N, une Polyligne 2D qui fait le tour des 8 points sur les 2 "lignes"

Depuis le point au Nord-Ouest dans le sens Trigo ...

aire 35.0683909 -- périmètre 98.4039280

au niveau du point X=617698.1171850 Y=315648.2828252 Z=0.0000000

au niveau du point X=617713.5052793 Y=315643.7142172 Z=0.0000000

au niveau du point X=617728.7576286 Y=315639.1122014 Z=0.0000000

au niveau du point X=617744.1586246 Y=315634.5172109 Z=0.0000000

au niveau du point X=617744.7828751 Y=315633.5443999 Z=0.0000000

au niveau du point X=617729.4495101 Y=315638.1603780 Z=0.0000000

au niveau du point X=617714.1432879 Y=315642.7594326 Z=0.0000000

au niveau du point X=617698.7775585 Y=315647.3169882 Z=0.0000000

 

4) Et donc sur le DWG en L93 (reprojete par MAP), voici la nouvelle Polyligne 2D qui fait le tour ...

aire 35.1755036 -- périmètre 98.5541629

au niveau du point X=670615.9259210 Y=7049214.0087296 Z=0.0000000

au niveau du point X=670631.2978528 Y=7049209.3016389 Z=0.0000000

au niveau du point X=670646.5335506 Y=7049204.5622504 Z=0.0000000

au niveau du point X=670661.9181753 Y=7049199.8286240 Z=0.0000000

au niveau du point X=670662.5350346 Y=7049198.8490216 Z=0.0000000

au niveau du point X=670647.2183212 Y=7049203.6030883 Z=0.0000000

au niveau du point X=670631.9286451 Y=7049208.3399722 Z=0.0000000

au niveau du point X=670616.5790171 Y=7049213.0358027 Z=0.0000000

 

5) La meme polyligne redessinee en L93 sur le DXF/DWG reprojete par IGNMap ...

aire 35.1754951 -- périmètre 98.5541637

au niveau du point X=670615.9262780 Y=7049214.0119050 Z=0.0000000

au niveau du point X=670631.2982100 Y=7049209.3048140 Z=0.0000000

au niveau du point X=670646.5339080 Y=7049204.5654260 Z=0.0000000

au niveau du point X=670661.9185330 Y=7049199.8317990 Z=0.0000000

au niveau du point X=670662.5353920 Y=7049198.8521970 Z=0.0000000

au niveau du point X=670647.2186780 Y=7049203.6062640 Z=0.0000000

au niveau du point X=670631.9290020 Y=7049208.3431480 Z=0.0000000

au niveau du point X=670616.5793740 Y=7049213.0389780 Z=0.0000000

 

6) Et si j avais reprojete avec COVADIS, le resulat aurait ete legerement different !

 

Voila je ne peux pas faire PLUS !

Et il est normal qu il y ait qq differences suite a la reprojection !

 

Bien sur que lors d une reprojection on ne traite que le point d insertion des blocs !!

Sinon un simple carre ne serait plus qu un polygone 4 cotes quelconque apres reprojection !!!

 

LA SANTE, Bye, lecrabe "fatigue"

 

PS: si tu veux re-inventer l eau chaude, pourquoi pas !?

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

2) No comprendo ta demande sur une Polyligne !

 

c'est facile j'ai une polyligne dans un systeme L1N (j'ai fait un copier coller)

 

j'enregsitre la liste de point

au niveau du point X=617698.1171850 Y=315648.2828252 Z=0.0000000 [Programme de calcul avec les 7 parametres] donne X=670615.9259210 Y=7049214.0087296 Z=0.0000000

au niveau du point X=617698.7775585 Y=315647.3169882 Z=0.0000000 [Programme de calcul avec les 7 parametres] donne X=670616.5790171 Y=7049213.0358027 Z=0.0000000

 

puis je redessine ma polyligne avec les points du nouveau systeme

Lien vers le commentaire
Partager sur d’autres sites

je suis auto entrepreneur et salarié rien d'incompatible ;-)

 

disons que je voulais créér un programme pour mon entreprise

(histoire qu'elle ait des inventaires à jour en temps réél, que les conducteurs de travaux arrete de faire leur planning au jour le jour et fasse 5h30 19h...)

que les tables se mettent à jour suivant leur planning enfin bref un truc de fou

 

Ils n'en veulent pas et veulent pas que je travaille plus...

Donc j'utilise mon temps libre pour d'autres qui en ont besoin (garage automobile, réseau transport logistic etc, formation vba excel / autocad)

et puis voila mon boss est content car je lui fait pas concurrence et reste en l'an 1950... et moi j'arrondis mes fins de mois !

 

Après je cherche ailleurs (A bon entendeur) XD

Lien vers le commentaire
Partager sur d’autres sites

je ne sais pas du tout envoyer une requete Batch ?

c'est très simple à la base

le but est d'envoyer une ou des instruction à un programme par l'intermédiaire de la console windows.

que tu ouvre en tapant cmd.exe dans la barre de démarrage windows.

ou en exécutant un .bat, qui contient les commandes que tu veux exécuter

exemple pour circé

 

"C:\AcaDev\CirceBatch\CirceBatch.exe" -init Circe.ini -mode 0 -type 2 -sys1 2 -sys2 24 -typcoor1 3 120 -typcoor2 2 2 1 -H 0.0 -E 465767.8938 -N 2261906.57 > "C:\Data\Return9TDD.txt"

Ici du Lambert 2 Etendu au degres decimaux

Lien vers le commentaire
Partager sur d’autres sites

ok attends je réfléchis... maintennant je digère :

-mode 0 -type 2 -sys1 2 -sys2 24 -typcoor1 3 120 -typcoor2 2 2 1 -H 0.0 -E 465767.8938 -N 2261906.57

 

WOW !

 

ok mais le numéro du mode du systeme 1 / du systeme 2 / du type de coordonne / etc c'est ou ?

 

H le Z

E le X

N le Y

 

sa te génére un "C:\Data\Return9TDD.txt"

 

qu'ensuite je peut lire et donc traiter !

 

Ici du Lambert 2 Etendu au degres decimaux

je te crois hein ^^' mais as tu une preuve ? xD

 

d'ailleurs j'ai trouver ça C:\ProgramData\IGN\Circe\5.2.1\France\DataFRnew.txt un rapport avec tes numéros de référence ?

Lien vers le commentaire
Partager sur d’autres sites

mmm... OK ! je vais faire mes tests et si vraiment j'ai un problème je referais un post !

 

(Maintennnant la question c'est qu'en Lisp il a su virer la fenetre, va falloir en faire autant en vba !)

 

Merci à tous !

 

Merci @lecrabe pour être toujours présent

 

Merci @Fraid pour les ressources !

Lien vers le commentaire
Partager sur d’autres sites

il manque quelque définition de variables

 

oui et c'est bien dommage !

les X Y en translation y sont le coef C et n aussi, mais les R et U (voir mon 1ier topic ...n'y sont pas)

c'est bien pour transformer du Lambert 1 en 2 ou autre (mais c'est tout....)

 

c'est pour ça que j'ai télécharge toute la base d'algorythme !

 

apres j'ai 2 solutions grace @lecrabe et @Fraid ! donc je vais deja passer par leur méthode

 

si ça marche pas ou que c'est trop comliqué j'arreterais la et je reprendrai l'écriture des X (je ne sais pas combien d'algo pour y arriver) algo en VB

mais bon au vu du temps gagner pour les 2 méthodes proposer je peux prendre le temps de bien tester ces 2 dernieres

Lien vers le commentaire
Partager sur d’autres sites

pour infos 'arrive a envoyer des données je suis content

 

le bloc ressemble à ça :

 

Sub REQUETE_CIRCEBATCH()

Dim PT(0 To 2) As String

PT(0) = "568270.665"

PT(1) = "361027.632"

PT(2) = 0

retval = Shell(ligne_BATCH("Lambert 1 Nord", "LAMBERT-93", PT), vbMinimizedNoFocus) 'fenetre sans focus et minimiser pas de soucis de fenere noir dans une boucle

Debug.Print retval

End Sub

 

J'ai fais une fonction qui va chercher le meridien d'originie le code etc... ce qui donne une ligne

 

la ligne envoyer ressemble donc à ça : "C:\Program Files (x86)\IGN\Circé France Batch 4.3\CirceBatch.exe -init Circe.ini -mode 0 -type 1 -sys1 2 -sys2 24 -typcoor1 3 101 -typcoor2 3 140 -x 568270.665 -y 568270.665 -z 568270.665"

du coup je suis content ^^

la ou je le suis moins c'est sa réponse :

il me répond : au gres de ces humeurs : 6152 puis 3076 XD enfin bref j'ai pas l'impression qui me retourne la valeur attendu

 

[réponse que j'attends dans n'importe quel forme]

Lambert 93

x = 621484.05

Y = 70950820.01

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant



×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité