Fix intersects returning nothing in some cases

Fixes #295
This commit is contained in:
Josh Baker 2018-04-09 10:52:39 -07:00
parent 0aa04a1910
commit cfb1a4c840
4 changed files with 45 additions and 5 deletions

View File

@ -170,10 +170,10 @@ func (g FeatureCollection) IntersectsBBox(bbox BBox) bool {
}
for _, g := range g.Features {
if g.IntersectsBBox(bbox) {
return false
return true
}
}
return true
return false
}
// Within detects if the object is fully contained inside another object.
@ -201,6 +201,7 @@ func (g FeatureCollection) Intersects(o Object) bool {
return false
}
for _, f := range g.Features {
if f.Intersects(o) {
return true
}

View File

@ -1,6 +1,8 @@
package geojson
import "testing"
import (
"testing"
)
func TestFeatureCollection(t *testing.T) {
testJSON(t, `{
@ -90,3 +92,23 @@ func TestFeatureCollection(t *testing.T) {
]
}`)
}
func TestPointBounding(t *testing.T) {
featureCollectionJSON := `{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[-75.1,56.283333]}}]}`
polyFeatureJSON := `{"type": "FeatureCollection","features": [{"type": "Feature","properties": {},"geometry": {"type": "Polygon","coordinates": [[
[-112.8515625,-29.535229562948444],
[85.4296875,-2.535229562948444],
[85.4296875,65.36683689226321],
[-112.8515625,65.36683689226321],
[-112.8515625,-29.535229562948444]
]]}}]}`
featureCollection := testJSON(t, featureCollectionJSON).(FeatureCollection)
poly := testJSON(t, polyFeatureJSON).(FeatureCollection)
r1 := featureCollection.Within(poly)
r2 := featureCollection.Intersects(poly)
if r1 != r2 || !r1 {
t.Fatalf("expected %v/%v, got %v/%v", true, true, r1, r2)
}
}

View File

@ -169,10 +169,10 @@ func (g GeometryCollection) IntersectsBBox(bbox BBox) bool {
}
for _, g := range g.Geometries {
if g.IntersectsBBox(bbox) {
return false
return true
}
}
return true
return false
}
// Within detects if the object is fully contained inside another object.

View File

@ -66,3 +66,20 @@ func TestGeometryCollection(t *testing.T) {
]
}`)
}
func TestPointBoundingGeomColl(t *testing.T) {
geometryCollectionJSON := `{"type":"GeometryCollection","geometries":[{"type":"Point","coordinates":[-75.1,56.283333]}]}`
polyFeatureJSON := `{"type": "GeometryCollection","geometries": [{"type": "Polygon","coordinates": [[
[-112.8515625,-29.535229562948444],
[85.4296875,-2.535229562948444],
[85.4296875,65.36683689226321],
[-112.8515625,65.36683689226321],
[-112.8515625,-29.535229562948444]
]]}]}`
geometryCollection := testJSON(t, geometryCollectionJSON).(GeometryCollection)
poly := testJSON(t, polyFeatureJSON).(GeometryCollection)
r1 := geometryCollection.Within(poly)
r2 := geometryCollection.Intersects(poly)
if r1 != r2 || !r1 {
t.Fatalf("expected %v/%v, got %v/%v", true, true, r1, r2)
}
}