ssb-sgis 1.1.1__py3-none-any.whl → 1.1.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/__init__.py +1 -0
- sgis/conf.py +62 -6
- sgis/geopandas_tools/cleaning.py +583 -1577
- sgis/geopandas_tools/duplicates.py +17 -3
- sgis/helpers.py +22 -0
- sgis/io/__init__.py +6 -0
- sgis/io/dapla_functions.py +273 -101
- sgis/maps/explore.py +23 -5
- sgis/maps/wms.py +7 -1
- {ssb_sgis-1.1.1.dist-info → ssb_sgis-1.1.3.dist-info}/METADATA +1 -1
- {ssb_sgis-1.1.1.dist-info → ssb_sgis-1.1.3.dist-info}/RECORD +13 -12
- {ssb_sgis-1.1.1.dist-info → ssb_sgis-1.1.3.dist-info}/LICENSE +0 -0
- {ssb_sgis-1.1.1.dist-info → ssb_sgis-1.1.3.dist-info}/WHEEL +0 -0
|
@@ -185,6 +185,7 @@ def get_intersections(
|
|
|
185
185
|
geom_type: str | None = None,
|
|
186
186
|
keep_geom_type: bool | None = None,
|
|
187
187
|
predicate: str | None = "intersects",
|
|
188
|
+
grid_size: float | None = None,
|
|
188
189
|
n_jobs: int = 1,
|
|
189
190
|
) -> GeoDataFrame:
|
|
190
191
|
"""Find geometries that intersect in a GeoDataFrame.
|
|
@@ -204,6 +205,8 @@ def get_intersections(
|
|
|
204
205
|
keep_geom_type: Whether to keep the original geometry type.
|
|
205
206
|
If mixed geometry types and keep_geom_type=True,
|
|
206
207
|
an exception is raised.
|
|
208
|
+
grid_size: Precision grid size to round the geometries. Will use the highest
|
|
209
|
+
precision of the inputs by default.
|
|
207
210
|
n_jobs: Number of threads.
|
|
208
211
|
predicate: Spatial predicate for the spatial tree.
|
|
209
212
|
|
|
@@ -279,6 +282,7 @@ def get_intersections(
|
|
|
279
282
|
geom_type,
|
|
280
283
|
keep_geom_type,
|
|
281
284
|
n_jobs=n_jobs,
|
|
285
|
+
grid_size=grid_size,
|
|
282
286
|
predicate=predicate,
|
|
283
287
|
).pipe(clean_geoms)
|
|
284
288
|
|
|
@@ -296,7 +300,8 @@ def _get_intersecting_geometries(
|
|
|
296
300
|
geom_type: str | None,
|
|
297
301
|
keep_geom_type: bool,
|
|
298
302
|
n_jobs: int,
|
|
299
|
-
|
|
303
|
+
grid_size: float | None = None,
|
|
304
|
+
predicate: str | None = None,
|
|
300
305
|
) -> GeoDataFrame:
|
|
301
306
|
right = gdf[[gdf._geometry_column_name]]
|
|
302
307
|
right["idx_right"] = right.index
|
|
@@ -317,6 +322,7 @@ def _get_intersecting_geometries(
|
|
|
317
322
|
right,
|
|
318
323
|
how="intersection",
|
|
319
324
|
predicate=predicate,
|
|
325
|
+
grid_size=grid_size,
|
|
320
326
|
geom_type=geom_type,
|
|
321
327
|
keep_geom_type=keep_geom_type,
|
|
322
328
|
n_jobs=n_jobs,
|
|
@@ -336,6 +342,7 @@ def _get_intersecting_geometries(
|
|
|
336
342
|
left,
|
|
337
343
|
right,
|
|
338
344
|
how="intersection",
|
|
345
|
+
grid_size=grid_size,
|
|
339
346
|
predicate=predicate,
|
|
340
347
|
geom_type=geom_type,
|
|
341
348
|
n_jobs=n_jobs,
|
|
@@ -348,6 +355,7 @@ def _get_intersecting_geometries(
|
|
|
348
355
|
# large and very detailed geometries can dissappear with small negative buffer
|
|
349
356
|
simplify(intersected.geometry, 1e-3)
|
|
350
357
|
.buffer(-1e-3)
|
|
358
|
+
# intersected.geometry
|
|
351
359
|
.representative_point()
|
|
352
360
|
.to_frame()
|
|
353
361
|
.sjoin(intersected)
|
|
@@ -359,13 +367,19 @@ def _get_intersecting_geometries(
|
|
|
359
367
|
columns=["idx_left", "idx_right"]
|
|
360
368
|
)
|
|
361
369
|
|
|
362
|
-
#
|
|
370
|
+
# return out
|
|
371
|
+
|
|
372
|
+
# some polygons within polygons are not counted in the intersection
|
|
363
373
|
within = (
|
|
364
374
|
gdf.assign(_range_idx_inters_left=lambda x: range(len(x)))
|
|
365
375
|
.sjoin(
|
|
366
376
|
GeoDataFrame(
|
|
367
377
|
{
|
|
368
|
-
"geometry":
|
|
378
|
+
# "geometry": polygons(
|
|
379
|
+
# get_exterior_ring(gdf.geometry.values)
|
|
380
|
+
# ), # buffer(1e-6).values)),
|
|
381
|
+
"geometry": gdf.geometry.values,
|
|
382
|
+
# "geometry": buffer(simplify(gdf.geometry.values, 1e-3), 1e-6),
|
|
369
383
|
"_range_idx_inters_right": range(len(gdf)),
|
|
370
384
|
},
|
|
371
385
|
crs=gdf.crs,
|
sgis/helpers.py
CHANGED
|
@@ -13,6 +13,28 @@ import numpy as np
|
|
|
13
13
|
import pandas as pd
|
|
14
14
|
from geopandas import GeoDataFrame
|
|
15
15
|
|
|
16
|
+
try:
|
|
17
|
+
from fsspec.spec import AbstractFileSystem
|
|
18
|
+
except ImportError:
|
|
19
|
+
|
|
20
|
+
class AbstractFileSystem:
|
|
21
|
+
"""Placeholder."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
from .conf import config
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _get_file_system(
|
|
28
|
+
file_system: None | AbstractFileSystem, kwargs: dict
|
|
29
|
+
) -> AbstractFileSystem:
|
|
30
|
+
if (
|
|
31
|
+
file_system is not None and "filesystem" in kwargs or "file_system" in kwargs
|
|
32
|
+
) or ("filesystem" in kwargs and "file_system" in kwargs):
|
|
33
|
+
raise ValueError("Cannot pass both filesystem and file_system.")
|
|
34
|
+
file_system2 = kwargs.pop("file_system", None)
|
|
35
|
+
file_system3 = kwargs.pop("filesystem", None)
|
|
36
|
+
return file_system or file_system2 or file_system3 or config["file_system"]()
|
|
37
|
+
|
|
16
38
|
|
|
17
39
|
def get_numpy_func(text: str, error_message: str | None = None) -> Callable:
|
|
18
40
|
"""Fetch a numpy function based on its name.
|