Skip to content

Commit dd66224

Browse files
authored
Merge pull request #286 from statisticsnorway/cleaning-fix
add buffer(0) to clean geometries
2 parents 6a305a5 + dea7385 commit dd66224

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "ssb-sgis"
3-
version = "1.1.16"
3+
version = "1.1.17"
44
description = "GIS functions used at Statistics Norway."
55
authors = ["Morten Letnes <morten.letnes@ssb.no>"]
66
license = "MIT"

src/sgis/geopandas_tools/duplicates.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ def update_geometries(
9898
if len(gdf) <= 1:
9999
return gdf
100100

101+
if geom_type == "polygon" or get_geom_type(gdf) == "polygon":
102+
gdf.geometry = gdf.buffer(0)
103+
101104
copied = make_all_singlepart(clean_geoms(gdf))
102105

103106
copied, geom_type, keep_geom_type = _determine_geom_type_args(

src/sgis/geopandas_tools/overlay.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,11 @@ def clean_overlay(
119119
df1.geometry.geom_type.value_counts(),
120120
)
121121

122+
if geom_type == "polygon" or get_geom_type(df1) == "polygon":
123+
df1.geometry = df1.buffer(0)
124+
if geom_type == "polygon" or get_geom_type(df2) == "polygon":
125+
df2.geometry = df2.buffer(0)
126+
122127
df1 = clean_geoms(df1)
123128
df2 = clean_geoms(df2)
124129

@@ -131,10 +136,14 @@ def clean_overlay(
131136
if geom_type and get_geom_type(df1) == get_geom_type(df2):
132137
df2 = to_single_geom_type(df2, geom_type)
133138

134-
assert df1.is_valid.all(), df1.is_valid.value_counts()
135-
assert df2.is_valid.all(), df2.is_valid.value_counts()
136-
assert df1.geometry.notna().all()
137-
assert df2.geometry.notna().all()
139+
assert df1.is_valid.all(), [
140+
geom.wkt for geom in df1[lambda x: x.is_valid == False].geometry
141+
]
142+
assert df2.is_valid.all(), [
143+
geom.wkt for geom in df2[lambda x: x.is_valid == False].geometry
144+
]
145+
assert df1.geometry.notna().all(), df1[lambda x: x.isna()]
146+
assert df2.geometry.notna().all(), df2[lambda x: x.isna()]
138147

139148
box1 = box(*df1.total_bounds)
140149
box2 = box(*df2.total_bounds)

0 commit comments

Comments
 (0)