-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOGR_IndexBuild.tcl
More file actions
143 lines (103 loc) · 3.84 KB
/
Copy pathOGR_IndexBuild.tcl
File metadata and controls
143 lines (103 loc) · 3.84 KB
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
#!/bin/sh
# the next line restarts using tclsh \
exec $SPI_PATH/tclsh "$0" "$@"
#============================================================================
# Environnement Canada
# Centre Meteorologique Canadien
# 2100 Trans-Canadienne
# Dorval, Quebec
#
# Projet : Exemple de scripts.
# Fichier : OGR_IndexBuild.tcl
# Creation : Decembre 2002 - J.P. Gauthier - CMC/CMOE
# Description: Creation d'un index geographiqe de couverture e donnees raster
# dans un fichier Shapefile pouvant ensuite etre utiliser dans SPI
# pour la selection des donnees
#
# Parametres :
#
# Retour:
#
# Remarques :
#
#============================================================================
package require TclData
#package require TclGeoEER
package require Logger
Log::Start [info script] 0.1
gdalfile error QUIET
proc Parser { Path } {
foreach file [glob -nocomplain $Path/*] {
if { [file isdirectory $file] } {
Parser $file
} else {
Indexer $file
}
}
}
proc Indexer { File } {
variable Data
Log::Print INFO "Checking $File"
eval set bad [catch { set bands [gdalfile open FILE read $File] }]
#----- si le fichier est valide
if { !$bad } {
#----- Recuperer les limites et les convertir en latlon
set width [expr [gdalfile width FILE]-1]
set height [expr [gdalfile height FILE]-1]
set xy [gdalfile project FILE 0 0]
#----- Si les coordonnees sont valides
set lat [lindex $xy 0]
set lon [lindex $xy 1]
if { $lat<=90.0 && $lat>=-90.0 && ($lat!=0.0 && $lon!=0.0) } {
Log::Print INFO " File is valid ($lat $lon)"
#----- Creer le polygone de la couverture des donnees raster
ogrlayer define INDEX -nb [incr Data(Nb)]
set no [expr $Data(Nb)-1]
ogrgeometry define RING -points {}
for { set x 0 } { $x < [expr $width-$Data(DX)] } { incr x $Data(DX) } {
set xy [gdalfile project FILE $x 0]
ogrgeometry define RING -addpoint [lindex $xy 1] [lindex $xy 0]
}
for { set y 0 } { $y < [expr $height-$Data(DX)] } { incr y $Data(DX) } {
set xy [gdalfile project FILE $width $y]
ogrgeometry define RING -addpoint [lindex $xy 1] [lindex $xy 0]
}
for { set x $width } { $x > $Data(DX) } { incr x -$Data(DX) } {
set xy [gdalfile project FILE $x $height]
ogrgeometry define RING -addpoint [lindex $xy 1] [lindex $xy 0]
}
for { set y $height } { $y > $Data(DX) } { incr y -$Data(DX) } {
set xy [gdalfile project FILE 0 $y]
ogrgeometry define RING -addpoint [lindex $xy 1] [lindex $xy 0]
}
set xy [gdalfile project FILE 0 0]
ogrgeometry define RING -addpoint [lindex $xy 1] [lindex $xy 0]
ogrgeometry define POLY -geometry False RING
#----- Inserer le path du fichier associe
ogrlayer define INDEX -feature $no IDX_PATH [string range $File [string length $Data(Path)] end]
ogrlayer define INDEX -geometry $no False POLY
}
gdalfile close FILE
}
}
#----- Path de repertoire a traiter en parametre
set Data(Path) [lindex $argv 0]
set Data(Nb) 0
set Data(DX) 50
#----- Supprimer l<index si il existe deja
catch { file delete -force $Data(Path)/Index }
#----- Creer le nouveaux fichier/repertoire d'index
file mkdir $Data(Path)/Index
ogrfile open INDEXFILE write $Data(Path)/Index/Index.shp "ESRI Shapefile"
ogrlayer create INDEXFILE INDEX "Index"
#----- Champs qui contient le path
ogrlayer define INDEX -field IDX_PATH String
#----- Initialiser la geometrie
ogrgeometry create POLY "Polygon"
ogrgeometry create RING "Linear Ring"
#----- Parcourir chaque fichier dans le repertoire
Parser $Data(Path)
#----- That's it
pLog::Print INFO "Processed $Data(Nb) valid file"
ogrfile close INDEXFILE
Log::End