Skip to content

Commit 5f63552

Browse files
committed
Reduce big files
1 parent d6aafd5 commit 5f63552

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

srtm/__init__.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def get_default_srtm_dir():
3939

4040
return result
4141

42-
def get_data(local_srtm_dir=None):
42+
def get_data(local_srtm_dir=None, reduce_big_files=False):
4343
"""
4444
Get the utility object for querying elevation data.
4545
@@ -49,6 +49,11 @@ def get_data(local_srtm_dir=None):
4949
On first run -- all files url will be stored and for every next elevation
5050
query if the SRTM file is not found in local_srtm_dir it will be retrieved
5151
and saved.
52+
53+
If reduce_big_files is True files for north America will be reduced to the
54+
same size as the rest of the world. It may be used to save disk space
55+
(because otherwise the tipical USA file is 25 megabaytes comparet to 2-3
56+
megabytes for the rest).
5257
"""
5358
if not local_srtm_dir:
5459
local_srtm_dir = get_default_srtm_dir()
@@ -71,10 +76,12 @@ def get_data(local_srtm_dir=None):
7176
srtm3_files = mod_retriever.retrieve_all_files_urls(SRTM3_URL)
7277

7378
f = open(files_list_file_name, 'w')
74-
f.write(mod_json.dumps({'srtm1': srtm1_files, 'srtm3': srtm3_files}, sort_keys=True, indent=4))
79+
f.write(mod_json.dumps({'srtm1': srtm1_files, 'srtm3': srtm3_files},
80+
sort_keys=True, indent=4))
7581
f.close()
7682

7783
assert srtm1_files
7884
assert srtm3_files
7985

80-
return mod_data.GeoElevationData(srtm1_files, srtm3_files, local_srtm_dir)
86+
return mod_data.GeoElevationData(srtm1_files, srtm3_files, local_srtm_dir,
87+
reduce_big_files=reduce_big_files)

srtm/data.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,15 @@ class GeoElevationData:
4444
# Lazy loaded files used in current app:
4545
files = None
4646

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):
4849
self.srtm1_files = srtm1_files
4950
self.srtm3_files = srtm3_files
5051
# Place where local files are stored:
5152
self.files_directory = files_directory
5253

54+
self.reduce_big_files = reduce_big_files
55+
5356
self.files = {}
5457

5558
def get_elevation(self, latitude, longitude, approximate=None):
@@ -124,12 +127,34 @@ def retrieve_or_load_file_data(self, file_name):
124127
if not data:
125128
return None
126129

130+
if self.reduce_big_files:
131+
data = self._reduce_file(data, file_name)
132+
127133
f = open(data_file_name, 'w')
128134
f.write(data)
129135
f.close()
130136

131137
return data
132138

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+
133158
def get_file_name(self, latitude, longitude):
134159
# Decide the file name:
135160
if latitude >= 0:
@@ -338,4 +363,3 @@ def parse_file_name_starting_position(self):
338363

339364
def __str__(self):
340365
return '[{0}:{1}]'.format(self.__class__, self.file_name)
341-

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy