@@ -44,12 +44,15 @@ class GeoElevationData:
44
44
# Lazy loaded files used in current app:
45
45
files = None
46
46
47
- def __init__ (self , srtm1_files , srtm3_files , files_directory ):
47
+ def __init__ (self , srtm1_files , srtm3_files , files_directory ,
48
+ reduce_big_files = False ):
48
49
self .srtm1_files = srtm1_files
49
50
self .srtm3_files = srtm3_files
50
51
# Place where local files are stored:
51
52
self .files_directory = files_directory
52
53
54
+ self .reduce_big_files = reduce_big_files
55
+
53
56
self .files = {}
54
57
55
58
def get_elevation (self , latitude , longitude , approximate = None ):
@@ -124,12 +127,34 @@ def retrieve_or_load_file_data(self, file_name):
124
127
if not data :
125
128
return None
126
129
130
+ if self .reduce_big_files :
131
+ data = self ._reduce_file (data , file_name )
132
+
127
133
f = open (data_file_name , 'w' )
128
134
f .write (data )
129
135
f .close ()
130
136
131
137
return data
132
138
139
+ def _reduce_file (self , data , file_name ):
140
+ if mod_math .sqrt (len (data ) / 2 ) == 3601 :
141
+ mod_logging .info ('Reducing file %s' % file_name )
142
+ reduced_data = mod_cstringio .StringIO ()
143
+ values_written = 0
144
+ size = len (data )
145
+ for i in xrange (size / 2 ):
146
+ row = i / 3601
147
+ column = i % 3601
148
+ if row % 3 == 0 and column % 3 == 0 :
149
+ reduced_data .write (data [i * 2 ])
150
+ reduced_data .write (data [i * 2 + 1 ])
151
+ values_written += 1
152
+
153
+ result = reduced_data .getvalue ()
154
+ assert mod_math .sqrt (len (result ) / 2 ) == 1201
155
+ return result
156
+ return data
157
+
133
158
def get_file_name (self , latitude , longitude ):
134
159
# Decide the file name:
135
160
if latitude >= 0 :
@@ -338,4 +363,3 @@ def parse_file_name_starting_position(self):
338
363
339
364
def __str__ (self ):
340
365
return '[{0}:{1}]' .format (self .__class__ , self .file_name )
341
-
0 commit comments