ssb-sgis 1.0.7__py3-none-any.whl → 1.0.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sgis/helpers.py +15 -5
- sgis/maps/explore.py +6 -6
- sgis/maps/tilesources.py +11 -29
- sgis/raster/image_collection.py +77 -44
- {ssb_sgis-1.0.7.dist-info → ssb_sgis-1.0.8.dist-info}/METADATA +1 -1
- {ssb_sgis-1.0.7.dist-info → ssb_sgis-1.0.8.dist-info}/RECORD +8 -8
- {ssb_sgis-1.0.7.dist-info → ssb_sgis-1.0.8.dist-info}/LICENSE +0 -0
- {ssb_sgis-1.0.7.dist-info → ssb_sgis-1.0.8.dist-info}/WHEEL +0 -0
sgis/helpers.py
CHANGED
|
@@ -72,19 +72,29 @@ def to_numpy_func(text: str) -> Callable:
|
|
|
72
72
|
raise ValueError
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
def is_property(obj: object,
|
|
75
|
+
def is_property(obj: object, attr: str) -> bool:
|
|
76
76
|
"""Determine if a class attribute is a property.
|
|
77
77
|
|
|
78
78
|
Args:
|
|
79
79
|
obj: The object to check.
|
|
80
|
-
|
|
80
|
+
attr: The attribute name to check on the object.
|
|
81
81
|
|
|
82
82
|
Returns:
|
|
83
83
|
True if the attribute is a property, False otherwise.
|
|
84
84
|
"""
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
)
|
|
85
|
+
if not hasattr(obj.__class__, attr):
|
|
86
|
+
return False
|
|
87
|
+
if isinstance(obj, type):
|
|
88
|
+
return isinstance(getattr(obj, attr), property)
|
|
89
|
+
else:
|
|
90
|
+
return isinstance(getattr(obj.__class__, attr), property)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def is_method(obj: Any, attr: str) -> bool:
|
|
94
|
+
if isinstance(obj, type):
|
|
95
|
+
return inspect.ismethod(getattr(obj, attr, None))
|
|
96
|
+
else:
|
|
97
|
+
return inspect.ismethod(getattr(obj.__class__, attr, None))
|
|
88
98
|
|
|
89
99
|
|
|
90
100
|
def dict_zip_intersection(*dicts: dict) -> Generator[tuple[Any, ...], None, None]:
|
sgis/maps/explore.py
CHANGED
|
@@ -144,8 +144,8 @@ def to_tile(tile: str | xyzservices.TileProvider, max_zoom: int) -> folium.TileL
|
|
|
144
144
|
"openstreetmap": folium.TileLayer(
|
|
145
145
|
"OpenStreetMap", min_zoom=0, max_zoom=max_zoom
|
|
146
146
|
),
|
|
147
|
-
"grunnkart": kartverket.
|
|
148
|
-
"gråtone": kartverket.
|
|
147
|
+
"grunnkart": kartverket.topo,
|
|
148
|
+
"gråtone": kartverket.topogråtone,
|
|
149
149
|
"norge_i_bilder": kartverket.norge_i_bilder,
|
|
150
150
|
"dark": xyz.CartoDB.DarkMatter,
|
|
151
151
|
"voyager": xyz.CartoDB.Voyager,
|
|
@@ -214,11 +214,11 @@ class Explore(Map):
|
|
|
214
214
|
"""Class for displaying and saving html maps of multiple GeoDataFrames."""
|
|
215
215
|
|
|
216
216
|
# class attribute that can be overridden locally
|
|
217
|
-
tiles: ClassVar[tuple[str]] = (
|
|
218
|
-
"
|
|
219
|
-
"dark",
|
|
217
|
+
tiles: ClassVar[tuple[str, ...]] = (
|
|
218
|
+
"grunnkart",
|
|
220
219
|
"norge_i_bilder",
|
|
221
|
-
|
|
220
|
+
"dark",
|
|
221
|
+
"OpenStreetMap",
|
|
222
222
|
)
|
|
223
223
|
|
|
224
224
|
def __init__(
|
sgis/maps/tilesources.py
CHANGED
|
@@ -3,45 +3,27 @@ from xyzservices import TileProvider
|
|
|
3
3
|
from xyzservices import providers
|
|
4
4
|
|
|
5
5
|
kartverket = Bunch(
|
|
6
|
-
|
|
7
|
-
name="
|
|
8
|
-
url="https://
|
|
9
|
-
attribution="© Kartverket",
|
|
10
|
-
html_attribution='© <a href="https://kartverket.no">Kartverket</a>',
|
|
11
|
-
),
|
|
12
|
-
bakgrunnskart_forenklet=TileProvider(
|
|
13
|
-
name="Norgeskart forenklet",
|
|
14
|
-
url="https://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=bakgrunnskart_forenklet&zoom={z}&x={x}&y={y}",
|
|
15
|
-
attribution="© Kartverket",
|
|
16
|
-
html_attribution='© <a href="https://kartverket.no">Kartverket</a>',
|
|
17
|
-
),
|
|
18
|
-
norges_grunnkart=TileProvider(
|
|
19
|
-
name="Norges grunnkart",
|
|
20
|
-
url="https://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=norges_grunnkart&zoom={z}&x={x}&y={y}",
|
|
21
|
-
attribution="© Kartverket",
|
|
22
|
-
html_attribution='© <a href="https://kartverket.no">Kartverket</a>',
|
|
23
|
-
),
|
|
24
|
-
norges_grunnkart_gråtone=TileProvider(
|
|
25
|
-
name="Norges grunnkart gråtone",
|
|
26
|
-
url="https://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=norges_grunnkart_graatone&zoom={z}&x={x}&y={y}",
|
|
27
|
-
attribution="© Kartverket",
|
|
28
|
-
html_attribution='© <a href="https://kartverket.no">Kartverket</a>',
|
|
29
|
-
),
|
|
30
|
-
n50=TileProvider(
|
|
31
|
-
name="N5 til N50 kartdata",
|
|
32
|
-
url="https://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=kartdata3&zoom={z}&x={x}&y={y}",
|
|
6
|
+
topo=TileProvider(
|
|
7
|
+
name="Topografisk norgeskart",
|
|
8
|
+
url="https://cache.kartverket.no/v1/wmts/1.0.0/topo/default/webmercator/{z}/{y}/{x}.png",
|
|
33
9
|
attribution="© Kartverket",
|
|
34
10
|
html_attribution='© <a href="https://kartverket.no">Kartverket</a>',
|
|
35
11
|
),
|
|
36
12
|
topogråtone=TileProvider(
|
|
37
13
|
name="Topografisk norgeskart gråtone",
|
|
38
|
-
url="https://
|
|
14
|
+
url="https://cache.kartverket.no/v1/wmts/1.0.0/topograatone/default/webmercator/{z}/{y}/{x}.png",
|
|
39
15
|
attribution="© Kartverket",
|
|
40
16
|
html_attribution='© <a href="https://kartverket.no">Kartverket</a>',
|
|
41
17
|
),
|
|
42
18
|
toporaster=TileProvider(
|
|
43
19
|
name="Topografisk raster",
|
|
44
|
-
url="https://
|
|
20
|
+
url="https://cache.kartverket.no/v1/wmts/1.0.0/toporaster/default/webmercator/{z}/{y}/{x}.png",
|
|
21
|
+
attribution="© Kartverket",
|
|
22
|
+
html_attribution='© <a href="https://kartverket.no">Kartverket</a>',
|
|
23
|
+
),
|
|
24
|
+
sjøkart=TileProvider(
|
|
25
|
+
name="Sjøkart",
|
|
26
|
+
url="https://cache.kartverket.no/v1/wmts/1.0.0/sjokartraster/default/webmercator/{z}/{y}/{x}.png",
|
|
45
27
|
attribution="© Kartverket",
|
|
46
28
|
html_attribution='© <a href="https://kartverket.no">Kartverket</a>',
|
|
47
29
|
),
|
sgis/raster/image_collection.py
CHANGED
|
@@ -95,6 +95,8 @@ from ..geopandas_tools.general import get_common_crs
|
|
|
95
95
|
from ..helpers import _fix_path
|
|
96
96
|
from ..helpers import get_all_files
|
|
97
97
|
from ..helpers import get_numpy_func
|
|
98
|
+
from ..helpers import is_method
|
|
99
|
+
from ..helpers import is_property
|
|
98
100
|
from ..io._is_dapla import is_dapla
|
|
99
101
|
from ..io.opener import opener
|
|
100
102
|
from . import sentinel_config as config
|
|
@@ -164,6 +166,7 @@ ALLOWED_INIT_KWARGS = [
|
|
|
164
166
|
"backend",
|
|
165
167
|
"masking",
|
|
166
168
|
"_merged",
|
|
169
|
+
"date",
|
|
167
170
|
]
|
|
168
171
|
|
|
169
172
|
_load_counter: int = 0
|
|
@@ -319,7 +322,7 @@ class _ImageBase:
|
|
|
319
322
|
self._bounds = None
|
|
320
323
|
self._merged = False
|
|
321
324
|
self._from_array = False
|
|
322
|
-
self.
|
|
325
|
+
self._from_geopandas = False
|
|
323
326
|
self.metadata_attributes = self.metadata_attributes or {}
|
|
324
327
|
self._path = None
|
|
325
328
|
self._metadata_from_xml = False
|
|
@@ -328,32 +331,30 @@ class _ImageBase:
|
|
|
328
331
|
|
|
329
332
|
self.metadata = self._metadata_to_nested_dict(metadata)
|
|
330
333
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
self.filename_regexes = (self.filename_regexes,)
|
|
334
|
-
self.filename_patterns = [
|
|
335
|
-
re.compile(regexes, flags=re.VERBOSE)
|
|
336
|
-
for regexes in self.filename_regexes
|
|
337
|
-
]
|
|
338
|
-
else:
|
|
339
|
-
self.filename_patterns = ()
|
|
340
|
-
|
|
341
|
-
if self.image_regexes:
|
|
342
|
-
if isinstance(self.image_regexes, str):
|
|
343
|
-
self.image_regexes = (self.image_regexes,)
|
|
344
|
-
self.image_patterns = [
|
|
345
|
-
re.compile(regexes, flags=re.VERBOSE) for regexes in self.image_regexes
|
|
346
|
-
]
|
|
347
|
-
else:
|
|
348
|
-
self.image_patterns = ()
|
|
334
|
+
self.image_patterns = self._compile_regexes("image_regexes")
|
|
335
|
+
self.filename_patterns = self._compile_regexes("filename_regexes")
|
|
349
336
|
|
|
350
337
|
for key, value in kwargs.items():
|
|
338
|
+
error_obj = ValueError(
|
|
339
|
+
f"{self.__class__.__name__} got an unexpected keyword argument '{key}'"
|
|
340
|
+
)
|
|
351
341
|
if key in ALLOWED_INIT_KWARGS and key in dir(self):
|
|
352
|
-
|
|
342
|
+
if is_property(self, key):
|
|
343
|
+
setattr(self, f"_{key}", value)
|
|
344
|
+
elif is_method(self, key):
|
|
345
|
+
raise error_obj
|
|
346
|
+
else:
|
|
347
|
+
setattr(self, key, value)
|
|
353
348
|
else:
|
|
354
|
-
raise
|
|
355
|
-
|
|
356
|
-
|
|
349
|
+
raise error_obj
|
|
350
|
+
|
|
351
|
+
def _compile_regexes(self, regex_attr: str) -> tuple[re.Pattern]:
|
|
352
|
+
regexes = getattr(self, regex_attr)
|
|
353
|
+
if regexes:
|
|
354
|
+
if isinstance(regexes, str):
|
|
355
|
+
regexes = (regexes,)
|
|
356
|
+
return tuple(re.compile(regexes, flags=re.VERBOSE) for regexes in regexes)
|
|
357
|
+
return ()
|
|
357
358
|
|
|
358
359
|
@staticmethod
|
|
359
360
|
def _metadata_to_nested_dict(
|
|
@@ -367,6 +368,7 @@ class _ImageBase:
|
|
|
367
368
|
if isinstance(metadata, pd.DataFrame):
|
|
368
369
|
|
|
369
370
|
def is_scalar(x) -> bool:
|
|
371
|
+
"""Check if scalar because 'truth value of Series is ambigous'."""
|
|
370
372
|
return not hasattr(x, "__len__") or len(x) <= 1
|
|
371
373
|
|
|
372
374
|
def na_to_none(x) -> None:
|
|
@@ -631,12 +633,24 @@ class _ImageBandBase(_ImageBase):
|
|
|
631
633
|
|
|
632
634
|
def _to_xarray(self, array: np.ndarray, transform: Affine) -> DataArray:
|
|
633
635
|
"""Convert the raster to an xarray.DataArray."""
|
|
636
|
+
attrs = {"crs": self.crs}
|
|
637
|
+
for attr in set(self.metadata_attributes).union({"date"}):
|
|
638
|
+
try:
|
|
639
|
+
attrs[attr] = getattr(self, attr)
|
|
640
|
+
except Exception:
|
|
641
|
+
pass
|
|
642
|
+
|
|
634
643
|
if len(array.shape) == 2:
|
|
635
644
|
height, width = array.shape
|
|
636
645
|
dims = ["y", "x"]
|
|
637
646
|
elif len(array.shape) == 3:
|
|
638
647
|
height, width = array.shape[1:]
|
|
639
648
|
dims = ["band", "y", "x"]
|
|
649
|
+
elif not any(dim for dim in array.shape):
|
|
650
|
+
DataArray(
|
|
651
|
+
name=self.name or self.__class__.__name__,
|
|
652
|
+
attrs=attrs,
|
|
653
|
+
)
|
|
640
654
|
else:
|
|
641
655
|
raise ValueError(
|
|
642
656
|
f"Array should be 2 or 3 dimensional. Got shape {array.shape}"
|
|
@@ -644,13 +658,6 @@ class _ImageBandBase(_ImageBase):
|
|
|
644
658
|
|
|
645
659
|
coords = _generate_spatial_coords(transform, width, height)
|
|
646
660
|
|
|
647
|
-
attrs = {"crs": self.crs}
|
|
648
|
-
for attr in set(self.metadata_attributes).union({"date"}):
|
|
649
|
-
try:
|
|
650
|
-
attrs[attr] = getattr(self, attr)
|
|
651
|
-
except Exception:
|
|
652
|
-
pass
|
|
653
|
-
|
|
654
661
|
return DataArray(
|
|
655
662
|
array,
|
|
656
663
|
coords=coords,
|
|
@@ -667,7 +674,7 @@ class Band(_ImageBandBase):
|
|
|
667
674
|
backend: str = "numpy"
|
|
668
675
|
|
|
669
676
|
@classmethod
|
|
670
|
-
def
|
|
677
|
+
def from_geopandas(
|
|
671
678
|
cls,
|
|
672
679
|
gdf: GeoDataFrame | GeoSeries,
|
|
673
680
|
res: int,
|
|
@@ -691,7 +698,7 @@ class Band(_ImageBandBase):
|
|
|
691
698
|
)
|
|
692
699
|
|
|
693
700
|
obj = cls(arr, res=res, crs=gdf.crs, bounds=gdf.total_bounds, **kwargs)
|
|
694
|
-
obj.
|
|
701
|
+
obj._from_geopandas = True
|
|
695
702
|
return obj
|
|
696
703
|
|
|
697
704
|
def __init__(
|
|
@@ -839,12 +846,18 @@ class Band(_ImageBandBase):
|
|
|
839
846
|
@property
|
|
840
847
|
def height(self) -> int:
|
|
841
848
|
"""Pixel heigth of the image band."""
|
|
842
|
-
|
|
849
|
+
try:
|
|
850
|
+
return self.values.shape[-2]
|
|
851
|
+
except IndexError:
|
|
852
|
+
return 0
|
|
843
853
|
|
|
844
854
|
@property
|
|
845
855
|
def width(self) -> int:
|
|
846
856
|
"""Pixel width of the image band."""
|
|
847
|
-
|
|
857
|
+
try:
|
|
858
|
+
return self.values.shape[-1]
|
|
859
|
+
except IndexError:
|
|
860
|
+
return 0
|
|
848
861
|
|
|
849
862
|
@property
|
|
850
863
|
def tile(self) -> str:
|
|
@@ -892,7 +905,7 @@ class Band(_ImageBandBase):
|
|
|
892
905
|
copied = self.copy()
|
|
893
906
|
value_must_be_at_least = np.sort(np.ravel(copied.values))[-n] - (precision or 0)
|
|
894
907
|
copied._values = np.where(copied.values >= value_must_be_at_least, 1, 0)
|
|
895
|
-
df = copied.
|
|
908
|
+
df = copied.to_geopandas(column).loc[lambda x: x[column] == 1]
|
|
896
909
|
df[column] = f"largest_{n}"
|
|
897
910
|
return df
|
|
898
911
|
|
|
@@ -903,7 +916,7 @@ class Band(_ImageBandBase):
|
|
|
903
916
|
copied = self.copy()
|
|
904
917
|
value_must_be_at_least = np.sort(np.ravel(copied.values))[n] - (precision or 0)
|
|
905
918
|
copied._values = np.where(copied.values <= value_must_be_at_least, 1, 0)
|
|
906
|
-
df = copied.
|
|
919
|
+
df = copied.to_geopandas(column).loc[lambda x: x[column] == 1]
|
|
907
920
|
df[column] = f"smallest_{n}"
|
|
908
921
|
return df
|
|
909
922
|
|
|
@@ -911,6 +924,9 @@ class Band(_ImageBandBase):
|
|
|
911
924
|
self, mask: GeoDataFrame | GeoSeries | Polygon | MultiPolygon, **kwargs
|
|
912
925
|
) -> "Band":
|
|
913
926
|
"""Clip band values to geometry mask."""
|
|
927
|
+
if not self.height or not self.width:
|
|
928
|
+
return self
|
|
929
|
+
|
|
914
930
|
values = _clip_xarray(
|
|
915
931
|
self.to_xarray(),
|
|
916
932
|
mask,
|
|
@@ -978,7 +994,6 @@ class Band(_ImageBandBase):
|
|
|
978
994
|
if self.has_array and [int(x) for x in bounds] != [int(x) for x in self.bounds]:
|
|
979
995
|
print(self)
|
|
980
996
|
print(self.mask)
|
|
981
|
-
print(self.mask.values.shape)
|
|
982
997
|
print(self.values.shape)
|
|
983
998
|
print([int(x) for x in bounds], [int(x) for x in self.bounds])
|
|
984
999
|
raise ValueError(
|
|
@@ -1284,7 +1299,7 @@ class Band(_ImageBandBase):
|
|
|
1284
1299
|
dropna=dropna,
|
|
1285
1300
|
)
|
|
1286
1301
|
|
|
1287
|
-
def
|
|
1302
|
+
def to_geopandas(self, column: str = "value") -> GeoDataFrame:
|
|
1288
1303
|
"""Create a GeoDataFrame from the image Band.
|
|
1289
1304
|
|
|
1290
1305
|
Args:
|
|
@@ -1328,17 +1343,35 @@ class Band(_ImageBandBase):
|
|
|
1328
1343
|
self, arr: np.ndarray | DataArray, masked: bool = True
|
|
1329
1344
|
) -> np.ndarray | np.ma.core.MaskedArray:
|
|
1330
1345
|
if not isinstance(arr, np.ndarray):
|
|
1346
|
+
mask_arr = None
|
|
1331
1347
|
if masked:
|
|
1348
|
+
# if self.mask is not None:
|
|
1349
|
+
# print(self.mask.values.shape, arr.shape)
|
|
1350
|
+
# if self.mask is not None and self.mask.values.shape == arr.shape:
|
|
1351
|
+
# print("hei", self.mask.values.sum())
|
|
1352
|
+
# mask_arr = self.mask.values
|
|
1353
|
+
# else:
|
|
1354
|
+
# mask_arr = np.full(arr.shape, False)
|
|
1355
|
+
# try:
|
|
1356
|
+
# print("hei222", arr.isnull().values.sum())
|
|
1357
|
+
# mask_arr |= arr.isnull().values
|
|
1358
|
+
# except AttributeError:
|
|
1359
|
+
# pass
|
|
1360
|
+
# mask_arr = np.full(arr.shape, False)
|
|
1332
1361
|
try:
|
|
1333
1362
|
mask_arr = arr.isnull().values
|
|
1334
1363
|
except AttributeError:
|
|
1335
|
-
|
|
1364
|
+
pass
|
|
1336
1365
|
try:
|
|
1337
1366
|
arr = arr.to_numpy()
|
|
1338
1367
|
except AttributeError:
|
|
1339
1368
|
arr = arr.values
|
|
1369
|
+
if mask_arr is not None:
|
|
1370
|
+
arr = np.ma.array(arr, mask=mask_arr, fill_value=self.nodata)
|
|
1371
|
+
|
|
1340
1372
|
if not isinstance(arr, np.ndarray):
|
|
1341
1373
|
arr = np.array(arr)
|
|
1374
|
+
|
|
1342
1375
|
if (
|
|
1343
1376
|
masked
|
|
1344
1377
|
and self.mask is not None
|
|
@@ -1750,10 +1783,10 @@ class Image(_ImageBandBase):
|
|
|
1750
1783
|
bounds.append(band.bounds)
|
|
1751
1784
|
return get_total_bounds(bounds)
|
|
1752
1785
|
|
|
1753
|
-
def
|
|
1786
|
+
def to_geopandas(self, column: str = "value") -> GeoDataFrame:
|
|
1754
1787
|
"""Convert the array to a GeoDataFrame of grid polygons and values."""
|
|
1755
1788
|
return pd.concat(
|
|
1756
|
-
[band.
|
|
1789
|
+
[band.to_geopandas(column=column) for band in self], ignore_index=True
|
|
1757
1790
|
)
|
|
1758
1791
|
|
|
1759
1792
|
def sample(
|
|
@@ -2491,7 +2524,7 @@ class ImageCollection(_ImageBase):
|
|
|
2491
2524
|
return xr.combine_by_coords(list(xarrs.values()))
|
|
2492
2525
|
# return Dataset(xarrs)
|
|
2493
2526
|
|
|
2494
|
-
def
|
|
2527
|
+
def to_geopandas(self, column: str = "value") -> dict[str, GeoDataFrame]:
|
|
2495
2528
|
"""Convert each band in each Image to a GeoDataFrame."""
|
|
2496
2529
|
out = {}
|
|
2497
2530
|
i = 0
|
|
@@ -2504,7 +2537,7 @@ class ImageCollection(_ImageBase):
|
|
|
2504
2537
|
name = f"{self.__class__.__name__}({i})"
|
|
2505
2538
|
|
|
2506
2539
|
if name not in out:
|
|
2507
|
-
out[name] = band.
|
|
2540
|
+
out[name] = band.to_geopandas(column=column)
|
|
2508
2541
|
return out
|
|
2509
2542
|
|
|
2510
2543
|
def sample(self, n: int = 1, size: int = 500) -> "ImageCollection":
|
|
@@ -3257,7 +3290,7 @@ class PathlessImageError(ValueError):
|
|
|
3257
3290
|
what = "that have been merged"
|
|
3258
3291
|
elif self.instance._from_array:
|
|
3259
3292
|
what = "from arrays"
|
|
3260
|
-
elif self.instance.
|
|
3293
|
+
elif self.instance._from_geopandas:
|
|
3261
3294
|
what = "from GeoDataFrames"
|
|
3262
3295
|
else:
|
|
3263
3296
|
raise ValueError(self.instance)
|
|
@@ -17,20 +17,20 @@ sgis/geopandas_tools/point_operations.py,sha256=JM4hvfIVxZaZdGNlGzcCurrKzkgC_b9h
|
|
|
17
17
|
sgis/geopandas_tools/polygon_operations.py,sha256=FJ-dXCxLHRsmp0oXsmBOFRprFFwmhrxqOPZkW2WWWQM,50088
|
|
18
18
|
sgis/geopandas_tools/polygons_as_rings.py,sha256=BX_GZS6F9I4NbEpiOlNBd7zywJjdfdJVi_MkeONBuiM,14941
|
|
19
19
|
sgis/geopandas_tools/sfilter.py,sha256=SLcMYprQwnY5DNo0R7TGXk4m6u26H8o4PRn-RPhmeZY,9345
|
|
20
|
-
sgis/helpers.py,sha256=
|
|
20
|
+
sgis/helpers.py,sha256=3NqPfVBKlZcZTiMJrsTAlDv5tNKDHrJr_8NimutVzQg,8797
|
|
21
21
|
sgis/io/_is_dapla.py,sha256=o_qFD5GOi3dsSGOKmW6R8wZU0htVwFgRbGX7ppJCqT4,431
|
|
22
22
|
sgis/io/dapla_functions.py,sha256=8dfxBtkGUy7vltlKydXkathBsSd9DPHVIDIOe-Ctjsg,18180
|
|
23
23
|
sgis/io/opener.py,sha256=BHyH7L8Ubh9C4Lsb8eBzGI6FLWg8UQFu-1bg3NEy_2k,862
|
|
24
24
|
sgis/io/read_parquet.py,sha256=FvZYv1rLkUlrSaUY6QW6E1yntmntTeQuZ9ZRgCDO4IM,3776
|
|
25
25
|
sgis/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
26
|
sgis/maps/examine.py,sha256=Pb0dH8JazU5E2svfQrzHO1Bi-sjy5SeyY6zoeMO34jE,9369
|
|
27
|
-
sgis/maps/explore.py,sha256=
|
|
27
|
+
sgis/maps/explore.py,sha256=mbSKFynLklJ3g4YfZJMDUo4K7Lg3sDoXDtnJ0l4L51w,45533
|
|
28
28
|
sgis/maps/httpserver.py,sha256=7Od9JMCtntcIQKk_TchetojMHzFHT9sPw7GANahI97c,1982
|
|
29
29
|
sgis/maps/legend.py,sha256=1ZOhzftq1HRKlHphhfqUm82U-Kjx_xkACieLRevxke8,26232
|
|
30
30
|
sgis/maps/map.py,sha256=4znVxefW2wVe_LSmGAVcJQxf3oF_6aAyppNo4EyYJH4,29431
|
|
31
31
|
sgis/maps/maps.py,sha256=HbKG1OHkSFYZ2dpgpag6H-LY1tOtZKaZncNNrBQpkU4,23127
|
|
32
32
|
sgis/maps/thematicmap.py,sha256=bFlZy2xSKmEOHhvM0d1pv8O9JuNjR3P_9colTJnduvE,20729
|
|
33
|
-
sgis/maps/tilesources.py,sha256=
|
|
33
|
+
sgis/maps/tilesources.py,sha256=F4mFHxPwkiPJdVKzNkScTX6xbJAMIUtlTq4mQ83oguw,1746
|
|
34
34
|
sgis/networkanalysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
35
|
sgis/networkanalysis/_get_route.py,sha256=9I3t9pnccUPr4mozy3TJCOpGCCf3UOIojmsbifubZbA,6368
|
|
36
36
|
sgis/networkanalysis/_od_cost_matrix.py,sha256=zkyPX7ObT996ahaFJ2oI0D0SqQWbWyfy_qLtXwValPg,3434
|
|
@@ -49,12 +49,12 @@ sgis/parallel/parallel.py,sha256=SlC_mOwvSSyWTKUcxLMGkuWHUkEC6dXTlN0Jn5cAtxA,396
|
|
|
49
49
|
sgis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
sgis/raster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
51
|
sgis/raster/base.py,sha256=Bdd30DS0iIv7fo93vrFoEBGC7a5PFaBXT46fcHwgORY,6558
|
|
52
|
-
sgis/raster/image_collection.py,sha256=
|
|
52
|
+
sgis/raster/image_collection.py,sha256=XrQddJgpP-R0KeLEWeqsOBOaMExA9lCt0_5rR7tXku8,118307
|
|
53
53
|
sgis/raster/indices.py,sha256=-J1HYmnT240iozvgagvyis6K0_GHZHRuUrPOgyoeIrY,223
|
|
54
54
|
sgis/raster/regex.py,sha256=I7pTAYNoOFgcPRLllR4jGMhmRk8AkOgm1D38fDSFnlg,3745
|
|
55
55
|
sgis/raster/sentinel_config.py,sha256=nySDqn2R8M6W8jguoBeSAK_zzbAsqmaI59i32446FwY,1268
|
|
56
56
|
sgis/raster/zonal.py,sha256=st2mWiUcdxeEiHBOZSgFOnVcP6pc4EMPJBPw537Z4V8,3837
|
|
57
|
-
ssb_sgis-1.0.
|
|
58
|
-
ssb_sgis-1.0.
|
|
59
|
-
ssb_sgis-1.0.
|
|
60
|
-
ssb_sgis-1.0.
|
|
57
|
+
ssb_sgis-1.0.8.dist-info/LICENSE,sha256=np3IfD5m0ZUofn_kVzDZqliozuiO6wrktw3LRPjyEiI,1073
|
|
58
|
+
ssb_sgis-1.0.8.dist-info/METADATA,sha256=9Q_QyG0VOQAy9uhAi1kX64dVgb6AJ2xWwG91B_r_Nxo,11772
|
|
59
|
+
ssb_sgis-1.0.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
60
|
+
ssb_sgis-1.0.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|