ssb-sgis 1.2.2__py3-none-any.whl → 1.2.4__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/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
- """Initialiser."""
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
- for key, value in kwargs.items():
268
+ new_kwargs = {}
269
+ for key, value in self.kwargs.items():
239
270
  if key not in MAP_KWARGS:
240
- self.kwargs[key] = value
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,18 @@ 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
+ isnas.append(gdf[gdf[self._column].isna()])
300
+ self._gdfs[label] = gdf[gdf[self._column].notna()]
301
+ self._more_data[nan_label] = {
302
+ "gdf": pd.concat(isnas, ignore_index=True),
303
+ "color": self.nan_color,
304
+ "hatch": nan_hatch,
305
+ } | new_kwargs
306
+ self._gdf = pd.concat(self.gdfs.values(), ignore_index=True)
307
+
264
308
  @property
265
309
  def valid_keywords(self) -> set[str]:
266
310
  """List all valid keywords for the class initialiser."""
@@ -279,6 +323,52 @@ class ThematicMap(Map):
279
323
  super().change_cmap(cmap, start, stop)
280
324
  return self
281
325
 
326
+ def add_data(
327
+ self,
328
+ *,
329
+ color: str | None = None,
330
+ hatch: str | None = None,
331
+ **kwargs,
332
+ ) -> "ThematicMap":
333
+ """Add Geometric Data of a given color or hatch.
334
+
335
+ The geodata must be passed as keyword argument.
336
+ The keyword will be used as label in the legend.
337
+
338
+ Args:
339
+ color: Color of the data.
340
+ hatch: Hatch of the data. See https://matplotlib.org/stable/gallery/shapes_and_collections/hatch_style_reference.html.
341
+ **kwargs: Must include exactly one GeoDataFrame or object that can be converted to GeoDataFrame.
342
+ Additional kwargs are passed to geopandas.GeoDataFrame.plot and matplotlib.patches.Patch.
343
+ """
344
+ new_kwargs = {}
345
+ n = 0
346
+ for key, value in kwargs.items():
347
+ try:
348
+ gdf = to_gdf(value)
349
+ label = key
350
+ n += 1
351
+ except Exception:
352
+ new_kwargs[key] = value
353
+
354
+ if n != 1:
355
+ raise ValueError(
356
+ "Must specify a single geometry object as keyword argument."
357
+ )
358
+ if not color and not hatch:
359
+ raise TypeError("Must pass either 'color' or 'hatch'.")
360
+ if hatch is not None:
361
+ color = self.facecolor
362
+ gdf["label"] = label
363
+ self._more_data[label] = {
364
+ "gdf": gdf,
365
+ "color": color,
366
+ "hatch": hatch,
367
+ } | new_kwargs
368
+ if self.bounds is None:
369
+ self.bounds = to_bbox(self._gdf.total_bounds)
370
+ return self
371
+
282
372
  def add_background(
283
373
  self,
284
374
  gdf: GeoDataFrame,
@@ -327,11 +417,13 @@ class ThematicMap(Map):
327
417
  include_legend = False
328
418
 
329
419
  elif self._is_categorical:
330
- kwargs = self._prepare_categorical_plot(kwargs)
420
+ self._prepare_categorical_plot()
421
+ if self._gdf is not None:
422
+ kwargs["color"] = self._gdf["color"]
331
423
  if self.legend:
332
424
  self.legend._prepare_categorical_legend(
333
425
  categories_colors=self._categories_colors_dict,
334
- nan_label=self.nan_label,
426
+ hatch=self.hatch,
335
427
  )
336
428
 
337
429
  else:
@@ -339,19 +431,23 @@ class ThematicMap(Map):
339
431
  if self.legend:
340
432
  if not self.legend.rounding:
341
433
  self.legend._rounding = self.legend._get_rounding(
342
- array=self._gdf.loc[~self._nan_idx, self._column]
434
+ array=self._gdf[self._column].dropna()
343
435
  )
344
436
 
345
437
  self.legend._prepare_continous_legend(
346
438
  bins=self.bins,
347
439
  colors=self._unique_colors,
348
- nan_label=self.nan_label,
349
440
  bin_values=self._bins_unique_values,
441
+ nan_label=self.nan_label,
442
+ hatch=self.hatch,
350
443
  )
351
444
 
445
+ if self.legend and self._more_data:
446
+ self.legend._add_more_data_to_legend(self._more_data)
447
+
352
448
  if self.legend and not self.legend._position_has_been_set:
353
449
  self.legend._position = self.legend._get_best_legend_position(
354
- self._gdf, k=self._k + bool(len(self._nan_idx))
450
+ self._gdf, k=self._k + self._gdf[self._column].isna().any()
355
451
  )
356
452
 
357
453
  self._prepare_plot(**kwargs)
@@ -359,7 +455,9 @@ class ThematicMap(Map):
359
455
  if self.legend:
360
456
  self.ax = self.legend._actually_add_legend(ax=self.ax)
361
457
 
362
- self.ax = self._gdf.plot(legend=include_legend, ax=self.ax, **kwargs)
458
+ self.ax = self._gdf.plot(
459
+ legend=include_legend, ax=self.ax, hatch=self.hatch, **kwargs
460
+ )
363
461
 
364
462
  if __test:
365
463
  return self
@@ -394,16 +492,17 @@ class ThematicMap(Map):
394
492
  )
395
493
  self.fig.patch.set_facecolor(self.facecolor)
396
494
  self.ax.set_axis_off()
495
+ self.ax.set_xlim([self.minx - self.diffx * 0.03, self.maxx + self.diffx * 0.03])
496
+ self.ax.set_ylim([self.miny - self.diffy * 0.03, self.maxy + self.diffy * 0.03])
397
497
 
398
498
  if hasattr(self, "_background_gdfs"):
399
499
  self._actually_add_background()
400
- elif self.bounds is not None:
401
- self.ax.set_xlim(
402
- [self.minx - self.diffx * 0.03, self.maxx + self.diffx * 0.03]
403
- )
404
- self.ax.set_ylim(
405
- [self.miny - self.diffy * 0.03, self.maxy + self.diffy * 0.03]
406
- )
500
+ # if self.bounds is not None:
501
+
502
+ for datadict in self._more_data.values():
503
+ gdf = datadict["gdf"]
504
+ datadict = {key: value for key, value in datadict.items() if key != "gdf"}
505
+ gdf.plot(ax=self.ax, **datadict)
407
506
 
408
507
  if self.title:
409
508
  self.ax.set_title(
@@ -437,7 +536,10 @@ class ThematicMap(Map):
437
536
 
438
537
  classified = self._classify_from_bins(self._gdf, bins=self.bins)
439
538
  classified_sequential = self._push_classification(classified)
440
- n_colors = len(np.unique(classified_sequential)) - any(self._nan_idx)
539
+ n_colors = (
540
+ len(np.unique(classified_sequential))
541
+ - self._gdf[self._column].isna().any()
542
+ )
441
543
  self._unique_colors = self._get_continous_colors(n=n_colors)
442
544
  self._bins_unique_values = self._make_bin_value_dict(
443
545
  self._gdf, classified_sequential
@@ -453,27 +555,16 @@ class ThematicMap(Map):
453
555
  bins=self.bins, rounding=self.legend._rounding
454
556
  )
455
557
 
456
- if any(self._nan_idx):
558
+ if self._gdf[self._column].isna().any():
457
559
  self.bins = self.bins + [self.nan_label]
458
560
 
459
561
  return kwargs
460
562
 
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
563
  def _actually_add_legend(self) -> None:
473
564
  """Add legend to the axis and fill it with colors and labels."""
474
565
  if not self.legend._position_has_been_set:
475
566
  self.legend._position = self.legend._get_best_legend_position(
476
- self._gdf, k=self._k + bool(len(self._nan_idx))
567
+ self._gdf, k=self._k + self._gdf[self._column].isna().any()
477
568
  )
478
569
 
479
570
  if self._is_categorical:
@@ -518,15 +609,15 @@ class ThematicMap(Map):
518
609
  return bins_unique_values
519
610
 
520
611
  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])
612
+ # self.ax.set_xlim([self.minx - self.diffx * 0.03, self.maxx + self.diffx * 0.03])
613
+ # self.ax.set_ylim([self.miny - self.diffy * 0.03, self.maxy + self.diffy * 0.03])
523
614
  self._background_gdfs.plot(
524
615
  ax=self.ax, color=self.bg_gdf_color, **self.bg_gdf_kwargs
525
616
  )
526
617
 
527
618
  @staticmethod
528
619
  def _get_matplotlib_figure_and_axix(
529
- figsize: tuple[int, int]
620
+ figsize: tuple[int, int],
530
621
  ) -> tuple[matplotlib.figure.Figure, matplotlib.axes.Axes]:
531
622
  fig = plt.figure(figsize=figsize)
532
623
  ax = fig.add_subplot(1, 1, 1)
@@ -539,7 +630,7 @@ class ThematicMap(Map):
539
630
  "#fefefe",
540
631
  "#383836",
541
632
  )
542
- self.nan_color = "#666666"
633
+ self.nan_color = "#666666" if self._nan_color_was_none else self.nan_color
543
634
  if not self._is_categorical:
544
635
  self.change_cmap("viridis")
545
636
 
@@ -557,7 +648,7 @@ class ThematicMap(Map):
557
648
  "#0f0f0f",
558
649
  "#e8e6e6",
559
650
  )
560
- self.nan_color = "#c2c2c2"
651
+ self.nan_color = "#c2c2c2" if self._nan_color_was_none else self.nan_color
561
652
  if not self._is_categorical:
562
653
  self.change_cmap("RdPu", start=23)
563
654
 
@@ -569,16 +660,6 @@ class ThematicMap(Map):
569
660
  }.items():
570
661
  setattr(self.legend, key, color)
571
662
 
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
663
  @property
583
664
  def title_fontsize(self) -> int:
584
665
  """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)
@@ -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 as 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] = (config.SENTINEL2_IMAGE_REGEX,)
3139
- filename_regexes: ClassVar[str] = (config.SENTINEL2_FILENAME_REGEX,)
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] = (config.SENTINEL2_MOSAIC_IMAGE_REGEX,)
3226
- filename_regexes: ClassVar[str] = (config.SENTINEL2_MOSAIC_FILENAME_REGEX,)
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ssb-sgis
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: GIS functions used at Statistics Norway.
5
5
  Home-page: https://github.com/statisticsnorway/ssb-sgis
6
6
  License: MIT
@@ -1,4 +1,4 @@
1
- sgis/__init__.py,sha256=40JJSoA8sXzp7VNoUCeFuEbZPGuEbnMjpypmNxPsMA0,7690
1
+ sgis/__init__.py,sha256=FcE8XYmVlyO-6s15AC8dLqIjp2KZpar2ND3siIxX830,7747
2
2
  sgis/conf.py,sha256=pLqmvIKoKmXoW8chja3iQpbDUp9Z39vzl97MGH8ZHW0,2614
3
3
  sgis/debug_config.py,sha256=Tfr19kU46hSkkspsIJcrUWvlhaL4U3-f8xEPkujSCAQ,593
4
4
  sgis/exceptions.py,sha256=WNaEBPNNx0rmz-YDzlFX4vIE7ocJQruUTqS2RNAu2zU,660
@@ -6,37 +6,37 @@ sgis/geopandas_tools/__init__.py,sha256=bo8lFMcltOz7TtWAi52_ekR2gd3mjfBfKeMDV5zu
6
6
  sgis/geopandas_tools/bounds.py,sha256=YJyF0gp78hFAjLLZmDquRKCBAtbt7QouG3snTcJeNQs,23822
7
7
  sgis/geopandas_tools/buffer_dissolve_explode.py,sha256=ReIgoeh6CUVcLmsUZ_pyoWYg6iBZzYiGmFq6CMOKRvE,19535
8
8
  sgis/geopandas_tools/centerlines.py,sha256=Q65Sx01SeAlulBEd9oaZkB2maBBNdLcJwAbTILg4SPU,11848
9
- sgis/geopandas_tools/cleaning.py,sha256=PkAVVZ84ahek8_uVlTRtCO8nCWO6DdGltWLTmPOsvxM,24426
9
+ sgis/geopandas_tools/cleaning.py,sha256=fST0xFztmyn-QUOAfvjZmu7aO_zPiolWK7gd7TR6ffI,24393
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=PHcQipR579mhABPALQICw2HnnByGe65XMHthTzVH_Ps,43927
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=WsJFt9QjkYCUQY_2ckySZ0yG66EeEBHpkyipHs0do4o,23399
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
20
- sgis/geopandas_tools/runners.py,sha256=IMClw80YAUGyPyowBXNidZu-z_rErpzj0w-GUQRI-Y0,11320
20
+ sgis/geopandas_tools/runners.py,sha256=J4lH0RXYDYTLVeQFgNv8gEY0E97QGIQ4zPW5vfoxgDU,12979
21
21
  sgis/geopandas_tools/sfilter.py,sha256=BPz6-_9B7QdyYmVatZXavdHj7FIW_ztIyJHQOkKJt7A,10284
22
22
  sgis/geopandas_tools/utils.py,sha256=X0pRvB1tWgV_0BCrRS1HU9LtLGnZCpvVPxyqM9JGb0Y,1415
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=cwCmwgOoWOaYMJ35hgAJtCJ7m8bQBM4RsL7y3afjnLc,30539
26
+ sgis/io/dapla_functions.py,sha256=AbP400wE8wd3KhfoX_BoEC6ba9fR0gCg8qWSqdkJ5dU,30815
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=0QDPaj5YU2Jps5iujuHu-vk_R9mFh_aOhbN1eU-fxcI,47898
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=lVRVCkhPmJRjGK23obFJZAO3qp6du1LYnobkkN7DPkc,26279
34
- sgis/maps/map.py,sha256=veTx5blncH54jDx3WCLwstryn9CjlaNqWggooJY49Pg,30480
35
- sgis/maps/maps.py,sha256=csPXJa9R7zwlDJ0lz8qW91l0uRxjo1m2smoU8IPtgLA,23091
36
- sgis/maps/norge_i_bilder.json,sha256=W_mFfte3DxugWbEudZ5fadZ2JeFYb0hyab2Quf4oJME,481311
37
- sgis/maps/thematicmap.py,sha256=w6q4_gIr8BubQgsPJkc6WXk-tmplDLGcKyjphhFp7ng,21873
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=Z3o_Bca0oty5Cn35pZfX5Qy52sXDVIMVSFD6IlZrovo,25111
38
38
  sgis/maps/tilesources.py,sha256=F4mFHxPwkiPJdVKzNkScTX6xbJAMIUtlTq4mQ83oguw,1746
39
- sgis/maps/wms.py,sha256=y8xJSWCqE1SZPInWKiTGdGLI015hOFrdwUyPVouU1LU,6885
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=wyrxb9HNzp916HKnsF7BuW6HzrGFU2zOyxRwLmytXog,126273
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.2.dist-info/LICENSE,sha256=np3IfD5m0ZUofn_kVzDZqliozuiO6wrktw3LRPjyEiI,1073
65
- ssb_sgis-1.2.2.dist-info/METADATA,sha256=vrNcp6Y7MLjopEgbKxgvwwaaUS6zcsQga18Z8EofUn8,11740
66
- ssb_sgis-1.2.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
67
- ssb_sgis-1.2.2.dist-info/RECORD,,
64
+ ssb_sgis-1.2.4.dist-info/LICENSE,sha256=np3IfD5m0ZUofn_kVzDZqliozuiO6wrktw3LRPjyEiI,1073
65
+ ssb_sgis-1.2.4.dist-info/METADATA,sha256=0vA7hJ78jGcP1uHtgeeNYN-Ne_9xZQ_fX3SRamcESxw,11740
66
+ ssb_sgis-1.2.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
67
+ ssb_sgis-1.2.4.dist-info/RECORD,,