Skip to content

Commit 27a7a29

Browse files
committed
expose isValidReason maximumInscribedCircle
1 parent c36b04d commit 27a7a29

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

src/geos_functions.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,22 @@ function lineMerge(obj::Geometry, context::GEOSContext = get_context(obj))
671671
geomFromGEOS(result, context)
672672
end
673673

674+
function maximumInscribedCircle(obj::Geometry, tolerance, context::GEOSContext = get_context(obj))
675+
result = GEOSMaximumInscribedCircle_r(context, obj, tolerance)
676+
if result == C_NULL
677+
error("LibGEOS: Error in GEOSMaximumInscribedCircle")
678+
end
679+
geomFromGEOS(result, context)
680+
end
681+
682+
function isValidReason(obj::Geometry, context::GEOSContext = get_context(obj))
683+
result = GEOSisValidReason_r(context, obj)
684+
if result == C_NULL
685+
error("LibGEOS: Error in GEOSisValidReason")
686+
end
687+
result
688+
end
689+
674690
function simplify(obj::Geometry, tol::Real, context::GEOSContext = get_context(obj))
675691
result = GEOSSimplify_r(context, obj, tol)
676692
if result == C_NULL

test/test_geos_functions.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -918,11 +918,9 @@ end
918918
lss = readgeom("LINESTRING EMPTY")
919919
@test lineMerge(lss) == readgeom("GEOMETRYCOLLECTION EMPTY")
920920

921-
geo_invalid = readgeom("POLYGON((0 0, 0 1, 1 1, 1 0, -1 1, 0 0))")
922-
@test !LibGEOS.isValid(geo_invalid)
923-
geo_valid = LibGEOS.makeValid(geo_invalid)
924-
@test geo_valid isa LibGEOS.MultiPolygon
925-
@test LibGEOS.isValid(geo_valid)
926-
927921
@test LibGEOS.reverse(readgeom("LINESTRING(0 0, 1 1)")) == readgeom("LINESTRING(1 1, 0 0)")
922+
923+
geo = readgeom("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))")
924+
mic = LibGEOS.maximumInscribedCircle(geo, 1e-4)
925+
@test mic == readgeom("LINESTRING (0.5 0.5, 0 0.5)")
928926
end

test/test_invalid_geometry.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
using Test
2+
using LibGEOS
3+
14
@testset "LibGEOS invalid geometry" begin
25
# LibGEOS shouldn't crash but error out on invalid geometry
36

@@ -11,4 +14,10 @@
1114
@test !LibGEOS.isValid(polygon)
1215
@test LibGEOS.GEOSisValidReason_r(LibGEOS.get_global_context(), polygon) ==
1316
"Hole lies outside shell[15 15]"
17+
@test LibGEOS.isValidReason(polygon) == "Hole lies outside shell[15 15]"
18+
19+
geo_valid = LibGEOS.makeValid(polygon)
20+
@test geo_valid isa LibGEOS.MultiPolygon
21+
@test LibGEOS.isValid(geo_valid)
22+
@test LibGEOS.isValidReason(geo_valid) == "Valid Geometry"
1423
end

0 commit comments

Comments
 (0)