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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
| Public Sub batch()
Dim Coordxmin As Long
Dim I As Long
Dim J As Long
Dim I2 As Long
Dim J2 As Long
Dim Pas As Long
Dim Pas2 As Long
Dim Pas3 As Long
Dim CoordXvalid As Long
Dim CoordYvalid As Long
Dim Coordxmax As Long
Dim Coordymin As Long
Dim Coordymax As Long
Dim Gdalcy2 As Long
Dim Gdalcy1 As Long
Dim Gdalcx1 As Long
Dim Gdalcx2 As Long
Dim X As Integer
Dim Y As Integer
Dim T As Variant
Dim L As Variant
Dim dossier As Object, Rep As Object, Chemin As String
Dim MonBatch As String
Dim NomFic, Chaine As String, Chaine2 As String, Chaine3 As String, chaine4 As String
'fonction GDAL
Const Gdal_translate As String = "gdal_translate -of GTiff -srcwin "
'taille du pixel en mètre fournit par GDALINFO
'T = 5.805
T = Range("E2")
'pas terrain que l'on souhaite avoir pour découpage en mètre
'L = 10000
L = Range("D2")
'coordo en pixel des coins nord ouest et sud est
'Coordxmin = 530
Coordxmin = Range("A2")
'Coordxmax = 13496
Coordxmax = Range("B2")
'Coordymin = 551
Coordymin = Range("C2")
'Coordymax = 9400
Coordymax = Range("D2")
'calcul du pas pour en pixel
Pas = (L / T)
I = 0
J = 0
'calcul du nombre d'itérations nécessaires pour les calculs en appliquant la focntion d'arrondi supérieur
X = RoundUp((Coordxmax - Coordxmin) / Pas - 1)
Y = RoundUp((Coordymax - Coordymin) / Pas - 1)
'créer et placer le fichier batch
'Open "C:\temp\7349\export_decoupage_raster_4_chaine4.bat" For Output As #1
Set dossier = CreateObject("Shell.Application")
'Ouvre la boîte de dialogue "sélection d'un répertoire"
Set Rep = dossier.BrowseForFolder(&H0&, "Sélectionner un répertoire", &H1&)
If Not Rep Is Nothing Then
Set Rep = Rep.Items.Item
Chemin = Rep.Path
'MsgBox Chemin
End If
MonBatch = InputBox("Saisir le nom du Fichier")
MsgBox Chemin & "\" & MonBatch
Open MonBatch For Output As #1
'Boucle sur les lignes et colonnes de l'image
For I = 0 To X
For J = 0 To Y
NomFic = Chemin & "_" & MonBatch & "_" & I & "_" & J & "ok.tif"
' NomFic = "c:/temp/7349/7349" & "_" & I & "_" & J & "ok.tif"
'calcul de la nouvelle coordonnée de départ en X
Gdalcx1 = Coordxmin + I * Pas
'calcul de la nouvelle coordonnée de départ pour Y
Gdalcy1 = Coordymin + J * Pas
I2 = Gdalcx1 + Pas
J2 = Gdalcy1 + Pas
'Condition d'itération, si la valeur de la coord X maximale est supérieure à l'emprise de l'image
'il faut appliquer un nouveau Pas de calcul, inférieur au pas général. Il faut l'appliquer dans
'la chaine de concaténation de la formule
If I2 > Coordxmax Then
NomFic = Chemin & "_" & MonBatch & "_" & I2 & "_" & J2 & "ok.tif"
'NomFic = "c:/temp/7349/7349" & "_" & I2 & "_" & J2 & "ok.tif"
CoordXvalid = I2 - Pas
Pas2 = Coordxmax - CoordXvalid
Chaine2 = Gdal_translate & " " & Gdalcx1 & " " & Gdalcy1 & " " & Pas2 & " " & Pas & " " & "-co compress=lzw" & " " & "c:/temp/7349/7349_pal300_caris_gt.tif" & " " & NomFic
'Condition d'itération, si la valeur de la coord Y maximale est supérieure à l'emprise de l'image
'il faut appliquer un nouveau Pas de calcul, inférieur au pas général. Il faut l'appliquer dans
'la chaine de concaténation de la formule
ElseIf J2 > Coordymax Then
CoordYvalid = J2 - Pas
Pas3 = Coordymax - CoordYvalid
Chaine3 = Gdal_translate & " " & Gdalcx1 & " " & Gdalcy1 & " " & Pas & " " & Pas3 & " " & "-co compress=lzw" & " " & "c:/temp/7349/7349_pal300_caris_gt.tif" & " " & NomFic
End If
'Il ne faut pas oublier le cas, où X et Y sont hors de l'emprise (le coin sud-est), c'est pourquoi
'il faut spécifier qu'à la fois I2 et J2 sont supérieurs aux max X et Y
'C'est pourquoi, il est nécessaire d'appliquer le Pas de X inférieur au pas normal et le pas de Y inférieur au pas normal
If I2 > Coordxmax And J2 > Coordymax Then
chaine4 = Gdal_translate & " " & Gdalcx1 & " " & Gdalcy1 & " " & Pas2 & " " & Pas3 & " " & "-co compress=lzw" & " " & "c:/temp/7349/7349_pal300_caris_gt.tif" & " " & NomFic
End If
'Condition si, la coordo de départ est hors "cadre" alors il faut que la chaine soit vide, c'est-à-dire non utilisée
Select Case Gdalcx1 + Pas > Coordxmax
Case Gdalcy1 + Pas > Coordymax
Chaine = Gdal_translate & " " & Gdalcx1 & " " & Gdalcy1 & " " & Pas & " " & Pas & " " & "-co compress=lzw" & " " & "c:/temp/7349/7349_pal300_caris_gt.tif" & " " & NomFic
Case Else
Chaine = ""
End Select
'applique dans le batch les différentes chaines de calcul GDAL
Print #1, Chaine
Print #1, Chaine2
Print #1, Chaine3
Print #1, chaine4
'fin des boucles
Next J
Next I
'ferme le fichier batch
Close #1
End Sub |
Partager