Bonjour à tous,
Plan du post
Intro
Les fichiers à lire
L'automatisation à réaliser
Le code
Remarque importante
Intro
Dans le cadre de la conception d'un projet de génie civil, il est primordiale de connaitre la topographie du terrain.
Ces données peuvent être obtenu par mesures ponctuelles avec un théodolythe si votre terrain n'est pas très grand ni très complexe dans sa topographie. Pour le reste des cas, la technique moderne à des moyens bien meilleurs.
Les données peuvent être aujourd'hui obtenue par mesure aéroporté, technique Lidar (LIght Detection And Ranging) ou photogramétrie. Ces deux techniques permettent de scanner des zones immenses avec une forte résolution et forte précision.
Des sociétés spécialisées proposent la réalisation de scan si une très forte résolution et très forte précision est necessaire, de l'ordre du centimètre, mais les tarifs sont assez prohibitifs (environ 10k€ pour une zone de 20km2).
Dans le cas d'un besoin ne necessitant pas de tels précisions, il est interessant de savoir que l'IGN met à disposition gratuitement les relevés topographiques nationaux. Il est possible à tous d'acceder à ces données d'une resolution d'un mètre, et d'une précision de l'ordre de la dixaine de centimètre.
Ces data sont sous la forme de fichier .asc (American Standard Code), il s'agit de de données appelées MNT (Modèle Numérique de Terrain).
Ces fichier peuvent être ouvert aisément avec le logiciel INGMap, fourni par l'IGN mais aussi avec des soft comme QGIS, ou SAGA. Ces softs sont assez complexe à utiliser pour des non spécialistes du sujet de la géomatique. Pas mal d'info sur le sujet sont disponible sont le forum Géorézo.
Mon but n'étant pas de devenir cartographe, je laisse à ceux qui veulent, le soin d'utiliser ces logiciels.
Mon besoin est de concevoir une maquette numérique d'un projet de génie civil dans un logiciel de conception comme CATIA V5 ou Sketchup, malheureusement je ne maitrise pas REVIT qui est spécialisé pour ce besoin.
Sur le site de l'IGN pro on peut télécharger (via filezilla) un MNT correspondant aux découpage des départements. Deux choix de résolution sont possible : des carrées de 5 ou 1 mètre de coté.
Une fois le MNT reçu, il contient des milliers de fichiers .asc (5700 pour le departement 08 par exemple), chacun d'environ 6Mo.
Vu la taille, il faut un très bon PC si l'on souhaite afficher un département entier. Pour ceux qui comme moi ne disposent pas de telles machines, je n'ai pas de meilleurs solution que d'ouvrir des portions et de chercher la zone d'intérêt.
Après une longue recherche, j'ai fini par identifier les 50 fichiers qui couvre la zone (40km2) de mon étude. C'est à ce moment que l'automatisation avec Excel VBA devient indispensable.
Les fichiers à lire
Les fichier .asc peuvent être ouvert avec le bloc note ou notepad. Ils sont tous écrit suivant la même organisation :
Dans la capture d'écran ci-dessus, on ne voit pas la ligne 8 qui est situé bien plus bas. La ligne 7 représentant 1000 valeurs. Et comme vous l'aurez compris il y'a 1000 lignes.
L'automatisation à réaliser
Étape 1 : Il faut que Excel
- ouvre chaqu'un des 50 fichier .asc, dont le nom est en hexadecimal,
- lise les 1 million de valeur en y associant la coordonnée X Y qu'il faut calculer en corrigeant le séparateur de décimal de point vers virgule
étape 2 : il faut créer ces points dans CATIA ou Sketchup
- créer les points
- créer une surface à partir de ces points
L'étape 1 et la création de point me semble être de l'ordre du possible. L'obtention d'une surface à partir de tous ces points en revanche risque d'être impossible. J'ai lu quelque part que Catia avait un atelier capable de faire cette manip, mais il est rare d'avoir cet atelier. De plus il serait préférable de créer les points directement dans sketchup. Encore une fois difficile de passer de catia à Sketchup. Tous les éditeurs choisissent de verrouiller leur format.
Le code
Les bouts de code que j'ai commencé à réunir :
Lire un fichier ligne par ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Sub LireFichierTexteParLigne() 'par: https://excel-malin.com Application.ScreenUpdating = False On Error GoTo CodeErreur Dim IndexFichier As Integer Dim MonFichier As String Dim ContenuLigne As String MonFichier = "C:\MonDossier\MonFichier.txt" '<-- mettez ici le nom du fichier à lire IndexFichier = FreeFile() Open MonFichier For Input As #IndexFichier 'ouvre le fichier While Not EOF(IndexFichier) ' Line Input #IndexFichier, ContenuLigne ' lecture du fichier ligne par ligne: la variable "ContenuLigne" contient le contenu de la ligne active 'ajoutez ici votre code à appliquer pour chaque ligne '... Wend Close #IndexFichier ' ferme le fichier Application.ScreenUpdating = True Exit Sub CodeErreur: MsgBox "Une erreur s'est produite..." Application.ScreenUpdating = True End Sub
Ouvrir les fichiers d'un repertoire
Création de points CATIA V5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Sub Macro1() Dim BDD As FileDialog 'déclare la variable BDD (Boîte de Dialogue Dossier) Dim CA As String 'déclare la variable CA (Chemin d'Accès) Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim FS As String 'décalre la variable FS (Fichier Source) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet Source) Dim DEST As Range 'déclare la variable DEST (celllue de DESTination) Set CD = ThisWorkbook 'définit la classeur destination CD Set OD = CD.Sheets(1) 'définit l'onglet destination OD (à adapter à ton cas, ici j'ai mis le premier onglet) FS = Dir(CA & "*.xlsx") 'définit le premier fichier source Excel contenu dans le dossier ayant CA comme chemin d'accès Do While FS <> "" ' exécute tant qu'il existe des fichiers source Workbooks.Open CA & FS 'ouvre le fichier source FS Set CS = ActiveWorkbook 'définit la classeur source CS Set OS = CS.Worksheets(1) 'définit l'onglet source OS (à adapter à ton cas, ici j'ai j'ai mis le premier onglet) CS.Close False 'ferme le classeur source CS (sans enregistrer) FS = Dir 'définit le prochain fichier source excel du dossier ayant CA comme chemin d'accès Loop 'boucle End Sub
Remarque importante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 Sub CreationPoint() 'Get CATIA Dim PtDoc As Object Set PtDoc = GetCATIAPartDocument ' Get the HybridBody Dim myHBody As Object Set myHBody = PtDoc.Part.HybridBodies.Item("GROUPE N°1") Dim iLigne As Integer Dim iValid As Integer Dim X As Double Dim Y As Double Dim Z As Double Dim Point As Object iLigne = 1 'Analyze file While iValid <> Cst_iEND 'Read a line ChainAnalysis iLigne, X, Y, Z, iValid iLigne = iLigne + 1 'Not on a startcurve or endcurve -> valid point If (iValid = 0) Then Set Point = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(X, Y, Z) .... ??? ... myHBody.AppendHybridShape Point End If Wend 'Model update PtDoc.Part.Update End Sub 'creation du point Set Point = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(x, y, z) myHBody.AppendHybridShape Point Point.Name = nom 'creation sphere + nom Set Sphere = PtDoc.Part.HybridShapeFactory.AddNewSphere(Point, Nothing, R, -90#, 90#, 0#, 360#) myHBody.AppendHybridShape Sphere Sphere.Name = nom
Si quelqu'un sait comment faire sans passer par l'ecriture d'une macro, évidemment je suis preneur. Mais aujourd'hui j'ai installer pas mal de softs sans réussir à créer un lien entre le monde des topographes et le monde des concepteurs. J'ai testé en prenant le dernier sketchup (trial 30 jours), le dernier Autocad 3D MAX (trial 30 jours).
C'est à se demander pourquoi l'IGN fournie ce format ? C'est en tout cas vraiment frustrant d'avoir les datas sans pouvoir rien en faire.
Je précise aussi que Sketchup pro (300$/an) permet d'importer en 2 secondes la topographie de n'importe quelle zone du monde, mais le précision est tellement mauvaise que c'est inexploitable.
Merci à vous, j'espère trouver une solution à ce problème qui concerne beaucoup de monde
Partager