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.
@@ -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
- predicate: str | None,
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
- # some polygons within polygons are not counted in the
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": gdf.buffer(1e-6).values,
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.
sgis/io/__init__.py ADDED
@@ -0,0 +1,6 @@
1
+ try:
2
+ from .dapla_functions import _read_pandas
3
+ from .dapla_functions import read_geopandas
4
+ from .dapla_functions import write_geopandas
5
+ except ImportError:
6
+ pass