diff --git a/context.go b/context.go index 4f8585e13..aff596511 100644 --- a/context.go +++ b/context.go @@ -449,7 +449,7 @@ func (c *Context) newCoordsFromGEOSCoordSeq(s *C.struct_GEOSCoordSeq_t) [][]floa } coords := make([][]float64, 0, size) for i := 0; i < int(size); i++ { - coord := flatCoords[i*int(dimensions) : (i+1)*int(dimensions)] + coord := flatCoords[i*int(dimensions) : (i+1)*int(dimensions) : (i+1)*int(dimensions)] coords = append(coords, coord) } return coords diff --git a/coordseq.go b/coordseq.go index 208512658..2caa200c7 100644 --- a/coordseq.go +++ b/coordseq.go @@ -141,7 +141,7 @@ func (s *CoordSeq) ToCoords() [][]float64 { coords := make([][]float64, s.size) j := 0 for i := 0; i < s.size; i++ { - coords[i] = flatCoords[j : j+s.dimensions] + coords[i] = flatCoords[j : j+s.dimensions : j+s.dimensions] j += s.dimensions } return coords diff --git a/coordseq_test.go b/coordseq_test.go index 26ad55b10..9d6d88983 100644 --- a/coordseq_test.go +++ b/coordseq_test.go @@ -11,6 +11,12 @@ import ( "github.com/twpayne/go-geos" ) +func TestCoordSeqAliasing(t *testing.T) { + coords := geos.NewContext().NewCoordSeqFromCoords([][]float64{{0, 1}, {2, 3}}).ToCoords() + coords[0] = append(coords[0], 4) + assert.Equal(t, []float64{2, 3}, coords[1]) +} + func TestCoordSeqEmpty(t *testing.T) { defer runtime.GC() // Exercise finalizers. c := geos.NewContext() diff --git a/geom_test.go b/geom_test.go index 59a2acf48..0a0b3bbd9 100644 --- a/geom_test.go +++ b/geom_test.go @@ -402,6 +402,15 @@ func TestNewGeomFromGeoJSONError(t *testing.T) { assert.Error(t, err) } +func TestGeomNearestPointsAliasing(t *testing.T) { + c := geos.NewContext() + geom1 := mustNewGeomFromWKT(t, c, "POINT (0 1)") + geom2 := mustNewGeomFromWKT(t, c, "POINT (2 3)") + points := geom1.NearestPoints(geom2) + points[0] = append(points[0], 4) + assert.Equal(t, []float64{2, 3}, points[1]) +} + func TestGeomToJSON(t *testing.T) { geom := mustNewGeomFromWKT(t, geos.NewContext(), "POINT (1 2)") assert.Equal(t, `{"type":"Point","coordinates":[1.0,2.0]}`, geom.ToGeoJSON(-1))