Aller au contenu

Messages recommandés

Posté(e)

Bonjour bonjour !

 

Je viens vous voir car j'ai une idée derrière la tête :

Actuellement lorsque je travail sur des projet , je jongle entre différents Systèmes de Coordonnées (Lambert93, CC7, CC48 le plus souvent).

Or lorsque je reçois des fichiers, ils ne sont jamais géoréférencé, et je doit souvent "découvrir" le SC qui leur correspond.

Ma démarche actuelle :
 - 
commande ID,
 - je clique un point au milieux du plan
 - je récupère les X/Y
 - je me rend sur : https://app.dogeo.fr/Projection/#/coords-to-points
 - je met mes X/Y dans le bandeau de droite, clique sur l'épingle violet
 - et hop, j'ai ma projection!

 

En soit c'est pas compliqué, mais je le fait régulièrement, et c'est le genre de manip répétitive que je pense être optimisable.

Ce que j'aimerais, c'est lancer une commande, cliquer sur un point, et que automatiquement ça m'ouvre dogeo et remplisse le X/Y.

Et là ... Isoler le X/Y, c'est simple, getpoint, car, cadr et on est bon.

par contre ouvrir une page web et implanter mes X/Y dedans ...

Ou alors je part sur une fausse route, et il y a autrement pour trouver le SC de mes fichier ... ?

 

Des bisou

Lispeur éternel débutant!
Autocad Map3D 2023
Covadis-Autopist 18.2

Posté(e) (modifié)

sinon

Attention les emprise sont à vérifier !!!

(setq listesys (list ;Liste des systèmes géodésiques 
        ;       Nom         Code  Type  EPSG                  Emprise
        (list "Lambert93"  "140"  "24" "2154" (list 99000 6040000)   (list 1240000 7120000))
        (list "RGF93.CC42" "8142" "24" "3942" (list 1200000 1100000) (list 1800000 1300000))
        (list "RGF93.CC43" "8143" "24" "3943" (list 1200000 2100000) (list 1800000 2300000))
        (list "RGF93.CC44" "8144" "24" "3944" (list 1200000 3100000) (list 1800000 3300000))
        (list "RGF93.CC45" "8145" "24" "3945" (list 1200000 4100000) (list 1800000 4300000))
        (list "RGF93.CC46" "8146" "24" "3946" (list 1200000 5100000) (list 1800000 5300000))
        (list "RGF93.CC47" "8147" "24" "3947" (list 1200000 6100000) (list 1800000 6300000))
        (list "RGF93.CC48" "8148" "24" "3948" (list 1200000 7100000) (list 1800000 7300000))
        (list "RGF93.CC49" "8149" "24" "3949" (list 1200000 8100000) (list 1800000 8300000))
        (list "RGF93.CC50" "8150" "24" "3950" (list 1200000 9100000) (list 1800000 9300000))
        (list "NTF.Lambert-1C-ClrkIGN" "120" "2" "27571" (list 45000 1100000) (list 1100000 1380000))
        (list "NTF.Lambert-2C-ClrkIGN" "120" "2" "27572" (list 45000 1600000) (list 1202000 2679000))
        (list "NTF.Lambert-3C-ClrkIGN" "120" "2" "27573" (list 250000 3000000) (list 1100000 3400000))
        (list "NTF.Lambert-4C-ClrkIGN" "120" "2" "27574" (list 489000 4117000) (list 600000 4320000))
        (list "NTF.Lambert-1-ClrkIGN" "101" "2" "27561" (list 45000 100000) (list 1100000 380000))
        (list "NTF.Lambert-2-ClrkIGN" "102" "2" "27562" (list 45000 100000) (list 1100000 400000))
        (list "NTF.Lambert-3-ClrkIGN" "103" "2" "27563" (list 250000 0) (list 1100000 400000))
        (list "NTF.Lambert-4-ClrkIGN" "104" "2" "27564" (list 489000 117000) (list 600000 320000))
    )
) 
;getsys
;Arg: pt liste de coordonées d'un point
;Retourne la liste des systèmes éventuelement utilisés ou nil
(defun getsys ( pt / sys syst)
    (if (= (setq sys (getvar 'cgeocs)) "")
        (progn
            (setq sys nil)
            (foreach syst listesys
                (if (and    (> (car pt) (car(nth 4 syst)))
                            (< (car pt) (car(nth 5 syst)))
                            (< (cadr pt) (cadr(nth 5 syst)))
                            (> (cadr pt) (cadr(nth 4 syst)))
                     )
                    (setq sys (cons (car syst ) sys))
                )
            )
        )
        (setq sys (list sys))
    )
    sys
)

si cela peut t'aider

Modifié par Fraid
Emprise à vérifier
Posté(e)

Bonjour,

Si tu as Covadis 

Le menu Covadis 2d/systèmes de projections / affecter une projection au dessin, 

Covadis va te proposer en gras le système le plus probable en fonction des coordonnées du centre de la vue.

Thierry Garré

 

Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap

Posté(e)

Alors, je tourne sous Map3D et Covadis, et je parle de plan dessinés dans un référenciel (CC47 ou autre) mais le système n'est pas "déclaré" dans le fichier.

 

Effectivement Covadis propose les plus probables, mais la liste des probables peut être longue, et ca oblige à refaire ma manip pour savoir le quel de ces probables est le bon ...

 

Le fait d'afficher une carte avec les possibles permet de rapidement faite son choix entre les possibles

 

Lispeur éternel débutant!
Autocad Map3D 2023
Covadis-Autopist 18.2

Posté(e)

@Fraid, un peu surpris de tes emprises CC (XMax) dans ton Lisp. Normalement X0 c'est 1 700 000m pour 3° de longitude et ensuite c'est de -600 kms de Ouessant à +400kms Strasbourg (ou Munchhausen), donc pour moi, Xmin 1 100 000 et XMax 2 100 000 (et non pas 1 800 000).

 

Olivier

Posté(e)
Il y a 1 heure, lecrabe a dit :

Si ton DWG a le BON Systeme de Projection , tu peux l afficher dans un champ dynamique

en allant chercher la variable System :  CGEOCS

Ha ouai, super intéressent (ça vas rentrer dans mon cartouche)
Dommage que la variable soit en lecture seul ... 😅

Par contre ça ne résout pas ma question, car il faut déclarer le SC pour que la variable la stock.

Lispeur éternel débutant!
Autocad Map3D 2023
Covadis-Autopist 18.2

Posté(e)

Allé, je me lance !


Ca fait quelque mois que j'ai pas ouvert de .lsp ou .dcl, donc on se dérouille un peut :

Déjà, une boite de dialogue en DCL sur laquelle je puisse m'appuyer :

image.png.95192d4a940cc9646453aa0adfbb1078.png

GEOREF : dialog { 
  label = "Georef";
  : row { : column { : text { key = "PromptX";
                              label = "X=";
  }}
          : edit_box { key = "EditX";//EditX depuis le LSP
                       edit_width = 25;
                       fixed_width = true;
  }}// fin de row
  :  row { : column { : text { key = "PromptY";
                        label = "Y=";
  }}
           : edit_box { key = "EditY";//EditY depuis le LSP
                        edit_width = 25;
                        fixed_width = true;
  }}// fin de row
  spacer;
                : column { 
                : row { 
                : boxed_column { label ="Choisissez une projection :"; 
                : list_box { 
                                key = "ListeSC"; 
                                value = ""; //ListeSC depuis le LSP
                                } // fin de list_box
                } // fin de boxed_column
       } // fin de row
ok_cancel; //bouton de validation par défaut
     } // fin de column
}//fin de GEOREF

Le tout mené par 4 routines LISP.
Inspiré de l'exercice DCL-09 de @didier
Et BROWSER vient de Y.Aubry ic

(defun c:Georef (/ pt ) 
  (if (getcname "MAPCSASSIGN") 
    (progn 
      ;ajouter un teste sur la variable "CGEOCS"
      (setq pt (getpoint "Selectionnez un point du dessin : "))
      (browser "cad.kerlom.fr/topographie_coordonnees.php#")
      (DCLGEOREF (rtos (car pt)) (rtos (cadr pt)))
      (command "_FILEDIA" 0)
      (command "_MAPCSASSIGN" Choix-Liste)
      (command "_FILEDIA" 1)
    )    
    (prin1 "\nNécessite une version Map3D ou Civil 3D")
  )
  (print)
)

(defun DCLGEOREF ( EditX Edity / dcl_id ddiag lst) 
  (setq dcl_Id (load_dialog "GEOREF.dcl")
        lst (list "Lambert93" "RGF93.CC42" "RGF93.CC43" "RGF93.CC44"
                  "RGF93.CC45" "RGF93.CC46" "RGF93.CC47" "RGF93.CC48"
                  "RGF93.CC49" "RGF93.CC50" "NTF.Lambert-2-ClrkIGN"
            )
  )
  (new_dialog "GEOREF" dcl_Id)
  (start_list "ListeSC" 3)
  (mapcar 'add_list lst)
  (end_list)

  (set_tile "EditX" EditX)
  (set_tile "EditY" EditY)
  (action_tile "cancel" "(done_dialog 1)" )
  (action_tile "accept" "(fonction)(done_dialog 2)" )
  (setq ddiag (start_dialog))

  (unload_dialog dcl_Id)
) ;_ Fin de defun

(defun fonction()
    ;;; extrait le numéro dans la liste
    (setq Choix_String(get_tile "ListeSC"))
    ;;; si le numéro n'est pas vide
    (if(/= Choix_String "")
       (progn
       ;;;extrait le numéro choisi et le convertit en integer
       (setq Index_Integer(atoi Choix_String)) 
       ;;; extrait le numéro de la liste
       (setq Choix-Liste (nth Index_Integer lst)) 
       )
      
      ;;; si rien n'est choisi
      (progn
         (setq Index_Integer -1)
         ;;; met l'index à -1
         (setq Choix-Liste nil) 
         ;;; et vide la variable Choix-Liste
       )
    )
)

;; Ouverture d'un navigateur
;; Recherche dans l'ordre suivant : 
;; Google Chrome, Opera, Mozilla Firefox, Microsoft Edge, Internet Explorer
(defun browser ( url )
    (setq url (strcat "\"" (vl-string-translate "/" "\\" url) "\""))
    (vl-some '(lambda ( exe ) (and (findfile exe) (startapp exe url)))
        (list
			(strcat "C:\\Program Files (x86)" "\\Mozilla Firefox\\firefox.exe")
			(strcat (getenv "programfiles") "\\Google\\Chrome\\Application\\chrome.exe")
			(strcat "C:\\Program Files (x86)" "\\Google\\Chrome\\Application\\chrome.exe")
			(strcat "C:\\Users\\" (getenv "UserName") "\\AppData\\Local\\Programs\\Opera\\opera.exe")
			(strcat "C:\Program Files (x86)" "\Microsoft\Edge\Application\msedge.exe")
			(strcat (getenv "programfiles") "\\Internet Explorer\\iexplore.exe")
        )
    )
)

 

Pour les premiers tests ça ne semble pas trop mal marcher (sous Map 3D 2023). Avec quelques remarques :
 - Au lancement d'Autocad Map 3D, si ma première action c'est lancer Georef, j'ai mon message "Nécessite une version Map 3D ou Civil 3D" ... Il faut que je lance manuellement une fonction propre à Map 3D avant que cela fonctionne.
 - Je modifie FILEDIA a la volée, je devrais stocker la variable en début de programme, et la rétablir à la fin, et pas forcé 1.
 - (fonction) ne déclare pas ses variables
 - J'aimerais utiliser la variable CGEOCS. Si une projection est déjà définie, qu'elle soit sélectionnée dès l'ouverture de la boite de dialogue.
 - Et si SGEOCS renvoi une projection que n'est pas dans ma petite liste, il faudra l'ajouter en tête.
 - Ptet ajouter des boutons "Copier" au bout des X/Y pour que ce soit encore plus facile ...?
 - Je n'ai pas de Civil 3D sous la main pour m'assurer que ça marche aussi bien au sous Map 3D

Sur ce, je vais me préparer à manger, et je m'y repenche cette aprèm ... 

 

Lispeur éternel débutant!
Autocad Map3D 2023
Covadis-Autopist 18.2

Posté(e)

Pour savoir si c'est une version MAP ou Civil, tu peux utiliser ça (renvoie nil si pas MAP)

(member "acadmap.arx" (arx))

Pour connaitre le SC affecté, c'est  (renvoie le nom du SC ou un texte vide si aucun affecté)

(ade_projgetwscode)

 

Olivier

  • Upvote 1
  • 4 mois après...
Posté(e)

Salut la communauté.
Je rejoint @didier, je pense qu'il y a une différence entre "géoréférencé" et "calé"...
J'avais récupéré (sur CadXP il me semble) un petit code qui me permettais de savoir dans quel système de projection mon dessin était "référencé"...
Et l'avantage, il fonctionnait même sans un MAP...
Je m'en vais le rechercher dans mes archives... 

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Je pense que c'est ça

Citation
;;; Cherche la projection courante
(defun c:GeoControl (/ TextGeo) ;(command "_zoom" "_e")
  (princ "\n\tDéveloppé par Denis H. (1.0)")
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark doc)
  (command "_zoom" "t" "")
  (setq TextGeo nim)
  (setq Xcvue (car (getvar "viewctr"))
        Ycvue (cadr (getvar "viewctr"))
  ) ;_ Fin de setq
  ;;Valeurs toujours à affinées (http://geofree.fr/gf/projguess.asp) 
  ;;et source EPSG http://geodesie.ign.fr/contenu/fichiers/SRCfrance.pdf 
  ;;(if (and (> Xcvue 1) (< Xcvue 1200000) (> Ycvue 70000) (< Ycvue 400000))
  ;;(setq EPSG 27561 TextGeo "\nLe plan semble être en Lambert 1 Zone Nord")
  ;;)
  ;;(if (and(> Xcvue 1) (< Xcvue 1200000) (> Ycvue 400000) (< Ycvue 700000))
  ;;(setq EPSG 27562 TextGeo "\nLe plan semble être en Lambert 2 Zone Centre")
  ;;)
  ;;(if (and (> Xcvue 1) (< Xcvue 1200000) (> Ycvue 10000) (< Ycvue 1000000))
  ;;(setq EPSG 27563 TextGeo "\nLe plan semble être en Lambert 3 Zone Sud")
  ;;)
  (if (and (> Xcvue 1) (< Xcvue 1200000) (> Ycvue 160000) (< Ycvue 2700000))
    (setq TextGeo "\nLe plan semble être en Lambert 2 Etendu") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 1400000) (< Xcvue 1800000) (> Ycvue 9100000) (< Ycvue 9300000))
    (setq TextGeo "\nLe plan semble être en CC50") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 1400000) (< Xcvue 1800000) (> Ycvue 8100000) (< Ycvue 8300000))
    (setq TextGeo "\nLe plan semble être en CC49") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 1400000) (< Xcvue 1800000) (> Ycvue 7100000) (< Ycvue 7300000))
    (setq TextGeo "\nLe plan semble être en CC48") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 1400000) (< Xcvue 1800000) (> Ycvue 6100000) (< Ycvue 6300000))
    (setq TextGeo "\nLe plan semble être en CC47") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 1400000) (< Xcvue 1800000) (> Ycvue 5100000) (< Ycvue 5300000))
    (setq TextGeo "\nLe plan semble être en CC46") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 1400000) (< Xcvue 1800000) (> Ycvue 4100000) (< Ycvue 4300000))
    (setq TextGeo "\nLe plan semble être en CC45") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 1400000) (< Xcvue 1800000) (> Ycvue 3100000) (< Ycvue 3300000))
    (setq TextGeo "\nLe plan semble être en CC44") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 1400000) (< Xcvue 1800000) (> Ycvue 2100000) (< Ycvue 2300000))
    (setq TextGeo "\nLe plan semble être en CC43") ;_ Fin de setq
  ) ;_ Fin de if
  (if (and (> Xcvue 0) (< Xcvue 1300000) (> Ycvue 6000000) (< Ycvue 7200000))
    (setq TextGeo "\nLe plan semble être en Lambert 93") ;_ Fin de setq
  ) ;_ Fin de if
  (if (= TextGeo nil)
    (setq TextGeo "\nLe plan ne semble pas être Géoréférencé")
  ) ;_ Fin de if
  (princ TextGeo)
  (vla-endundomark doc)
  (princ)
) ;_ Fin de defun

 

Mais je ne promet rien, je sais que ce code ne fonctionne pas toujours. Mais il peux être d'une bonne aide.
Et je ne sais plus de qui il est...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é