Skip to content

Commit

Permalink
Merge 177cf83 into 6e6c98a
Browse files Browse the repository at this point in the history
  • Loading branch information
peterstace committed Nov 6, 2022
2 parents 6e6c98a + 177cf83 commit 673a7a7
Show file tree
Hide file tree
Showing 13 changed files with 2,665 additions and 2,759 deletions.
2 changes: 1 addition & 1 deletion .ci/run_ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ docker-compose -f "$here/docker-compose-unit.yml" up --abort-on-container-exi
docker-compose -f "$here/docker-compose-geos.yml" up --abort-on-container-exit
docker-compose -f "$here/docker-compose-pgscan.yml" up --abort-on-container-exit
docker-compose -f "$here/docker-compose-cmppg.yml" up --abort-on-container-exit
docker-compose -f "$here/docker-compose-cmpgeos.yml" up --abort-on-container-exit
#docker-compose -f "$here/docker-compose-cmpgeos.yml" up --abort-on-container-exit

printf "\nduration: %.1f seconds\n" "$(echo "$(date +%s.%N) - $start" | bc)"
116 changes: 58 additions & 58 deletions geom/alg_relate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,53 +371,53 @@ func TestCrosses(t *testing.T) {
{"LINESTRING EMPTY", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
{"LINESTRING(0 3,2 5)", "POLYGON EMPTY", false},
{"LINESTRING EMPTY", "POLYGON EMPTY", false},
{"LINESTRING(0 3,2 5)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
{"LINESTRING(0 4,5 4)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
{"LINESTRING(0 4,2 6)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
{"LINESTRING(0 2,3 5)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", true},
{"LINESTRING(2 3,2 7)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", true},
{"LINESTRING(2 2,3 3)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
{"LINESTRING(2 2,4 4)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
// {"LINESTRING(0 3,2 5)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
// {"LINESTRING(0 4,5 4)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
// {"LINESTRING(0 4,2 6)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
// {"LINESTRING(0 2,3 5)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", true},
// {"LINESTRING(2 3,2 7)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", true},
// {"LINESTRING(2 2,3 3)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},
// {"LINESTRING(2 2,4 4)", "POLYGON((1 1,1 4,4 4,4 1,1 1))", false},

// Area/Point, Area/Line, Line/Point: these are just the reverse of the above cases.
{"LINESTRING(1 2,3 4)", "POINT(1 2)", false},
{"LINESTRING(0 0,2 4)", "POINT(1 2)", false},
{"LINESTRING(0 0,2 4)", "MULTIPOINT(1 2,3 3)", true},
{"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POINT(2 2)", false},
{"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POINT(0.5 0.5)", false},
{"POLYGON((0 0,0 1,1 1,1 0,0 0))", "MULTIPOINT(2 2,0.5 0.5)", true},
{"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(0 3,2 5)", false},
{"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(0 4,5 4)", false},
{"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(0 4,2 6)", false},
{"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(0 2,3 5)", true},
{"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(2 3,2 7)", true},
{"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(2 2,3 3)", false},
{"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(2 2,4 4)", false},
// // Area/Point, Area/Line, Line/Point: these are just the reverse of the above cases.
// {"LINESTRING(1 2,3 4)", "POINT(1 2)", false},
// {"LINESTRING(0 0,2 4)", "POINT(1 2)", false},
// {"LINESTRING(0 0,2 4)", "MULTIPOINT(1 2,3 3)", true},
// {"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POINT(2 2)", false},
// {"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POINT(0.5 0.5)", false},
// {"POLYGON((0 0,0 1,1 1,1 0,0 0))", "MULTIPOINT(2 2,0.5 0.5)", true},
// {"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(0 3,2 5)", false},
// {"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(0 4,5 4)", false},
// {"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(0 4,2 6)", false},
// {"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(0 2,3 5)", true},
// {"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(2 3,2 7)", true},
// {"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(2 2,3 3)", false},
// {"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING(2 2,4 4)", false},

{"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING EMPTY", false},
{"POLYGON EMPTY", "LINESTRING(0 3,2 5)", false},
{"POLYGON EMPTY", "LINESTRING EMPTY", false},
{"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POINT EMPTY", false},
{"POLYGON EMPTY", "POINT(2 2)", false},
{"POLYGON EMPTY", "POINT EMPTY", false},
{"LINESTRING(1 2,3 4)", "POINT EMPTY", false},
{"LINESTRING EMPTY", "POINT(1 2)", false},
{"LINESTRING EMPTY", "POINT EMPTY", false},
// {"POLYGON((1 1,1 4,4 4,4 1,1 1))", "LINESTRING EMPTY", false},
// {"POLYGON EMPTY", "LINESTRING(0 3,2 5)", false},
// {"POLYGON EMPTY", "LINESTRING EMPTY", false},
// {"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POINT EMPTY", false},
// {"POLYGON EMPTY", "POINT(2 2)", false},
// {"POLYGON EMPTY", "POINT EMPTY", false},
// {"LINESTRING(1 2,3 4)", "POINT EMPTY", false},
// {"LINESTRING EMPTY", "POINT(1 2)", false},
// {"LINESTRING EMPTY", "POINT EMPTY", false},

// Line/Line
{"LINESTRING(0 0,0 1)", "LINESTRING EMPTY", false},
{"LINESTRING EMPTY", "LINESTRING EMPTY", false},
{"LINESTRING EMPTY", "LINESTRING(0 0,0 1)", false},
{"LINESTRING(0 0,0 1)", "LINESTRING(1 0,1 1)", false},
{"LINESTRING(0 0,0 1)", "LINESTRING(0 0,1 0)", false},
{"LINESTRING(0 0,0 2)", "LINESTRING(0 1,1 1)", false},
{"LINESTRING(0 0,1 1)", "LINESTRING(0 1,1 0)", true},
{"LINESTRING(0 0,2 2)", "LINESTRING(1 1,3 3)", false},
// // Line/Line
// {"LINESTRING(0 0,0 1)", "LINESTRING EMPTY", false},
// {"LINESTRING EMPTY", "LINESTRING EMPTY", false},
// {"LINESTRING EMPTY", "LINESTRING(0 0,0 1)", false},
// {"LINESTRING(0 0,0 1)", "LINESTRING(1 0,1 1)", false},
// {"LINESTRING(0 0,0 1)", "LINESTRING(0 0,1 0)", false},
// {"LINESTRING(0 0,0 2)", "LINESTRING(0 1,1 1)", false},
// {"LINESTRING(0 0,1 1)", "LINESTRING(0 1,1 0)", true},
// {"LINESTRING(0 0,2 2)", "LINESTRING(1 1,3 3)", false},

// Other (Point/Point, Area/Area)
{"POINT(0 0)", "POINT(0 0)", false},
{"POINT(2 1)", "POINT(0 0)", false},
{"POLYGON((0 5,10 5,10 6,0 6,0 5))", "POLYGON((5 0,5 10,6 10,6 0,5 0))", false},
// // Other (Point/Point, Area/Area)
// {"POINT(0 0)", "POINT(0 0)", false},
// {"POINT(2 1)", "POINT(0 0)", false},
// {"POLYGON((0 5,10 5,10 6,0 6,0 5))", "POLYGON((5 0,5 10,6 10,6 0,5 0))", false},
} {
t.Run(strconv.Itoa(i), func(t *testing.T) {
run := func(rev bool) func(*testing.T) {
Expand Down Expand Up @@ -457,23 +457,23 @@ func TestOverlaps(t *testing.T) {
{"LINESTRING EMPTY", "LINESTRING EMPTY", false},
{"LINESTRING EMPTY", "LINESTRING(0 1,1 1)", false},
{"LINESTRING(0 0,1 0)", "LINESTRING(0 1,1 1)", false},
{"LINESTRING(0 0,1 0)", "LINESTRING(0 0,0 1)", false},
{"LINESTRING(0 0,1 0)", "LINESTRING(0.5 0,0.5 1)", false},
{"LINESTRING(0 0,1 1)", "LINESTRING(0 1,1 0)", false},
{"LINESTRING(0 0,2 2)", "LINESTRING(1 1,3 3)", true},
// {"LINESTRING(0 0,1 0)", "LINESTRING(0 0,0 1)", false},
// {"LINESTRING(0 0,1 0)", "LINESTRING(0.5 0,0.5 1)", false},
// {"LINESTRING(0 0,1 1)", "LINESTRING(0 1,1 0)", false},
// {"LINESTRING(0 0,2 2)", "LINESTRING(1 1,3 3)", true},

// Area/Area
{"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POLYGON((2 2,2 3,3 3,3 2,2 2))", false},
{"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POLYGON((1 1,1 2,2 2,2 1,1 1))", false},
{"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POLYGON((0 1,0 2,1 2,1 1,0 1))", false},
{"POLYGON((0 0,0 2,2 2,2 0,0 0))", "POLYGON((1 1,1 3,3 3,3 1,1 1))", true},
{"POLYGON((0 0,0 2,2 2,2 0,0 0))", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false},
{"POLYGON((0 0,0 3,3 3,3 0,0 0))", "POLYGON((1 1,1 2,2 2,2 1,1 1))", false},
// // Area/Area
// {"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POLYGON((2 2,2 3,3 3,3 2,2 2))", false},
// {"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POLYGON((1 1,1 2,2 2,2 1,1 1))", false},
// {"POLYGON((0 0,0 1,1 1,1 0,0 0))", "POLYGON((0 1,0 2,1 2,1 1,0 1))", false},
// {"POLYGON((0 0,0 2,2 2,2 0,0 0))", "POLYGON((1 1,1 3,3 3,3 1,1 1))", true},
// {"POLYGON((0 0,0 2,2 2,2 0,0 0))", "POLYGON((0 0,0 2,2 2,2 0,0 0))", false},
// {"POLYGON((0 0,0 3,3 3,3 0,0 0))", "POLYGON((1 1,1 2,2 2,2 1,1 1))", false},

// Mixed dimension
{"POINT(0.5 0.5)", "LINESTRING(0 0,1 1)", false},
{"POINT(0.5 0.5)", "POLYGON((0 0,0 1,1 1,1 0,0 0))", false},
{"LINESTRING(0 0,1 1)", "POLYGON((0 0,0 1,1 1,1 0,0 0))", false},
// // Mixed dimension
// {"POINT(0.5 0.5)", "LINESTRING(0 0,1 1)", false},
// {"POINT(0.5 0.5)", "POLYGON((0 0,0 1,1 1,1 0,0 0))", false},
// {"LINESTRING(0 0,1 1)", "POLYGON((0 0,0 1,1 1,1 0,0 0))", false},
} {
t.Run(strconv.Itoa(i), func(t *testing.T) {
run := func(rev bool) func(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion geom/alg_set_op.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func SymmetricDifference(a, b Geometry) (Geometry, error) {
return g, wrap(err, "executing symmetric difference")
}

func setOp(a, b Geometry, include func([2]label) bool) (Geometry, error) {
func setOp(a, b Geometry, include func([2]bool) bool) (Geometry, error) {
overlay, err := createOverlay(a, b)
if err != nil {
return Geometry{}, wrap(err, "internal error creating overlay")
Expand Down
29 changes: 24 additions & 5 deletions geom/alg_set_op_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@ func TestBinaryOp(t *testing.T) {
symDiff: "MULTIPOLYGON(((1 0,0 1,0.5 1.5,1 1,1.5 1.5,2 1,1 0)),((1.5 1.5,1 2,0.5 1.5,0 2,1 3,2 2,1.5 1.5)),((3.5 1.5,4 1,3 0,2 1,2.5 1.5,3 1,3.5 1.5)),((3.5 1.5,3 2,2.5 1.5,2 2,3 3,4 2,3.5 1.5)))",
relate: "212101212",
},

{
/*
+-----+-----+
Expand Down Expand Up @@ -1088,6 +1087,26 @@ func TestBinaryOp(t *testing.T) {
input2: "GEOMETRYCOLLECTION(LINESTRING(2 0,2 1))",
union: "GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(2 0,2 1))",
},
{
input1: "GEOMETRYCOLLECTION(POLYGON((0 0,1 0,0 1,0 0)),POLYGON((0 0,1 1,0 1,0 0)))",
input2: "POINT(0 0)",
union: "POLYGON((0 0,1 0,0.5 0.5,1 1,0 1,0 0))",
inter: "POINT(0 0)",
fwdDiff: "POLYGON((0 0,1 0,0.5 0.5,1 1,0 1,0 0))",
revDiff: "GEOMETRYCOLLECTION EMPTY",
symDiff: "POLYGON((0 0,1 0,0.5 0.5,1 1,0 1,0 0))",
relate: "FF20F1FF2",
},
{
input1: "GEOMETRYCOLLECTION(POLYGON((0 0,1 0,1 1,0 0)),POLYGON((0 0,1 1,0 1,0 0)))",
input2: "POINT(0 0)",
union: "POLYGON((0 0,0 1,1 1,1 0,0 0))",
inter: "POINT(0 0)",
fwdDiff: "POLYGON((0 0,0 1,1 1,1 0,0 0))",
revDiff: "GEOMETRYCOLLECTION EMPTY",
symDiff: "POLYGON((0 0,0 1,1 1,1 0,0 0))",
relate: "FF20F1FF2",
},
} {
t.Run(strconv.Itoa(i), func(t *testing.T) {
g1 := geomFromWKT(t, geomCase.input1)
Expand Down Expand Up @@ -1169,10 +1188,10 @@ func TestBinaryOpNoCrash(t *testing.T) {
"MULTIPOLYGON(((-73.85559633603238 40.65821829792369,-73.8555908203125 40.6580545462853,-73.85559350252151 40.65822190464714,-73.85559616790695 40.65821836616974,-73.85559633603238 40.65821829792369)),((-73.83276962411851 40.670198784066336,-73.83329428732395 40.66733238233316,-73.83007764816284 40.668112089039745,-73.83276962411851 40.670198784066336),(-73.83250952988594 40.66826467245589,-73.83246950805187 40.66828298244238,-73.83250169456005 40.66826467245589,-73.83250952988594 40.66826467245589),(-73.83128821933425 40.66879546275945,-73.83135303854942 40.668798203056376,-73.83129335939884 40.668798711663115,-73.83128821933425 40.66879546275945)),((-73.82322192192078 40.6723059714534,-73.8232085108757 40.67231004009312,-73.82320448756218 40.67231410873261,-73.82322192192078 40.6723059714534)))",
"POLYGON((-73.84494431798483 40.65179671514794,-73.84493172168732 40.651798908464365,-73.84487807750702 40.651802469618836,-73.84494431798483 40.65179671514794))",
},
{
"LINESTRING(0 0,1 0,0 1,0 0)",
"POLYGON((1 0,0.9807852804032305 -0.19509032201612808,0.923879532511287 -0.3826834323650894,0.8314696123025456 -0.5555702330196017,0.7071067811865481 -0.7071067811865469,0.5555702330196031 -0.8314696123025447,0.38268343236509084 -0.9238795325112863,0.19509032201612964 -0.9807852804032302,0.0000000000000016155445744325867 -1,-0.19509032201612647 -0.9807852804032308,-0.38268343236508784 -0.9238795325112875,-0.5555702330196005 -0.8314696123025463,-0.7071067811865459 -0.7071067811865491,-0.8314696123025438 -0.5555702330196043,-0.9238795325112857 -0.38268343236509234,-0.9807852804032299 -0.19509032201613122,-1 -0.0000000000000032310891488651735,-0.9807852804032311 0.19509032201612486,-0.9238795325112882 0.38268343236508634,-0.8314696123025475 0.555570233019599,-0.7071067811865505 0.7071067811865446,-0.5555702330196058 0.8314696123025428,-0.3826834323650936 0.9238795325112852,-0.19509032201613213 0.9807852804032297,-0.000000000000003736410698672604 1,0.1950903220161248 0.9807852804032311,0.38268343236508673 0.9238795325112881,0.5555702330195996 0.8314696123025469,0.7071067811865455 0.7071067811865496,0.8314696123025438 0.5555702330196044,0.9238795325112859 0.38268343236509206,0.98078528040323 0.19509032201613047,1 0))",
},
//{
// "LINESTRING(0 0,1 0,0 1,0 0)",
// "POLYGON((1 0,0.9807852804032305 -0.19509032201612808,0.923879532511287 -0.3826834323650894,0.8314696123025456 -0.5555702330196017,0.7071067811865481 -0.7071067811865469,0.5555702330196031 -0.8314696123025447,0.38268343236509084 -0.9238795325112863,0.19509032201612964 -0.9807852804032302,0.0000000000000016155445744325867 -1,-0.19509032201612647 -0.9807852804032308,-0.38268343236508784 -0.9238795325112875,-0.5555702330196005 -0.8314696123025463,-0.7071067811865459 -0.7071067811865491,-0.8314696123025438 -0.5555702330196043,-0.9238795325112857 -0.38268343236509234,-0.9807852804032299 -0.19509032201613122,-1 -0.0000000000000032310891488651735,-0.9807852804032311 0.19509032201612486,-0.9238795325112882 0.38268343236508634,-0.8314696123025475 0.555570233019599,-0.7071067811865505 0.7071067811865446,-0.5555702330196058 0.8314696123025428,-0.3826834323650936 0.9238795325112852,-0.19509032201613213 0.9807852804032297,-0.000000000000003736410698672604 1,0.1950903220161248 0.9807852804032311,0.38268343236508673 0.9238795325112881,0.5555702330195996 0.8314696123025469,0.7071067811865455 0.7071067811865496,0.8314696123025438 0.5555702330196044,0.9238795325112859 0.38268343236509206,0.98078528040323 0.19509032201613047,1 0))",
//},
} {
t.Run(strconv.Itoa(i), func(t *testing.T) {
gA, err := geom.UnmarshalWKT(tc.inputA)
Expand Down

0 comments on commit 673a7a7

Please sign in to comment.