ssb-sgis 1.2.1__py3-none-any.whl → 1.2.3__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/geopandas_tools/general.py +1 -1
- sgis/geopandas_tools/overlay.py +3 -1
- sgis/io/dapla_functions.py +2 -1
- sgis/maps/explore.py +32 -35
- sgis/maps/legend.py +49 -43
- sgis/maps/map.py +117 -131
- sgis/maps/maps.py +2 -2
- sgis/maps/norge_i_bilder.json +410 -135
- sgis/maps/thematicmap.py +130 -47
- sgis/maps/wms.py +2 -1
- sgis/raster/image_collection.py +12 -6
- {ssb_sgis-1.2.1.dist-info → ssb_sgis-1.2.3.dist-info}/METADATA +1 -1
- {ssb_sgis-1.2.1.dist-info → ssb_sgis-1.2.3.dist-info}/RECORD +15 -15
- {ssb_sgis-1.2.1.dist-info → ssb_sgis-1.2.3.dist-info}/LICENSE +0 -0
- {ssb_sgis-1.2.1.dist-info → ssb_sgis-1.2.3.dist-info}/WHEEL +0 -0
sgis/maps/thematicmap.py
CHANGED
|
@@ -11,12 +11,14 @@ import pandas as pd
|
|
|
11
11
|
from geopandas import GeoDataFrame
|
|
12
12
|
|
|
13
13
|
from ..geopandas_tools.conversion import to_bbox
|
|
14
|
+
from ..geopandas_tools.conversion import to_gdf
|
|
14
15
|
from ..helpers import is_property
|
|
15
16
|
from .legend import LEGEND_KWARGS
|
|
16
17
|
from .legend import ContinousLegend
|
|
17
18
|
from .legend import Legend
|
|
18
19
|
from .legend import prettify_bins
|
|
19
20
|
from .map import Map
|
|
21
|
+
from .map import _determine_best_name
|
|
20
22
|
|
|
21
23
|
# the geopandas._explore raises a deprication warning. Ignoring for now.
|
|
22
24
|
warnings.filterwarnings(
|
|
@@ -70,6 +72,7 @@ class ThematicMap(Map):
|
|
|
70
72
|
bins: For numeric columns. List of numbers that define the
|
|
71
73
|
maximum value for the color groups.
|
|
72
74
|
nan_label: Label for missing data.
|
|
75
|
+
nan_hatch: Hatch for missing data. See https://matplotlib.org/stable/gallery/shapes_and_collections/hatch_style_reference.html.
|
|
73
76
|
legend_kwargs: dictionary with attributes for the legend. E.g.:
|
|
74
77
|
title: Legend title. Defaults to the column name.
|
|
75
78
|
rounding: If positive number, it will round floats to n decimals.
|
|
@@ -170,23 +173,50 @@ class ThematicMap(Map):
|
|
|
170
173
|
k: int = 5,
|
|
171
174
|
bins: tuple[float] | None = None,
|
|
172
175
|
nan_label: str = "Missing",
|
|
176
|
+
nan_color: str | None = None,
|
|
177
|
+
nan_hatch: str | None = None,
|
|
178
|
+
hatch: str | None = None,
|
|
173
179
|
legend_kwargs: dict | None = None,
|
|
174
180
|
title_kwargs: dict | None = None,
|
|
175
181
|
legend: bool = True,
|
|
176
182
|
**kwargs,
|
|
177
183
|
) -> None:
|
|
178
|
-
"""
|
|
184
|
+
"""Initializer."""
|
|
185
|
+
new_gdfs = {}
|
|
186
|
+
for i, gdf in enumerate(gdfs):
|
|
187
|
+
if isinstance(gdf, str):
|
|
188
|
+
raise ValueError("gdfs cannot be a string in ThematicMap.")
|
|
189
|
+
name = _determine_best_name(gdf, column, i)
|
|
190
|
+
if name in new_gdfs:
|
|
191
|
+
name += str(i)
|
|
192
|
+
try:
|
|
193
|
+
new_gdfs[name] = to_gdf(gdf)
|
|
194
|
+
except Exception:
|
|
195
|
+
continue
|
|
196
|
+
|
|
197
|
+
new_kwargs = {}
|
|
198
|
+
self.kwargs = {}
|
|
199
|
+
for key, value in kwargs.items():
|
|
200
|
+
try:
|
|
201
|
+
new_gdfs[key] = to_gdf(value)
|
|
202
|
+
except Exception:
|
|
203
|
+
new_kwargs[key] = value
|
|
204
|
+
|
|
179
205
|
super().__init__(
|
|
180
|
-
*gdfs,
|
|
181
206
|
column=column,
|
|
182
207
|
scheme=scheme,
|
|
183
208
|
k=k,
|
|
184
209
|
bins=bins,
|
|
185
210
|
nan_label=nan_label,
|
|
211
|
+
nan_color=nan_color,
|
|
212
|
+
**new_gdfs,
|
|
186
213
|
)
|
|
187
214
|
|
|
215
|
+
self.kwargs = self.kwargs | new_kwargs
|
|
216
|
+
|
|
188
217
|
self.title = title
|
|
189
218
|
self._size = size
|
|
219
|
+
self.hatch = hatch
|
|
190
220
|
self._dark = dark
|
|
191
221
|
self.title_kwargs = title_kwargs or {}
|
|
192
222
|
if title_position and "position" in self.title_kwargs:
|
|
@@ -219,7 +249,7 @@ class ThematicMap(Map):
|
|
|
219
249
|
|
|
220
250
|
self._title_fontsize = self._size * 1.9
|
|
221
251
|
|
|
222
|
-
black = kwargs.pop("black", None)
|
|
252
|
+
black = self.kwargs.pop("black", None)
|
|
223
253
|
self._dark = self._dark or black
|
|
224
254
|
|
|
225
255
|
if not self.cmap and not self._is_categorical:
|
|
@@ -235,13 +265,15 @@ class ThematicMap(Map):
|
|
|
235
265
|
if cmap:
|
|
236
266
|
self._cmap = cmap
|
|
237
267
|
|
|
238
|
-
|
|
268
|
+
new_kwargs = {}
|
|
269
|
+
for key, value in self.kwargs.items():
|
|
239
270
|
if key not in MAP_KWARGS:
|
|
240
|
-
|
|
271
|
+
new_kwargs[key] = value
|
|
241
272
|
elif is_property(self, key):
|
|
242
273
|
setattr(self, f"_{key}", value)
|
|
243
274
|
else:
|
|
244
275
|
setattr(self, key, value)
|
|
276
|
+
self.kwargs = new_kwargs
|
|
245
277
|
|
|
246
278
|
for key, value in legend_kwargs.items():
|
|
247
279
|
if key not in LEGEND_KWARGS:
|
|
@@ -261,6 +293,20 @@ class ThematicMap(Map):
|
|
|
261
293
|
self.diffx = self.maxx - self.minx
|
|
262
294
|
self.diffy = self.maxy - self.miny
|
|
263
295
|
|
|
296
|
+
if self._gdf[self._column].isna().any():
|
|
297
|
+
isnas = []
|
|
298
|
+
for label, gdf in self._gdfs.items():
|
|
299
|
+
|
|
300
|
+
isnas.append(gdf[gdf[self._column].isna()])
|
|
301
|
+
self._gdfs[label] = gdf[gdf[self._column].notna()]
|
|
302
|
+
color = self.facecolor if nan_hatch else self.nan_color
|
|
303
|
+
self._more_data[nan_label] = {
|
|
304
|
+
"gdf": pd.concat(isnas, ignore_index=True),
|
|
305
|
+
"color": color,
|
|
306
|
+
"hatch": nan_hatch,
|
|
307
|
+
} | new_kwargs
|
|
308
|
+
self._gdf = pd.concat(self.gdfs.values(), ignore_index=True)
|
|
309
|
+
|
|
264
310
|
@property
|
|
265
311
|
def valid_keywords(self) -> set[str]:
|
|
266
312
|
"""List all valid keywords for the class initialiser."""
|
|
@@ -279,6 +325,52 @@ class ThematicMap(Map):
|
|
|
279
325
|
super().change_cmap(cmap, start, stop)
|
|
280
326
|
return self
|
|
281
327
|
|
|
328
|
+
def add_data(
|
|
329
|
+
self,
|
|
330
|
+
*,
|
|
331
|
+
color: str | None = None,
|
|
332
|
+
hatch: str | None = None,
|
|
333
|
+
**kwargs,
|
|
334
|
+
) -> "ThematicMap":
|
|
335
|
+
"""Add Geometric Data of a given color or hatch.
|
|
336
|
+
|
|
337
|
+
The geodata must be passed as keyword argument.
|
|
338
|
+
The keyword will be used as label in the legend.
|
|
339
|
+
|
|
340
|
+
Args:
|
|
341
|
+
color: Color of the data.
|
|
342
|
+
hatch: Hatch of the data. See https://matplotlib.org/stable/gallery/shapes_and_collections/hatch_style_reference.html.
|
|
343
|
+
**kwargs: Must include exactly one GeoDataFrame or object that can be converted to GeoDataFrame.
|
|
344
|
+
Additional kwargs are passed to geopandas.GeoDataFrame.plot and matplotlib.patches.Patch.
|
|
345
|
+
"""
|
|
346
|
+
new_kwargs = {}
|
|
347
|
+
n = 0
|
|
348
|
+
for key, value in kwargs.items():
|
|
349
|
+
try:
|
|
350
|
+
gdf = to_gdf(value)
|
|
351
|
+
label = key
|
|
352
|
+
n += 1
|
|
353
|
+
except Exception:
|
|
354
|
+
new_kwargs[key] = value
|
|
355
|
+
|
|
356
|
+
if n != 1:
|
|
357
|
+
raise ValueError(
|
|
358
|
+
"Must specify a single geometry object as keyword argument."
|
|
359
|
+
)
|
|
360
|
+
if not color and not hatch:
|
|
361
|
+
raise TypeError("Must pass either 'color' or 'hatch'.")
|
|
362
|
+
if hatch is not None:
|
|
363
|
+
color = self.facecolor
|
|
364
|
+
gdf["label"] = label
|
|
365
|
+
self._more_data[label] = {
|
|
366
|
+
"gdf": gdf,
|
|
367
|
+
"color": color,
|
|
368
|
+
"hatch": hatch,
|
|
369
|
+
} | new_kwargs
|
|
370
|
+
if self.bounds is None:
|
|
371
|
+
self.bounds = to_bbox(self._gdf.total_bounds)
|
|
372
|
+
return self
|
|
373
|
+
|
|
282
374
|
def add_background(
|
|
283
375
|
self,
|
|
284
376
|
gdf: GeoDataFrame,
|
|
@@ -327,11 +419,13 @@ class ThematicMap(Map):
|
|
|
327
419
|
include_legend = False
|
|
328
420
|
|
|
329
421
|
elif self._is_categorical:
|
|
330
|
-
|
|
422
|
+
self._prepare_categorical_plot()
|
|
423
|
+
if self._gdf is not None:
|
|
424
|
+
kwargs["color"] = self._gdf["color"]
|
|
331
425
|
if self.legend:
|
|
332
426
|
self.legend._prepare_categorical_legend(
|
|
333
427
|
categories_colors=self._categories_colors_dict,
|
|
334
|
-
|
|
428
|
+
hatch=self.hatch,
|
|
335
429
|
)
|
|
336
430
|
|
|
337
431
|
else:
|
|
@@ -339,19 +433,23 @@ class ThematicMap(Map):
|
|
|
339
433
|
if self.legend:
|
|
340
434
|
if not self.legend.rounding:
|
|
341
435
|
self.legend._rounding = self.legend._get_rounding(
|
|
342
|
-
array=self._gdf
|
|
436
|
+
array=self._gdf[self._column].dropna()
|
|
343
437
|
)
|
|
344
438
|
|
|
345
439
|
self.legend._prepare_continous_legend(
|
|
346
440
|
bins=self.bins,
|
|
347
441
|
colors=self._unique_colors,
|
|
348
|
-
nan_label=self.nan_label,
|
|
349
442
|
bin_values=self._bins_unique_values,
|
|
443
|
+
nan_label=self.nan_label,
|
|
444
|
+
hatch=self.hatch,
|
|
350
445
|
)
|
|
351
446
|
|
|
447
|
+
if self.legend and self._more_data:
|
|
448
|
+
self.legend._add_more_data_to_legend(self._more_data)
|
|
449
|
+
|
|
352
450
|
if self.legend and not self.legend._position_has_been_set:
|
|
353
451
|
self.legend._position = self.legend._get_best_legend_position(
|
|
354
|
-
self._gdf, k=self._k +
|
|
452
|
+
self._gdf, k=self._k + self._gdf[self._column].isna().any()
|
|
355
453
|
)
|
|
356
454
|
|
|
357
455
|
self._prepare_plot(**kwargs)
|
|
@@ -359,7 +457,9 @@ class ThematicMap(Map):
|
|
|
359
457
|
if self.legend:
|
|
360
458
|
self.ax = self.legend._actually_add_legend(ax=self.ax)
|
|
361
459
|
|
|
362
|
-
self.ax = self._gdf.plot(
|
|
460
|
+
self.ax = self._gdf.plot(
|
|
461
|
+
legend=include_legend, ax=self.ax, hatch=self.hatch, **kwargs
|
|
462
|
+
)
|
|
363
463
|
|
|
364
464
|
if __test:
|
|
365
465
|
return self
|
|
@@ -394,16 +494,17 @@ class ThematicMap(Map):
|
|
|
394
494
|
)
|
|
395
495
|
self.fig.patch.set_facecolor(self.facecolor)
|
|
396
496
|
self.ax.set_axis_off()
|
|
497
|
+
self.ax.set_xlim([self.minx - self.diffx * 0.03, self.maxx + self.diffx * 0.03])
|
|
498
|
+
self.ax.set_ylim([self.miny - self.diffy * 0.03, self.maxy + self.diffy * 0.03])
|
|
397
499
|
|
|
398
500
|
if hasattr(self, "_background_gdfs"):
|
|
399
501
|
self._actually_add_background()
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
)
|
|
502
|
+
# if self.bounds is not None:
|
|
503
|
+
|
|
504
|
+
for datadict in self._more_data.values():
|
|
505
|
+
gdf = datadict["gdf"]
|
|
506
|
+
datadict = {key: value for key, value in datadict.items() if key != "gdf"}
|
|
507
|
+
gdf.plot(ax=self.ax, **datadict)
|
|
407
508
|
|
|
408
509
|
if self.title:
|
|
409
510
|
self.ax.set_title(
|
|
@@ -437,7 +538,10 @@ class ThematicMap(Map):
|
|
|
437
538
|
|
|
438
539
|
classified = self._classify_from_bins(self._gdf, bins=self.bins)
|
|
439
540
|
classified_sequential = self._push_classification(classified)
|
|
440
|
-
n_colors =
|
|
541
|
+
n_colors = (
|
|
542
|
+
len(np.unique(classified_sequential))
|
|
543
|
+
- self._gdf[self._column].isna().any()
|
|
544
|
+
)
|
|
441
545
|
self._unique_colors = self._get_continous_colors(n=n_colors)
|
|
442
546
|
self._bins_unique_values = self._make_bin_value_dict(
|
|
443
547
|
self._gdf, classified_sequential
|
|
@@ -453,27 +557,16 @@ class ThematicMap(Map):
|
|
|
453
557
|
bins=self.bins, rounding=self.legend._rounding
|
|
454
558
|
)
|
|
455
559
|
|
|
456
|
-
if
|
|
560
|
+
if self._gdf[self._column].isna().any():
|
|
457
561
|
self.bins = self.bins + [self.nan_label]
|
|
458
562
|
|
|
459
563
|
return kwargs
|
|
460
564
|
|
|
461
|
-
def _prepare_categorical_plot(self, kwargs: dict) -> dict:
|
|
462
|
-
"""Map values to colors."""
|
|
463
|
-
self._make_categories_colors_dict()
|
|
464
|
-
if self._gdf is not None and len(self._gdf):
|
|
465
|
-
self._fix_nans()
|
|
466
|
-
|
|
467
|
-
if self._gdf is not None:
|
|
468
|
-
colorarray = self._gdf["color"]
|
|
469
|
-
kwargs["color"] = colorarray
|
|
470
|
-
return kwargs
|
|
471
|
-
|
|
472
565
|
def _actually_add_legend(self) -> None:
|
|
473
566
|
"""Add legend to the axis and fill it with colors and labels."""
|
|
474
567
|
if not self.legend._position_has_been_set:
|
|
475
568
|
self.legend._position = self.legend._get_best_legend_position(
|
|
476
|
-
self._gdf, k=self._k +
|
|
569
|
+
self._gdf, k=self._k + self._gdf[self._column].isna().any()
|
|
477
570
|
)
|
|
478
571
|
|
|
479
572
|
if self._is_categorical:
|
|
@@ -518,15 +611,15 @@ class ThematicMap(Map):
|
|
|
518
611
|
return bins_unique_values
|
|
519
612
|
|
|
520
613
|
def _actually_add_background(self) -> None:
|
|
521
|
-
self.ax.set_xlim([self.minx - self.diffx * 0.03, self.maxx + self.diffx * 0.03])
|
|
522
|
-
self.ax.set_ylim([self.miny - self.diffy * 0.03, self.maxy + self.diffy * 0.03])
|
|
614
|
+
# self.ax.set_xlim([self.minx - self.diffx * 0.03, self.maxx + self.diffx * 0.03])
|
|
615
|
+
# self.ax.set_ylim([self.miny - self.diffy * 0.03, self.maxy + self.diffy * 0.03])
|
|
523
616
|
self._background_gdfs.plot(
|
|
524
617
|
ax=self.ax, color=self.bg_gdf_color, **self.bg_gdf_kwargs
|
|
525
618
|
)
|
|
526
619
|
|
|
527
620
|
@staticmethod
|
|
528
621
|
def _get_matplotlib_figure_and_axix(
|
|
529
|
-
figsize: tuple[int, int]
|
|
622
|
+
figsize: tuple[int, int],
|
|
530
623
|
) -> tuple[matplotlib.figure.Figure, matplotlib.axes.Axes]:
|
|
531
624
|
fig = plt.figure(figsize=figsize)
|
|
532
625
|
ax = fig.add_subplot(1, 1, 1)
|
|
@@ -539,7 +632,7 @@ class ThematicMap(Map):
|
|
|
539
632
|
"#fefefe",
|
|
540
633
|
"#383836",
|
|
541
634
|
)
|
|
542
|
-
self.nan_color = "#666666"
|
|
635
|
+
self.nan_color = "#666666" if self._nan_color_was_none else self.nan_color
|
|
543
636
|
if not self._is_categorical:
|
|
544
637
|
self.change_cmap("viridis")
|
|
545
638
|
|
|
@@ -557,7 +650,7 @@ class ThematicMap(Map):
|
|
|
557
650
|
"#0f0f0f",
|
|
558
651
|
"#e8e6e6",
|
|
559
652
|
)
|
|
560
|
-
self.nan_color = "#c2c2c2"
|
|
653
|
+
self.nan_color = "#c2c2c2" if self._nan_color_was_none else self.nan_color
|
|
561
654
|
if not self._is_categorical:
|
|
562
655
|
self.change_cmap("RdPu", start=23)
|
|
563
656
|
|
|
@@ -569,16 +662,6 @@ class ThematicMap(Map):
|
|
|
569
662
|
}.items():
|
|
570
663
|
setattr(self.legend, key, color)
|
|
571
664
|
|
|
572
|
-
@property
|
|
573
|
-
def dark(self) -> bool:
|
|
574
|
-
"""Whether to use dark background and light text colors."""
|
|
575
|
-
return self._dark
|
|
576
|
-
|
|
577
|
-
@dark.setter
|
|
578
|
-
def dark(self, new_value: bool):
|
|
579
|
-
self._dark = new_value
|
|
580
|
-
self._dark_or_light()
|
|
581
|
-
|
|
582
665
|
@property
|
|
583
666
|
def title_fontsize(self) -> int:
|
|
584
667
|
"""Title fontsize, not to be confused with legend.title_fontsize."""
|
sgis/maps/wms.py
CHANGED
|
@@ -55,6 +55,7 @@ class NorgeIBilderWms(WmsLoader):
|
|
|
55
55
|
contains: str | Iterable[str] | None = None
|
|
56
56
|
not_contains: str | Iterable[str] | None = None
|
|
57
57
|
show: bool | Iterable[int] | int = False
|
|
58
|
+
_use_json: bool = True
|
|
58
59
|
|
|
59
60
|
def load_tiles(self) -> None:
|
|
60
61
|
"""Load all Norge i bilder tiles into self.tiles."""
|
|
@@ -184,7 +185,7 @@ class NorgeIBilderWms(WmsLoader):
|
|
|
184
185
|
|
|
185
186
|
self.years = [str(int(year)) for year in self.years]
|
|
186
187
|
|
|
187
|
-
if all(year in JSON_YEARS for year in self.years):
|
|
188
|
+
if self._use_json and all(year in JSON_YEARS for year in self.years):
|
|
188
189
|
try:
|
|
189
190
|
with open(JSON_PATH, encoding="utf-8") as file:
|
|
190
191
|
self.tiles = json.load(file)
|
sgis/raster/image_collection.py
CHANGED
|
@@ -94,6 +94,8 @@ except ImportError:
|
|
|
94
94
|
"""Placeholder."""
|
|
95
95
|
|
|
96
96
|
|
|
97
|
+
from ..conf import _get_instance
|
|
98
|
+
from ..conf import config
|
|
97
99
|
from ..geopandas_tools.bounds import get_total_bounds
|
|
98
100
|
from ..geopandas_tools.conversion import to_bbox
|
|
99
101
|
from ..geopandas_tools.conversion import to_gdf
|
|
@@ -106,7 +108,7 @@ from ..helpers import is_method
|
|
|
106
108
|
from ..helpers import is_property
|
|
107
109
|
from ..io._is_dapla import is_dapla
|
|
108
110
|
from ..io.opener import opener
|
|
109
|
-
from . import sentinel_config
|
|
111
|
+
from . import sentinel_config
|
|
110
112
|
from .base import _array_to_geojson
|
|
111
113
|
from .base import _gdf_to_arr
|
|
112
114
|
from .base import _get_res_from_bounds
|
|
@@ -443,11 +445,15 @@ class _ImageBase:
|
|
|
443
445
|
metadata_attributes: ClassVar[dict | None] = None
|
|
444
446
|
masking: ClassVar[BandMasking | None] = None
|
|
445
447
|
|
|
446
|
-
def __init__(self, *, metadata=None, bbox=None, **kwargs) -> None:
|
|
448
|
+
def __init__(self, *, metadata=None, bbox=None, file_system=None, **kwargs) -> None:
|
|
447
449
|
|
|
448
450
|
self._bounds = None
|
|
449
451
|
self._path = None
|
|
450
452
|
self._bbox = to_bbox(bbox) if bbox is not None else None
|
|
453
|
+
if file_system is None:
|
|
454
|
+
self.file_system = _get_instance(config, "file_system")
|
|
455
|
+
else:
|
|
456
|
+
self.file_system = file_system
|
|
451
457
|
|
|
452
458
|
self.metadata_attributes = self.metadata_attributes or {}
|
|
453
459
|
|
|
@@ -3135,8 +3141,8 @@ class ImageCollection(_ImageBase):
|
|
|
3135
3141
|
class Sentinel2Config:
|
|
3136
3142
|
"""Holder of Sentinel 2 regexes, band_ids etc."""
|
|
3137
3143
|
|
|
3138
|
-
image_regexes: ClassVar[str] = (
|
|
3139
|
-
filename_regexes: ClassVar[str] = (
|
|
3144
|
+
image_regexes: ClassVar[str] = (sentinel_config.SENTINEL2_IMAGE_REGEX,)
|
|
3145
|
+
filename_regexes: ClassVar[str] = (sentinel_config.SENTINEL2_FILENAME_REGEX,)
|
|
3140
3146
|
metadata_attributes: ClassVar[
|
|
3141
3147
|
dict[str, Callable | functools.partial | tuple[str]]
|
|
3142
3148
|
] = {
|
|
@@ -3222,8 +3228,8 @@ class Sentinel2Config:
|
|
|
3222
3228
|
class Sentinel2CloudlessConfig(Sentinel2Config):
|
|
3223
3229
|
"""Holder of regexes, band_ids etc. for Sentinel 2 cloudless mosaic."""
|
|
3224
3230
|
|
|
3225
|
-
image_regexes: ClassVar[str] = (
|
|
3226
|
-
filename_regexes: ClassVar[str] = (
|
|
3231
|
+
image_regexes: ClassVar[str] = (sentinel_config.SENTINEL2_MOSAIC_IMAGE_REGEX,)
|
|
3232
|
+
filename_regexes: ClassVar[str] = (sentinel_config.SENTINEL2_MOSAIC_FILENAME_REGEX,)
|
|
3227
3233
|
masking: ClassVar[None] = None
|
|
3228
3234
|
all_bands: ClassVar[list[str]] = [
|
|
3229
3235
|
x.replace("B0", "B") for x in Sentinel2Config.all_bands
|
|
@@ -9,11 +9,11 @@ sgis/geopandas_tools/centerlines.py,sha256=Q65Sx01SeAlulBEd9oaZkB2maBBNdLcJwAbTI
|
|
|
9
9
|
sgis/geopandas_tools/cleaning.py,sha256=PkAVVZ84ahek8_uVlTRtCO8nCWO6DdGltWLTmPOsvxM,24426
|
|
10
10
|
sgis/geopandas_tools/conversion.py,sha256=w3W0Utaw7SESRR659percNLwOY9_yfg6DL5hcuM1CUA,25017
|
|
11
11
|
sgis/geopandas_tools/duplicates.py,sha256=TDDM4u1n7SIkyJrOfl1Lno92AmUPqtXBHsj1IUKC0hI,14992
|
|
12
|
-
sgis/geopandas_tools/general.py,sha256=
|
|
12
|
+
sgis/geopandas_tools/general.py,sha256=YRpNEdwTHyFdQOdAfbCmYXS7PxoDjXxoagwpteXkYdI,43937
|
|
13
13
|
sgis/geopandas_tools/geocoding.py,sha256=n47aFQMm4yX1MsPnTM4dFjwegCA1ZmGUDj1uyu7OJV4,691
|
|
14
14
|
sgis/geopandas_tools/geometry_types.py,sha256=ijQDbQaZPqPGjBl707H4yooNXpk21RXyatI7itnvqLk,7603
|
|
15
15
|
sgis/geopandas_tools/neighbors.py,sha256=tMs8jUU0np5QvIysUdF0lLEdXwiXTBotTSdgUXclEfY,17480
|
|
16
|
-
sgis/geopandas_tools/overlay.py,sha256=
|
|
16
|
+
sgis/geopandas_tools/overlay.py,sha256=5i9u8GgFuU0fCqzELsbIaoUPhw-E7eZHl_yKB0wEcGM,23464
|
|
17
17
|
sgis/geopandas_tools/point_operations.py,sha256=JM4hvfIVxZaZdGNlGzcCurrKzkgC_b9hzbFYN42f9WY,6972
|
|
18
18
|
sgis/geopandas_tools/polygon_operations.py,sha256=v-B9IgbFfm4dVHKPyzvmnNiqVCdtl9ddpCsQpZZ-9sU,49284
|
|
19
19
|
sgis/geopandas_tools/polygons_as_rings.py,sha256=BX_GZS6F9I4NbEpiOlNBd7zywJjdfdJVi_MkeONBuiM,14941
|
|
@@ -23,20 +23,20 @@ sgis/geopandas_tools/utils.py,sha256=X0pRvB1tWgV_0BCrRS1HU9LtLGnZCpvVPxyqM9JGb0Y
|
|
|
23
23
|
sgis/helpers.py,sha256=4N6vFWQ3TYVzRHNcWY_fNa_GkFuaZB3vtCkkFND-qs0,9628
|
|
24
24
|
sgis/io/__init__.py,sha256=uyBr20YDqB2bQttrd5q1JuGOvX32A-MSvS7Wmw5f5qg,177
|
|
25
25
|
sgis/io/_is_dapla.py,sha256=wmfkSe98IrLhUg3dtXZusV6OVC8VlY1kbc5EQDf3P-Q,358
|
|
26
|
-
sgis/io/dapla_functions.py,sha256=
|
|
26
|
+
sgis/io/dapla_functions.py,sha256=cwCmwgOoWOaYMJ35hgAJtCJ7m8bQBM4RsL7y3afjnLc,30539
|
|
27
27
|
sgis/io/opener.py,sha256=HWO3G1NB6bpXKM94JadCD513vjat1o1TFjWGWzyVasg,898
|
|
28
28
|
sgis/io/read_parquet.py,sha256=FvZYv1rLkUlrSaUY6QW6E1yntmntTeQuZ9ZRgCDO4IM,3776
|
|
29
29
|
sgis/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
30
|
sgis/maps/examine.py,sha256=Pb0dH8JazU5E2svfQrzHO1Bi-sjy5SeyY6zoeMO34jE,9369
|
|
31
|
-
sgis/maps/explore.py,sha256=
|
|
31
|
+
sgis/maps/explore.py,sha256=4ly_zeMiHUZThBzoVt62Z4smEZH97qsnzodaaRiBJco,47697
|
|
32
32
|
sgis/maps/httpserver.py,sha256=eCDoB9x74kSLiGEj2X3O91t3oscY_ia17UNuaaJ6tCc,2472
|
|
33
|
-
sgis/maps/legend.py,sha256=
|
|
34
|
-
sgis/maps/map.py,sha256=
|
|
35
|
-
sgis/maps/maps.py,sha256=
|
|
36
|
-
sgis/maps/norge_i_bilder.json,sha256=
|
|
37
|
-
sgis/maps/thematicmap.py,sha256=
|
|
33
|
+
sgis/maps/legend.py,sha256=qq2RkebuaNAdFztlXrDOWbN0voeK5w5VycmRKyx0NdM,26512
|
|
34
|
+
sgis/maps/map.py,sha256=q0gqOg_DD1ea7B_8__nuFN1dYA7o3uIxS6KuJwmVNhQ,30269
|
|
35
|
+
sgis/maps/maps.py,sha256=Ti4nfm6bz_8ZWVHoEHF61moI3LQH9Ee6Jd8NHzInWkw,23135
|
|
36
|
+
sgis/maps/norge_i_bilder.json,sha256=VKmb7rg4jvgc8_Ve1fFnHyZ_Dkv4T5GTA0UCpqpFAi4,492751
|
|
37
|
+
sgis/maps/thematicmap.py,sha256=xTX_Y6ZXLcjNCgfUOr87pAMD4cjKxhFudZZXn_ewpII,25171
|
|
38
38
|
sgis/maps/tilesources.py,sha256=F4mFHxPwkiPJdVKzNkScTX6xbJAMIUtlTq4mQ83oguw,1746
|
|
39
|
-
sgis/maps/wms.py,sha256=
|
|
39
|
+
sgis/maps/wms.py,sha256=UjsKAvrZkcYRgjVGGeg6XA4Lkx6WU9w6WTyeSkwN78w,6931
|
|
40
40
|
sgis/networkanalysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
41
|
sgis/networkanalysis/_get_route.py,sha256=9I3t9pnccUPr4mozy3TJCOpGCCf3UOIojmsbifubZbA,6368
|
|
42
42
|
sgis/networkanalysis/_od_cost_matrix.py,sha256=zkyPX7ObT996ahaFJ2oI0D0SqQWbWyfy_qLtXwValPg,3434
|
|
@@ -56,12 +56,12 @@ sgis/parallel/parallel.py,sha256=qPhCiL81SZNKnJqFrW-rHrJeZvC7jO9_FjxO0RMdEUo,400
|
|
|
56
56
|
sgis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
57
|
sgis/raster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
58
|
sgis/raster/base.py,sha256=tiZEuMcVK6hOm_aIjWhQ1WGshcjsxT1fFkuBSLFiMC0,7785
|
|
59
|
-
sgis/raster/image_collection.py,sha256=
|
|
59
|
+
sgis/raster/image_collection.py,sha256=W5x4PsaOnXALAXTDj3q-X6TMVgVD9kyFXmFdJewe9lY,126533
|
|
60
60
|
sgis/raster/indices.py,sha256=efJmgfPg_VuSzXFosXV661IendF8CwPFWtMhyP4TMUg,222
|
|
61
61
|
sgis/raster/regex.py,sha256=kYhVpRYzoXutx1dSYmqMoselWXww7MMEsTPmLZwHjbM,3759
|
|
62
62
|
sgis/raster/sentinel_config.py,sha256=nySDqn2R8M6W8jguoBeSAK_zzbAsqmaI59i32446FwY,1268
|
|
63
63
|
sgis/raster/zonal.py,sha256=D4Gyptw-yOLTCO41peIuYbY-DANsJCG19xXDlf1QAz4,2299
|
|
64
|
-
ssb_sgis-1.2.
|
|
65
|
-
ssb_sgis-1.2.
|
|
66
|
-
ssb_sgis-1.2.
|
|
67
|
-
ssb_sgis-1.2.
|
|
64
|
+
ssb_sgis-1.2.3.dist-info/LICENSE,sha256=np3IfD5m0ZUofn_kVzDZqliozuiO6wrktw3LRPjyEiI,1073
|
|
65
|
+
ssb_sgis-1.2.3.dist-info/METADATA,sha256=14UzO4efbS_k7OMKyV7rCQjZknag0TTuwQ6sgaQvaww,11740
|
|
66
|
+
ssb_sgis-1.2.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
67
|
+
ssb_sgis-1.2.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|