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 import os.path
34 import sys
35
36 from osgeo import gdal
37
38
40 print("""
41 gdal_proximity.py srcfile dstfile [-srcband n] [-dstband n]
42 [-of format] [-co name=value]*
43 [-ot Byte/UInt16/UInt32/Float32/etc]
44 [-values n,n,n] [-distunits PIXEL/GEO]
45 [-maxdist n] [-nodata n] [-use_input_nodata YES/NO]
46 [-fixed-buf-val n] [-q] """)
47 sys.exit(1)
48
49
53
54
55 -def GetExtension(filename):
56 ext = os.path.splitext(filename)[1]
57 if ext.startswith('.'):
58 ext = ext[1:]
59 return ext
60
61
84
85
87 drv_list = GetOutputDriversFor(filename)
88 ext = GetExtension(filename)
89 if not drv_list:
90 if not ext:
91 return 'GTiff'
92 else:
93 raise Exception("Cannot guess driver for %s" % filename)
94 elif len(drv_list) > 1:
95 print("Several drivers matching %s extension. Using %s" % (ext if ext else '', drv_list[0]))
96 return drv_list[0]
97
98
100 frmt = None
101 creation_options = []
102 options = []
103 src_filename = None
104 src_band_n = 1
105 dst_filename = None
106 dst_band_n = 1
107 creation_type = 'Float32'
108 quiet_flag = 0
109
110 gdal.AllRegister()
111 argv = gdal.GeneralCmdLineProcessor(argv)
112 if argv is None:
113 sys.exit(0)
114
115
116 i = 1
117 while i < len(argv):
118 arg = argv[i]
119
120 if arg == '-of' or arg == '-f':
121 i = i + 1
122 frmt = argv[i]
123
124 elif arg == '-co':
125 i = i + 1
126 creation_options.append(argv[i])
127
128 elif arg == '-ot':
129 i = i + 1
130 creation_type = argv[i]
131
132 elif arg == '-maxdist':
133 i = i + 1
134 options.append('MAXDIST=' + argv[i])
135
136 elif arg == '-values':
137 i = i + 1
138 options.append('VALUES=' + argv[i])
139
140 elif arg == '-distunits':
141 i = i + 1
142 options.append('DISTUNITS=' + argv[i])
143
144 elif arg == '-nodata':
145 i = i + 1
146 options.append('NODATA=' + argv[i])
147
148 elif arg == '-use_input_nodata':
149 i = i + 1
150 options.append('USE_INPUT_NODATA=' + argv[i])
151
152 elif arg == '-fixed-buf-val':
153 i = i + 1
154 options.append('FIXED_BUF_VAL=' + argv[i])
155
156 elif arg == '-srcband':
157 i = i + 1
158 src_band_n = int(argv[i])
159
160 elif arg == '-dstband':
161 i = i + 1
162 dst_band_n = int(argv[i])
163
164 elif arg == '-q' or arg == '-quiet':
165 quiet_flag = 1
166
167 elif src_filename is None:
168 src_filename = argv[i]
169
170 elif dst_filename is None:
171 dst_filename = argv[i]
172
173 else:
174 Usage()
175
176 i = i + 1
177
178 if src_filename is None or dst_filename is None:
179 Usage()
180
181
182
183
184
185 src_ds = gdal.Open(src_filename)
186
187 if src_ds is None:
188 print('Unable to open %s' % src_filename)
189 sys.exit(1)
190
191 srcband = src_ds.GetRasterBand(src_band_n)
192
193
194
195
196
197 try:
198 driver = gdal.IdentifyDriver(dst_filename)
199 if driver is not None:
200 dst_ds = gdal.Open(dst_filename, gdal.GA_Update)
201 dstband = dst_ds.GetRasterBand(dst_band_n)
202 else:
203 dst_ds = None
204 except:
205 dst_ds = None
206
207
208
209
210 if dst_ds is None:
211 if frmt is None:
212 frmt = GetOutputDriverFor(dst_filename)
213
214 drv = gdal.GetDriverByName(frmt)
215 dst_ds = drv.Create(dst_filename,
216 src_ds.RasterXSize, src_ds.RasterYSize, 1,
217 gdal.GetDataTypeByName(creation_type), creation_options)
218
219 dst_ds.SetGeoTransform(src_ds.GetGeoTransform())
220 dst_ds.SetProjection(src_ds.GetProjectionRef())
221
222 dstband = dst_ds.GetRasterBand(1)
223
224
225
226
227
228 if quiet_flag:
229 prog_func = None
230 else:
231 prog_func = gdal.TermProgress_nocb
232
233 gdal.ComputeProximity(srcband, dstband, options,
234 callback=prog_func)
235
236 srcband = None
237 dstband = None
238 src_ds = None
239 dst_ds = None
240
241
242 if __name__ == '__main__':
243 sys.exit(main(sys.argv))
244