-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelpers.py
66 lines (41 loc) · 1.77 KB
/
helpers.py
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
from urllib.parse import urlparse
import gdal
import numpy as np
def hello():
print('Hello World!')
def get_vsi_url(enclosure, username=None, api_key=None):
parsed_url = urlparse(enclosure)
if username is not None:
url = '/vsicurl/{}://{}:{}@{}/api{}'.format(list(parsed_url)[0],
username,
api_key,
list(parsed_url)[1],
list(parsed_url)[2])
else:
url = '/vsicurl/{}://{}/api{}'.format(list(parsed_url)[0],
list(parsed_url)[1],
list(parsed_url)[2])
return url
def vsi_download(enclosure, bbox=None, username=None, api_key=None):
vsi_url = get_vsi_url(enclosure, username, api_key)
# load VSI URL in memory
output = '/vsimem/subset.tif'
ds = gdal.Open(vsi_url)
if bbox is not None:
ulx, uly, lrx, lry = bbox[0], bbox[3], bbox[2], bbox[1]
ds = gdal.Translate(destName=output,
srcDS=ds,
projWin = [ulx, uly, lrx, lry],
projWinSRS = 'EPSG:4326',
outputType=gdal.GDT_Float32)
else:
ds = gdal.Translate(destName=output,
srcDS=ds,
outputType=gdal.GDT_Float32)
ds = None
# create a numpy array
ds = gdal.Open(output)
layers = []
for i in range(1, ds.RasterCount+1):
layers.append(ds.GetRasterBand(i).ReadAsArray())
return np.dstack(layers)