Fixes a false negative for intersecting rings

https://github.com/tidwall/geojson/commit/ac08098
This commit is contained in:
tidwall 2019-11-28 10:13:00 -07:00
parent 644f65c7d9
commit 6f3716a0cf
8 changed files with 25 additions and 30 deletions

2
go.mod
View File

@ -28,7 +28,7 @@ require (
github.com/tidwall/buntdb v1.1.0 github.com/tidwall/buntdb v1.1.0
github.com/tidwall/cities v0.0.0-20190730194520-dbe1ae0b862c // indirect github.com/tidwall/cities v0.0.0-20190730194520-dbe1ae0b862c // indirect
github.com/tidwall/geoindex v1.1.0 github.com/tidwall/geoindex v1.1.0
github.com/tidwall/geojson v1.1.7 github.com/tidwall/geojson v1.1.8
github.com/tidwall/gjson v1.3.2 github.com/tidwall/gjson v1.3.2
github.com/tidwall/grect v0.0.0-20161006141115-ba9a043346eb // indirect github.com/tidwall/grect v0.0.0-20161006141115-ba9a043346eb // indirect
github.com/tidwall/lotsa v0.0.0-20180225195211-a03631ac7f1c // indirect github.com/tidwall/lotsa v0.0.0-20180225195211-a03631ac7f1c // indirect

4
go.sum
View File

@ -59,8 +59,8 @@ github.com/tidwall/cities v0.0.0-20190730194520-dbe1ae0b862c h1:K/6v4woP8qym96ZK
github.com/tidwall/cities v0.0.0-20190730194520-dbe1ae0b862c/go.mod h1:lV/HDp2gCcRcHJWqgt6Di54GiDrTZwh1aG2ZUPNbqa4= github.com/tidwall/cities v0.0.0-20190730194520-dbe1ae0b862c/go.mod h1:lV/HDp2gCcRcHJWqgt6Di54GiDrTZwh1aG2ZUPNbqa4=
github.com/tidwall/geoindex v1.1.0 h1:d/pGCgKUonfQINd1235kKqx9gWBU4N7GjDS9WvbPvLY= github.com/tidwall/geoindex v1.1.0 h1:d/pGCgKUonfQINd1235kKqx9gWBU4N7GjDS9WvbPvLY=
github.com/tidwall/geoindex v1.1.0/go.mod h1:3gTa91BW+eiVIipuR6aU1Y9Sa0q75b1teE/NP2vfsTc= github.com/tidwall/geoindex v1.1.0/go.mod h1:3gTa91BW+eiVIipuR6aU1Y9Sa0q75b1teE/NP2vfsTc=
github.com/tidwall/geojson v1.1.7 h1:uNeIRbzYzGpFw88CLajyrN3d0To5GcMW5YJSmPqkhH0= github.com/tidwall/geojson v1.1.8 h1:n/WT/PG0OEHrxUJQoeqkupWDt3pwbHMynl6OF9xKIM0=
github.com/tidwall/geojson v1.1.7/go.mod h1:tBjfxeALRFLc25LLpjtWzy2nIrNmW1ze1EAhLtd8+QQ= github.com/tidwall/geojson v1.1.8/go.mod h1:tBjfxeALRFLc25LLpjtWzy2nIrNmW1ze1EAhLtd8+QQ=
github.com/tidwall/gjson v1.3.2 h1:+7p3qQFaH3fOMXAJSrdZwGKcOO/lYdGS0HqGhPqDdTI= github.com/tidwall/gjson v1.3.2 h1:+7p3qQFaH3fOMXAJSrdZwGKcOO/lYdGS0HqGhPqDdTI=
github.com/tidwall/gjson v1.3.2/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= github.com/tidwall/gjson v1.3.2/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls=
github.com/tidwall/grect v0.0.0-20161006141115-ba9a043346eb h1:5NSYaAdrnblKByzd7XByQEJVT8+9v0W/tIY0Oo4OwrE= github.com/tidwall/grect v0.0.0-20161006141115-ba9a043346eb h1:5NSYaAdrnblKByzd7XByQEJVT8+9v0W/tIY0Oo4OwrE=

View File

@ -30,8 +30,11 @@ core/gen.sh
# Set final Go environment options # Set final Go environment options
LDFLAGS="$LDFLAGS -extldflags '-static'" LDFLAGS="$LDFLAGS -extldflags '-static'"
export CGO_ENABLED=0 export CGO_ENABLED=0
if [ "$NOMODULES" != "1" ]; then
export GO111MODULE=on export GO111MODULE=on
export GOFLAGS=-mod=vendor export GOFLAGS=-mod=vendor
fi
# Build and store objects into original directory. # Build and store objects into original directory.
go build -ldflags "$LDFLAGS" -o $1 cmd/$1/*.go go build -ldflags "$LDFLAGS" -o $1 cmd/$1/*.go

View File

@ -4,8 +4,11 @@ set -e
cd $(dirname "${BASH_SOURCE[0]}")/.. cd $(dirname "${BASH_SOURCE[0]}")/..
export CGO_ENABLED=0 export CGO_ENABLED=0
if [ "$NOMODULES" != "1" ]; then
export GO111MODULE=on export GO111MODULE=on
export GOFLAGS=-mod=vendor export GOFLAGS=-mod=vendor
fi
cd tests && go test && cd .. cd tests && go test && cd ..
go test $(go list ./... | grep -v /vendor/ | grep -v /tests) go test $(go list ./... | grep -v /vendor/ | grep -v /tests)

View File

@ -216,6 +216,11 @@ func (g *Circle) Spatial() Spatial {
return g.getObject().Spatial() return g.getObject().Spatial()
} }
// Primative returns a primative GeoJSON object. Either a Polygon or Point.
func (g *Circle) Primative() Object {
return g.getObject()
}
func (g *Circle) getObject() Object { func (g *Circle) getObject() Object {
if g.object != nil { if g.object != nil {
return g.object return g.object

View File

@ -31,11 +31,7 @@ func Haversine(latA, lonA, latB, lonB float64) float64 {
// NormalizeDistance ... // NormalizeDistance ...
func NormalizeDistance(meters float64) float64 { func NormalizeDistance(meters float64) float64 {
m1 := math.Mod(meters, twoPiR) return math.Mod(meters, twoPiR)
if m1 <= piR {
return m1
}
return twoPiR - m1
} }
// DistanceToHaversine ... // DistanceToHaversine ...

View File

@ -301,25 +301,13 @@ func ringIntersectsRing(ring, other Ring, allowOnEdge bool) bool {
// swap the rings so that the inner ring is smaller than the outer ring // swap the rings so that the inner ring is smaller than the outer ring
ring, other = other, ring ring, other = other, ring
} }
if ring.Convex() && allowOnEdge {
// outer ring is convex so test that any inner points are inside of
// the outer ring
otherNumPoints := other.NumPoints()
for i := 0; i < otherNumPoints; i++ {
if ringContainsPoint(ring, other.PointAt(i), allowOnEdge).hit {
return true
}
}
} else {
// outer ring is concave so let's make sure that all inner segments are
// fully contained inside of the outer ring.
otherNumSegments := other.NumSegments() otherNumSegments := other.NumSegments()
for i := 0; i < otherNumSegments; i++ { for i := 0; i < otherNumSegments; i++ {
if ringIntersectsSegment(ring, other.SegmentAt(i), allowOnEdge) { if ringIntersectsSegment(ring, other.SegmentAt(i), allowOnEdge) {
return true return true
} }
} }
}
return false return false
} }

2
vendor/modules.txt vendored
View File

@ -81,7 +81,7 @@ github.com/tidwall/buntdb
# github.com/tidwall/geoindex v1.1.0 # github.com/tidwall/geoindex v1.1.0
github.com/tidwall/geoindex github.com/tidwall/geoindex
github.com/tidwall/geoindex/child github.com/tidwall/geoindex/child
# github.com/tidwall/geojson v1.1.7 # github.com/tidwall/geojson v1.1.8
github.com/tidwall/geojson github.com/tidwall/geojson
github.com/tidwall/geojson/geo github.com/tidwall/geojson/geo
github.com/tidwall/geojson/geometry github.com/tidwall/geojson/geometry