banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 08 April 2010 16:43

bruno v.
Participant actif
Date d'inscription: 22 Mar 2010
Messages: 89

Attacher des données d'objects (OD) avec le Lisp

Bonjour à tous

C'est mon premier post sur ce forum, celui-ci ne sera pas une question mais les suivants le seront certainement.
En effet depuis peu je m'investis dans AutoCad Map 3D. Pour l'instant je découvre par moi même (en attendant une formation de base pour mieux appréhender celui-ci).

Certain me connaisse peut être à travers CadXp (bonuscad) wink

Pour en venir au sujet:

J'avais un fichier contenant des hachures "SOLID" et ayant une couleur RGB propre qui représentais les communes de mon département (fait sur une version de base d'AutoCad).
Mon souci était de convertir tous ceci en MPolygon afin d'y attacher des Données d'Objet pour Map.
N'aimant pas les tâches fastidieuses, je me suis tourné vers le lisp (mon dada et parce que je suis feignant) pour automatiser cette conversion.
Voici le code qui m'a permis de faire cela, bien sur je l'ai écrit pour mon besoin propre. Cela peut être une base de départ pour ceux qui voudrait faire une manip similaire, bien que je n'ai pas vu beaucoup de lispeur sur ce forum...

Code:

(defun  TrueColor2RGB  (col /)
  (strcat (itoa (lsh (fix col) -16))
          ","
          (itoa (lsh (lsh (fix col) 16) -24))
          ","
          (itoa (lsh (lsh (fix col) 24) -24))
  )
)
((lambda ( / )
    (setq js (ssget "_X" '((0 . "HATCH"))))
    (repeat (setq n (sslength js))
        (setq ent (ssname js (setq n (1- n))))
        (setvar "clayer" (cdr (assoc 8 (entget ent))))
        (setvar "cecolor" (strcat "RGB:" (TrueColor2RGB (cdr (assoc 420 (entget ent))))))
        (command "_.-hatchedit" ent "_boundary" "_polyline" "_no")
        (command "_.mpolygon" "_select" (entlast) "" "_exit")
        (entdel ent)
    )
))

Ensuite j'ai trouvé un fichier Excel de l'INSEE (mise à jour de 2009) sur le recensement de la population.
J'en ai donc fait un CSV en conservant les données essentielles pour les mettre en OD sur mes MPolygones.
Je vous donne un extrait de quelques lignes de ce fichier CSV pour ceux qui voudrait tester la routine lisp qui m'a permis d'attacher ces données. Une boite d'alerte m'affichait le nom de la commune, et je n'avais plus qu'a cliquer le mpolygone qui lui correspondait.
un extrait du fichier CSV (jusqu'au village de Jean Ferrat)

82;07;3;06;001;Accons;457;
82;07;1;03;002;Ailhon;468;
82;07;1;02;003;Aizac;170;
82;07;2;13;004;Ajoux;95;
82;07;2;30;005;Alba-la-Romaine;1377;
82;07;2;20;006;Albon-d'Ardèche;164;
82;07;3;19;007;Alboussière;899;
82;07;2;13;008;Alissas;1193;
82;07;3;22;009;Andance;1134;
82;07;3;99;010;Annonay;17663;
82;07;1;02;011;Antraigues-sur-Volane;598;


Le code:

Code:

(vl-load-com)
(defun surf_cadastrale (xs / h a ca)
    (cond
        ((and xs (numberp xs))
            (setq
                h (fix (cvunit xs "mètre_carré" "hectare"))
                a (fix (cvunit xs "mètre_carré" "are"))
                ca (fix (cvunit xs "mètre_carré" "centare"))
            )
            (strcat
                (if (not (zerop h)) (strcat (itoa h) "h ") "")
                (if (not (zerop a)) (strcat (itoa (if (not (zerop h)) (- a (* h 100)) a)) "a ") "")
                (if (not (zerop ca)) (strcat (itoa (if (not (zerop a)) (- ca (* a 100)) ca)) "ca") "")
            )
        )
    )
)
(defun c:population2od ( / js tbl tbldef n target_obj obj_vlax data_lst tblstr fldnamelist fldtypelist fldtypelist)
    (ade_oddefinetab 
    '(
        ("Tablename" . "COMMUNES")
            ("TableDesc" . "")
            ("Columns"
                (
                    ("ColName" . "CODE-REGION")
                    ("ColDesc" . "Code INSEE Région")
                    ("ColType" . "Integer")
                    ("DefaultVal" . 82)
                )
                (
                    ("ColName" . "CODE-DEPARTEMENT")
                    ("ColDesc" . "Code INSEE Département")
                    ("ColType" . "Integer")
                    ("DefaultVal" . 07)
                )
                (
                    ("ColName" . "CODE-ARRONDISSEMENT")
                    ("ColDesc" . "Code INSEE Arrondissement")
                    ("ColType" . "Integer")
                    ("DefaultVal" . 0)
                )
                (
                    ("ColName" . "CODE-CANTON")
                    ("ColDesc" . "Code INSEE Canton")
                    ("ColType" . "Integer")
                    ("DefaultVal" . 0)
                )
                (
                    ("ColName" . "CODE-COMMUNE")
                    ("ColDesc" . "Code INSEE Commune")
                    ("ColType" . "Integer")
                    ("DefaultVal" . 0)
                )
                (
                    ("ColName" . "NOMINATION-COMMUNE")
                    ("ColDesc" . "Nom de la Commune")
                    ("ColType" . "Character")
                    ("DefaultVal" . "")
                )
                (
                    ("ColName" . "POPULATION-COMMUNE")
                    ("ColDesc" . "Recensement INSEE Commune")
                    ("ColType" . "Integer")
                    ("DefaultVal" . 0)
                )
                (
                    ("ColName" . "SURFACES-AGRAIRES")
                    ("ColDesc" . "Valeur en Hectare Are Centiare")
                    ("ColType" . "Character")
                    ("DefaultVal" . "0ha0a0ca")
                )
            )
        )
    )
    (setq tbl "COMMUNES" tbldef (ade_odtabledefn tbl))
    (setq f_open (open "D:\\DAO\\Depart07\\XRef\\population-commune.csv" "r"))
    (while (setq l_read (read-line f_open))
        (setq cod_reg (substr l_read 1 (vl-string-position 59 l_read)))
        (setq l_read (substr l_read (+ 2 (vl-string-position 59 l_read))))
        (setq cod_dep (substr l_read 1 (vl-string-position 59 l_read)))
        (setq l_read (substr l_read (+ 2 (vl-string-position 59 l_read))))
        (setq cod_arr (substr l_read 1 (vl-string-position 59 l_read)))
        (setq l_read (substr l_read (+ 2 (vl-string-position 59 l_read))))
        (setq cod_can (substr l_read 1 (vl-string-position 59 l_read)))
        (setq l_read (substr l_read (+ 2 (vl-string-position 59 l_read))))
        (setq cod_com (substr l_read 1 (vl-string-position 59 l_read)))
        (setq l_read (substr l_read (+ 2 (vl-string-position 59 l_read))))
        (setq nam_com (substr l_read 1 (vl-string-position 59 l_read)))
        (setq l_read (substr l_read (+ 2 (vl-string-position 59 l_read))))
        (setq nbr_pop (substr l_read 1 (vl-string-position 59 l_read)))
        (alert nam_com)
        (while (null (setq js (ssget "_+.:E:S" '((0 . "MPOLYGON"))))))
        (setq target_obj (ssname js 0))
        (setq obj_vlax (vlax-ename->vla-object target_obj))
        (setq
            data_lst (list (atoi cod_reg) (atoi cod_dep) (atoi cod_arr) (atoi cod_can) (atoi cod_com) nam_com (atoi nbr_pop) (surf_cadastrale (vlax-get obj_vlax 'Area)))
            tblstr (cdr (nth 2 tbldef))
            fldnamelist ()
            fldtypelist ()
        )
        (foreach fld tblstr
            (setq
                fldnme (cdr (nth 0 fld))
                fldtyp (cdr (nth 2 fld))
                fldnamelist (append fldnamelist (list fldnme))
                fldtypelist (append fldtypelist (list fldtyp))
            )
        )
        (ade_odaddrecord target_obj tbl)
        (mapcar
            '(lambda (x y) (ade_odsetfield target_obj tbl x 0 y))
            fldnamelist
            data_lst
        )
    )
    (close f_open)
    (prin1)
)

Trouvant que tout cela était bien parti, j'ai écumé le site de l'INSEE à la recherche de données Excel.
J'ai compilé toute ces données de nouveau dans un CSV et j'ai utilisé la routine suivante pour compléter la table faite au préalable.
Voici comme précédemment le code utilisé.
Un extrait du CSV:

Accons;14;;1;;;1;1;7;;1;;;1;2;;;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;24;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;3;1;0;0;0;0;0;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;5;3;0;5;5;5;100;1;0;99;98;49;5;;;0;0;;;0;0;;;;;;;;;5;;11;5;;;;;
Ailhon;12;;2;;;;;3;2;;;;2;3;;;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;64;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;11;;0;7;7;4;72;;0;52;47;34;11;3;39;0;7;0;;0;28;0;;0;0;4;0;0;29;11;;16;7;;;;;
Aizac;11;2;1;;;;1;2;2;;1;;2;;;;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;41;1;1;0;0;0;20;20;0;0;0;0;0;0;0;0;20;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;7;;0;3;3;3;82;;0;82;82;64;7;;;0;0;0;3;0;0;0;82;0;0;5;0;0;39;7;;7;3;3;0;0;3;4
Ajoux;4;;1;;;;;;;;;;1;1;1;;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;55;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;12;;0;8;8;6;358;;0;323;323;157;12;4;224;0;4;0;3;0;16;0;166;0;0;7;0;0;113;12;7;22;13;;;3;6;3
Alba-la-Romaine;92;4;3;;;1;;18;23;;;5;10;16;12;;3;1;0;0;1;0;0;0;0;0;0;0;0;0;0;2;97;1;1;0;0;0;25;25;0;0;0;0;0;0;0;0;25;25;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;1;0;0;0;4;1;3;3;2;0;1;0;0;5;2;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;50;29;18;17;10;20;921;181;79;260;229;254;50;29;812;;35;0;4;;606;0;207;;;13;;;26578;57;32;85;96;55;41;20;18;19
Albon-d'Ardèche;13;1;;;1;1;1;3;;1;;1;1;3;;;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;80;1;0;1;0;0;20;0;20;0;0;6;0;6;0;0;14;0;14;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;17;;0;12;12;6;454;;0;410;409;196;17;6;360;0;;;4;0;;;209;6;6;10;40;26;123;18;8;36;21;;;4;5;9
Alboussière;53;2;1;;1;3;;14;10;3;;1;5;9;4;;1;2;0;0;0;0;0;0;0;0;0;0;0;0;0;1;96;2;0;2;0;0;127;0;127;0;0;0;0;0;0;0;127;0;127;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;3;0;0;0;3;3;2;2;3;0;2;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;34;24;21;33;33;20;929;316;115;798;602;528;34;19;817;;0;11;10;;0;404;146;19;18;14;731;434;20813;38;24;59;40;38;1;7;17;14
Alissas;43;1;1;;;4;;8;18;;1;1;2;6;1;;1;1;0;0;1;0;0;1;0;0;1;0;0;1;0;0;28;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;4;0;0;0;3;0;1;2;1;0;1;0;0;2;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;12;6;3;11;11;6;476;117;58;373;352;213;12;5;355;;;;5;;;;244;4;3;5;198;90;127;13;5;24;12;12;1;5;5;3
Andance;59;3;;2;1;1;;8;11;3;1;5;5;10;9;;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;49;1;0;0;1;0;60;0;0;60;0;40;0;0;40;0;20;0;0;20;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;3;0;0;1;1;2;0;3;0;0;3;0;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;25;15;10;6;4;14;210;34;21;6;6;97;25;16;208;0;20;0;0;0;177;0;0;0;0;16;0;0;317;31;7;56;56;31;24;9;10;12
Annonay;1033;30;28;2;13;26;7;93;263;16;38;78;155;143;138;3;20;7;0;1;12;43;6;3;6;1;1;0;4;4;4;6;191;1;0;1;0;0;78;0;78;0;0;0;0;0;0;0;78;0;78;0;0;1;0;0;1;0;0;39;0;0;39;0;0;0;0;1;39;1;1;1;1;3;14;3;14;2;0;4;26;13;12;11;11;9;34;3;7;41;18;7;11;2;1;0;3;0;1;1;0;2;0;3;1;8;2;4;1;0;0;2;2;1046;0;1;2;2;1353;0;0;0;0;3;3;0;2241;3;0;2;2;881;2;0;1;1;0;0;1;1;18;10;10;15;15;7;614;107;52;548;496;320;18;8;472;0;4;;4;0;13;;332;8;8;8;212;91;184;20;9;37;24;;;5;8;7
Antraigues-sur-Volane;36;1;;;;2;1;3;8;;;1;2;11;7;;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;150;1;1;0;0;0;30;30;0;0;0;0;0;0;0;0;30;30;0;0;0;1;0;0;1;0;0;7;0;0;7;0;0;0;0;1;7;0;1;0;1;1;0;0;0;0;0;0;0;1;1;1;0;0;2;0;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;9;;0;8;8;3;174;;0;172;172;88;9;;;0;0;0;5;0;0;0;157;;;5;;;60;9;;15;8;;;0;3;6


Le code:

Code:

((lambda ( / js lname ldesc n f_open l_read l_data ent-name data_lst data_chr)
    (setq js (ssget '((0 . "MPOLYGON"))))
    (cond
        (js
            (setq lname '("E08N16" "EB08N16" "EC08N16" "ED08N16" "EE08N16" "EF08N16" "EG08N16" "EH08N16" "EJ08N16" "EK08N16" "EL08N16" "EM08N16" "EN08N16" "EP08N16" "EQ08N16" "ER08N16" "NB_B203" "NB_B204" "NB_B205" "NB_B206" "NB_B301" "NB_B302" "NB_B303" "NB_B304" "NB_B305" "NB_B306" "NB_B307" "NB_B308" "NB_B309" "NB_B310" "NB_B311" "NB_B312" "NSEC99" "CPG09" "CPG109" "CPG209" "CPG309" "CPG409" "CPGE09" "CPGE109" "CPGE209" "CPGE309" "CPGE409" "CPGEL09" "CPGEL109" "CPGEL209" "CPGEL309" "CPGEL409" "CPGEO09" "CPGEO109" "CPGEO209" "CPGEO309" "CPGEO409" "HC09" "HC009" "HC109" "HC209" "HC309" "HC409" "HCCH09" "HCCH009" "HCCH109" "HCCH209" "HCCH309" "HCCH409" "HNC09" "HNCCH09" "HT09" "HTCH09" "NB_A101" "NB_A102" "NB_A103" "NB_A104" "NB_A201" "NB_A203" "NB_A205" "NB_A301" "NB_A302" "NB_A303" "NB_A304" "NB_A401" "NB_A402" "NB_A403" "NB_A404" "NB_A405" "NB_A406" "NB_A501" "NB_A502" "NB_A503" "NB_A504" "NB_A505" "NB_A506" "NB_A507" "NB_D101" "NB_D102" "NB_D103" "NB_D104" "NB_D105" "NB_D106" "NB_D107" "NB_D108" "NB_D109" "NB_D110" "NB_D111" "NB_D112" "NB_D301" "NB_D302" "NB_D303" "NB_D304" "NB_D305" "NB_D306" "NB_C201" "NB_C201_NB_CANT" "NB_C201_NB_ELV" "NB_C201_NB_INT" "NB_C201_NB_ZEP" "NB_C202" "NB_C202_NB_CANT" "NB_C202_NB_ELV" "NB_C202_NB_INT" "NB_C202_NB_ZEP" "NB_C203" "NB_C203_NB_CANT" "NB_C301" "NB_C301_NB_CANT" "NB_C301_NB_CL_PGE" "NB_C301_NB_ELV" "NB_C301_NB_INT" "NB_C301_NB_ZEP" "NB_C302" "NB_C302_NB_CANT" "NB_C302_NB_ELV" "NB_C302_NB_INT" "NB_C302_NB_ZEP" "NB_C303" "NB_C303_NB_CANT" "NB_C304" "NB_C304_NB_CANT" "NB_C305" "NB_C305_NB_CANT" "EXPAGRS00" "EXPAGRSL00" "EXPAGRSC00" "EXPAGRSF00" "EXPAGRSH00" "EXPAGRSG00" "SAUEAS00" "SAUEASL00" "SAUEASC00" "SAUEASF00" "SAUEASH00" "SAUEASG00" "EXPAGR00" "EXPAGRP00" "SAUEAP00" "EXPAGRC00" "EXPAGRL00" "EXPAGRB00" "EXPAGRA00" "SAUEAC00" "SAUEAL00" "SAUEAB00" "SAUEAA00" "EXPCHB00" "EXPCHV00" "EXPCHL00" "EFFCHB00" "EFFCHV00" "EFFCHL00" "CHEXP00" "CHEXPTC00" "AGRPOPF00" "AGRUTA00" "AGRUTAF00" "AGRUTAS00" "CHEXPM4000" "CHEXP45400" "CHEXPP5500"))
            (setq ldesc '("Nombre total d'établissements" "EB Industries agricoles et alimentaires" "EC Industries des biens de consommation" "ED Industrie automobile" "EE Industries des biens d'équipement" "EF Industries des biens intermédiaires" "EG Energie" "EH Construction" "EJ Commerce" "EK Transports" "EL Activités financières" "EM Activités immobilières" "EN Services aux entreprises" "EP Services aux particuliers" "EQ Education, santé, action sociale" "ER Administration" "Boulangerie" "Boucherie charcuterie" "Produits surgelés" "Poissonnerie" "Librairie papeterie" "Magasin de vêtements" "Magasin d'équipements du foyer" "Magasin de chaussures" "Magasin d'électroménager" "Magasin de meubles" "Magasin d'articles de sports et de loisirs" "Magasin de revêtements murs et sols" "Droguerie quincaillerie bricolage" "Parfumerie" "Horlogerie Bijouterie" "Fleuriste" "Résidences secondaires et de logements occasionnels au RP99" "Campings classés" "Campings classés 1 étoile" "Campings classés 2 étoiles" "Campings classés 3 étoiles" "Campings classés 4 étoiles" "Emplacements dans  campings classés" "Emplacements dans campings classés 1 étoile" "Emplacements dans campings classés 2 étoiles" "Emplacements dans campings classés 3 étoiles" "Emplacements dans campings classés 4 étoiles" "Emplacements loués à l'année campings classés" "Emplacements loués à l'année campings classés 1 étoile" "Emplacements loués à l'année campings classés 2 étoiles" "Emplacements loués à l'année campings classés 3 étoiles" "Emplacements loués à l'année campings classés 4 étoiles" "Emplacements offerts clientèle de passage dans campings classés" "Emplacements offerts clientèle de passage campings classés 1 étoile" "Emplacements offerts clientèle de passage campings classés 2 étoiles" "Emplacements offerts clientèle de passage campings classés 3 étoiles" "Emplacements offerts clientèle de passage campings classés 4 étoiles" "Hôtels classés" "Hôtels classés 0 étoile" "Hôtels classés 1 étoile" "Hôtels classés 2 étoiles" "Hôtels classés 3 étoiles" "Hôtels classés 4 étoiles ou 4 étoiles L" "Chambres dans hôtels classés" "Chambres dans hôtels classés 0 étoile" "Chambres dans hôtels classés 1 étoile" "Chambres dans hôtels classés 2 étoiles" "Chambres dans hôtels classés 3 étoiles" "Chambres dans hôtels classés 4 étoiles ou 4 étoiles L" "Hôtels de chaîne non classés" "Chambres dans hôtels de chaîne non classés" "Hôtels classés et hôtels de chaîne  non classés" "Chambres dans hôtels classés  et hôtels de chaîne non classés" "Police" "Trésorerie" "ANPE" "Gendarmerie" "Bureau de poste" "Banque, Caisse d'Epargne" "Pompes funèbres" "Réparation auto et de matériel agricole" "Contrôle technique automobile" "Location auto-utilitaires légers" "Ecole de conduite" "Maçon" "Plâtrier peintre" "Menuisier, charpentier, serrurier" "Plombier, couvreur, chauffagiste" "Electricien" "Entreprise générale du bâtiment" "Coiffure" "Vétérinaire" "Agence de travail temporaire" "Restaurant" "Agence immobilière" "Blanchisserie-Teinturerie" "Soins de beauté" "Etablissement santé court séjour" "Etablissement santé moyen séjour" "Etablissement santé long séjour" "Etablissement psychiatrique" "Centre lutte cancer" "Urgences" "Maternité" "Centre de santé" "Structures psychiatriques en ambulatoire" "Centre médecine préventive" "Dialyse" "Hospitalisation à domicile" "Pharmacie" "Laboratoire d'analyses médicales" "Ambulance" "Transfusion sanguine" "Etablissement thermal" "Etablissement lutte contre l'alcoolisme" "Collège public" "Collège public avec cantine" "Collège public - nombre d'élèves" "Collège public avec internat" "Collège public en Zone d'Education Prioritaire" "Collège privé" "Collège privé avec cantine" "Collège privé - nombre d'élèves" "Collège privé avec internat" "Collège privé en ZEP" "SET : Section d'enseignement technologique" "SET : Section d'enseignement technologique avec cantine" "Lycée d'enseignement général et/ou technologique" "Lycée d'enseignement général et/ou technologique avec cantine" "Lycée d'enseignement général et/ou technologique avec Classe Préparatoire aux Grandes Ecoles" "Lycée d'enseignement général et/ou technologique - nombre d'élèves" "Lycée d'enseignement général et/ou technologique avec internat" "Lycée d'enseignement général et/ou technologique en ZEP" "Lycée d'enseignement professionnel" "Lycée d'enseignement professionnel avec cantine" "Lycée d'enseignement professionnel - nombre d'élèves" "Lycée d'enseignement professionnel avec internat" "Lycée d'enseignement professionnel en ZEP" "Lycée technique et/ou professionnel agricole" "Lycée technique et/ou professionnel agricole avec cantine" "SGT : Section d'enseignement général et technologique" "SGT avec cantine" "SEP : Section d'enseignement professionnel" "SEP avec cantine" "Exploitations agricoles sièges en 2000" "Exploitations sièges terres labourables en 2000" "Exploitations sièges céréales en 2000" "Exploitations sièges fourragère principale en 2000" "Exploitations sièges toujours en herbe en 2000" "Exploitations sièges en fermage en 2000" "SAU des exploitations agricoles en 2000" "SAU expl sièges terres labourables en 2000" "SAU expl sièges céréales en 2000" "SAU expl sièges fourragère principale en 2000" "SAU expl sièges toujours en herbe en 2000" "SAU expl sièges en fermage en 2000" "Nombre d'exploitations agricoles en 2000" "Nombre d'exploitations agricoles professionnelles en 2000" "SAU des exploitations agricoles professionnelles en 2000" "Exploitations grandes cultures en 2000" "Exploitations légumes, fruits, viticulture en 2000" "Exploitations bovins en 2000" "Exploitations autres animaux en 2000" "SAU grandes cultures en 2000" "SAU légumes, fruits, viticulture en 2000" "SAU bovins en 2000" "SAU autres animaux en 2000" "Exploitations cheptel bovins  en 2000" "Exploitations cheptel vaches en 2000" "Exploitations cheptel volailles en 2000" "Effectif cheptel bovins en 2000" "Effectif cheptel vaches en 2000" "Effectif cheptel volailles en 2000" "Chefs d’exploitation et coexploitants en 2000" "Chefs d’expl coexpl temps complet en 2000" "Population familiale active sur les expl en 2000" "Unités de travail annuel  en 2000" "Unités de travail annuel  familiales en 2000" "Unités de travail annuel salariés en 2000" "Chefs d’exploit de moins de 40 ans en 2000" "Chefs d’expl de 40 à 54  ans en 2000" "Chefs d’expl de 55 ans ou plus en 2000"))
            (ade_odaddfield "COMMUNES"
                (cons "Columns"
                    (mapcar
                        '(lambda (x y)
                            (list
                                (cons "ColName" x)
                                (cons "ColDesc" y)
                                (cons "Coltype" "Integer")
                                (cons "DefaultVal" 0)
                            )
                        )
                        lname ldesc
                    )
                )
            )
            (setq f_open (open "D:\\DAO\\Depart07\\XRef\\Compilation données INSEE.csv" "r"))
            (while (setq l_read (read-line f_open))
                (setq l_data (cons l_read l_data))
            )
            (repeat (setq n (sslength js))
                (setq ent-name (ssname js (setq n (1- n))))
                (foreach n l_data
                    (if (wcmatch n (strcat (ade_odgetfield ent-name "COMMUNES" "NOMINATION-COMMUNE" 0) "*"))
                        (progn
                            (setq data_lst (list (substr n 1 (vl-string-position 59 n))))
                            (while (and (vl-string-position 59 n) (setq n (substr n (+ 2 (vl-string-position 59 n)))))
                                (setq data_chr (substr n 1 (vl-string-position 59 n)))
                                (setq data_lst (cons (if (not (eq data_chr "")) (atoi data_chr) 0) data_lst))
                            )
                            (mapcar
                                '(lambda (x y) (ade_odsetfield ent-name "COMMUNES" x 0 y))
                                lname
                                (cdr (reverse data_lst))
                            )
                        )
                    )
                )
            )
        )
    )
    (close f_open)
    (prin1)
))

Tous cela m'a pris une grosse journée de travail (développement compris), mais que de temps gagné. Si à la 1ère routine, je n'ai pu échapper à la désignation des polygones 1 par 1, la 2ème m'a complété tous mes OD en l'espace de 1 à 2mm pour l'ensemble du département. Et voila le travail j'ai toutes les données INSEE prêtes à être exploité par Map sans liens externe.

Bon le code que je vous ai donné est à l'état brut, sans gestion d'erreur, propre à mes besoins du moment (je l'ai écrit à la volée) car le besoin était très ponctuel, mais si certain veulent l'adapter ou s'en inspirer, y a plus qu'à wink
NB: Pour tester pensez bien à corriger le chemin du CSV dans le code

Pour ceux que ça intéresse la doc Lisp spécifique à map est ici:
www.autodesk.com/prods/acadmap/acmapads.pdf

Hors ligne

 

#2 Fri 09 April 2010 09:16

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Attacher des données d'objects (OD) avec le Lisp

bonuscad


Bienvenue chez nous, Bruno, je sens que tu vas être très apprécié ici smile

Robin

Hors ligne

 

#3 Fri 09 April 2010 10:22

Patrice
JeSuisCharlie
Date d'inscription: 16 Sep 2005
Messages: 4746

Re: Attacher des données d'objects (OD) avec le Lisp

Hello Bruno

Welcome l'Ardechois !

A bientot sur georezo , cadxp , etc

GeoBye, Pat (toujours en vadrouille)


(Autodesk Expert Elite Team)

Hors ligne

 

Pied de page des forums

Powered by FluxBB