geom

package module
v1.5.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 13, 2024 License: BSD-2-Clause Imports: 3 Imported by: 417

README

go-geom

PkgGoDev Go Report Card

Package geom implements efficient geometry types for geospatial applications.

Key features

  • OpenGeo Consortium-style geometries.
  • Support for 2D and 3D geometries, measures (time and/or distance), and unlimited extra dimensions.
  • Encoding and decoding of common geometry formats (GeoJSON, KML, WKB, and others) including sql.Scanner and driver.Value interface implementations for easy database integration.
  • 2D and 3D topology functions.
  • Efficient, cache-friendly internal representation.
  • Optional protection against malicious or malformed inputs.

Examples

Detailed features

Geometry types
Encoding and decoding
Geometry functions
  • XY 2D geometry functions
  • XYZ 3D geometry functions

Protection against malicious or malformed inputs

The WKB and EWKB formats encode geometry sizes, and memory is allocated for those geometries. If the input is malicious or malformed, the memory allocation can be very large, leading to a memory starvation denial-of-service attack against the server. For example, a client might send a MultiPoint with header indicating that it contains 2^32-1 points. This will result in the server reading that geometry to allocate 2 × sizeof(float64) × (2^32-1) = 64GB of memory to store those points. By default, malicious or malformed input protection is disabled, but can be enabled by setting positive values for wkbcommon.MaxGeometryElements.

License

BSD-2-Clause

Documentation

Overview

Package geom implements efficient geometry types for geospatial applications.

Index

Examples

Constants

View Source
const PointEmptyCoordHex = 0x7FF8000000000000

PointEmptyCoordHex is the hex representation of a NaN that represents an empty coord in a shape.

Variables

This section is empty.

Functions

func PointEmptyCoord added in v1.3.0

func PointEmptyCoord() float64

PointEmptyCoord is the NaN float64 representation of the empty coordinate.

Types

type Bounds

type Bounds struct {
	// contains filtered or unexported fields
}

A Bounds represents a multi-dimensional bounding box.

func NewBounds

func NewBounds(layout Layout) *Bounds

NewBounds creates a new Bounds.

func (*Bounds) Clone

func (b *Bounds) Clone() *Bounds

Clone returns a deep copy of b.

func (*Bounds) Extend

func (b *Bounds) Extend(g T) *Bounds

Extend extends b to include geometry g.

func (*Bounds) IsEmpty

func (b *Bounds) IsEmpty() bool

IsEmpty returns true if b is empty.

func (*Bounds) Layout

func (b *Bounds) Layout() Layout

Layout returns b's layout.

func (*Bounds) Max

func (b *Bounds) Max(dim int) float64

Max returns the maximum value in dimension dim.

func (*Bounds) Min

func (b *Bounds) Min(dim int) float64

Min returns the minimum value in dimension dim.

func (*Bounds) Overlaps

func (b *Bounds) Overlaps(layout Layout, b2 *Bounds) bool

Overlaps returns true if b overlaps b2 in layout.

func (*Bounds) OverlapsPoint

func (b *Bounds) OverlapsPoint(layout Layout, point Coord) bool

OverlapsPoint determines if the bounding box overlaps the point (point is within or on the border of the bounds).

func (*Bounds) Polygon

func (b *Bounds) Polygon() *Polygon

Polygon returns b as a two-dimensional Polygon.

func (*Bounds) Set

func (b *Bounds) Set(args ...float64) *Bounds

Set sets the minimum and maximum values. args must be an even number of values: the first half are the minimum values for each dimension and the second half are the maximum values for each dimension. If necessary, the layout of b will be extended to cover all the supplied dimensions implied by args.

func (*Bounds) SetCoords

func (b *Bounds) SetCoords(min, max Coord) *Bounds

SetCoords sets the minimum and maximum values of the Bounds.

type Coord

type Coord []float64

A Coord represents an N-dimensional coordinate.

func (Coord) Clone

func (c Coord) Clone() Coord

Clone returns a deep copy of c.

func (Coord) Equal

func (c Coord) Equal(layout Layout, other Coord) bool

Equal compares that all ordinates are the same in this and the other coords. It is assumed that this coord and other coord both have the same (provided) layout.

func (Coord) Set

func (c Coord) Set(other Coord)

Set copies the ordinate data from the other coord to this coord.

func (Coord) X

func (c Coord) X() float64

X returns the x coordinate of c. X is assumed to be the first ordinate.

func (Coord) Y

func (c Coord) Y() float64

Y returns the y coordinate of c. Y is assumed to be the second ordinate.

type ErrLayoutMismatch

type ErrLayoutMismatch struct {
	Got  Layout
	Want Layout
}

An ErrLayoutMismatch is returned when geometries with different layouts cannot be combined.

func (ErrLayoutMismatch) Error

func (e ErrLayoutMismatch) Error() string

type ErrStrideMismatch

type ErrStrideMismatch struct {
	Got  int
	Want int
}

An ErrStrideMismatch is returned when the stride does not match the expected stride.

func (ErrStrideMismatch) Error

func (e ErrStrideMismatch) Error() string

type ErrUnsupportedLayout

type ErrUnsupportedLayout Layout

An ErrUnsupportedLayout is returned when the requested layout is not supported.

func (ErrUnsupportedLayout) Error

func (e ErrUnsupportedLayout) Error() string

type ErrUnsupportedType

type ErrUnsupportedType struct {
	Value interface{}
}

An ErrUnsupportedType is returned when the requested type is not supported.

func (ErrUnsupportedType) Error

func (e ErrUnsupportedType) Error() string

type GeometryCollection

type GeometryCollection struct {
	// contains filtered or unexported fields
}

A GeometryCollection is a collection of arbitrary geometries with the same SRID.

func NewGeometryCollection

func NewGeometryCollection() *GeometryCollection

NewGeometryCollection returns a new empty GeometryCollection.

func (*GeometryCollection) Bounds

func (g *GeometryCollection) Bounds() *Bounds

Bounds returns the bounds of all the geometries in g.

func (*GeometryCollection) CheckLayout added in v1.4.0

func (g *GeometryCollection) CheckLayout(layout Layout) error

CheckLayout checks all geometries in the collection match the given layout.

func (*GeometryCollection) Empty

func (g *GeometryCollection) Empty() bool

Empty returns true if the collection is empty. This can return true if the GeometryCollection contains multiple Geometry objects which are all empty.

func (*GeometryCollection) Ends

func (g *GeometryCollection) Ends() []int

Ends panics.

func (*GeometryCollection) Endss

func (g *GeometryCollection) Endss() [][]int

Endss panics.

func (*GeometryCollection) FlatCoords

func (g *GeometryCollection) FlatCoords() []float64

FlatCoords panics.

func (*GeometryCollection) Geom

func (g *GeometryCollection) Geom(i int) T

Geom returns the ith geometry in g.

func (*GeometryCollection) Geoms

func (g *GeometryCollection) Geoms() []T

Geoms returns the geometries in g.

func (*GeometryCollection) Layout

func (g *GeometryCollection) Layout() Layout

Layout returns the smallest layout that covers all of the layouts in g's geometries.

func (*GeometryCollection) MustPush

func (g *GeometryCollection) MustPush(gs ...T) *GeometryCollection

MustPush pushes gs to g. It panics on any error.

func (*GeometryCollection) MustSetLayout added in v1.4.0

func (g *GeometryCollection) MustSetLayout(layout Layout) *GeometryCollection

MustSetLayout sets g's layout. It panics on any error.

func (*GeometryCollection) NumGeoms

func (g *GeometryCollection) NumGeoms() int

NumGeoms returns the number of geometries in g.

func (*GeometryCollection) Push

func (g *GeometryCollection) Push(gs ...T) error

Push appends geometries.

func (*GeometryCollection) SRID

func (g *GeometryCollection) SRID() int

SRID returns g's SRID.

func (*GeometryCollection) SetLayout added in v1.4.0

func (g *GeometryCollection) SetLayout(layout Layout) error

SetLayout sets g's layout.

func (*GeometryCollection) SetSRID

func (g *GeometryCollection) SetSRID(srid int) *GeometryCollection

SetSRID sets g's SRID and the SRID of all its elements.

func (*GeometryCollection) Stride

func (g *GeometryCollection) Stride() int

Stride returns the stride of g's layout.

type Layout

type Layout int

A Layout describes the meaning of an N-dimensional coordinate. Layout(N) for N > 4 is a valid layout, in which case the first dimensions are interpreted to be X, Y, Z, and M and extra dimensions have no special meaning. M values are considered part of a linear referencing system (e.g. classical time or distance along a path). 1-dimensional layouts are not supported.

const (
	// NoLayout is an unknown layout.
	NoLayout Layout = iota
	// XY is a 2D layout (X and Y).
	XY
	// XYZ is 3D layout (X, Y, and Z).
	XYZ
	// XYM is a 2D layout with an M value.
	XYM
	// XYZM is a 3D layout with an M value.
	XYZM
)

func (Layout) MIndex

func (l Layout) MIndex() int

MIndex returns the index of the M dimension, or -1 if the l does not have an M dimension.

func (Layout) Stride

func (l Layout) Stride() int

Stride returns l's number of dimensions.

func (Layout) String

func (l Layout) String() string

String returns a human-readable string representing l.

func (Layout) ZIndex

func (l Layout) ZIndex() int

ZIndex returns the index of l's Z dimension, or -1 if l does not have a Z dimension.

type LineString

type LineString struct {
	// contains filtered or unexported fields
}

A LineString represents a single, unbroken line, linearly interpreted between zero or more control points.

func NewLineString

func NewLineString(l Layout) *LineString

NewLineString returns a new LineString with layout l and no control points.

func NewLineStringFlat

func NewLineStringFlat(layout Layout, flatCoords []float64) *LineString

NewLineStringFlat returns a new LineString with layout l and control points flatCoords.

func (*LineString) Area

func (g *LineString) Area() float64

Area returns the area of g, i.e. zero.

func (*LineString) Clone

func (g *LineString) Clone() *LineString

Clone returns a copy of g that does not alias g.

func (*LineString) Coord

func (g *LineString) Coord(i int) Coord

Coord returns the ith coord of g.

func (*LineString) Coords

func (g *LineString) Coords() []Coord

Coords unpacks and returns all of g's coordinates.

func (*LineString) Interpolate

func (g *LineString) Interpolate(val float64, dim int) (int, float64)

Interpolate returns the index and delta of val in dimension dim.

func (*LineString) Length

func (g *LineString) Length() float64

Length returns the length of g.

func (*LineString) MustSetCoords

func (g *LineString) MustSetCoords(coords []Coord) *LineString

MustSetCoords is like SetCoords but it panics on any error.

func (*LineString) NumCoords

func (g *LineString) NumCoords() int

NumCoords returns the number of coordinates in g.

func (*LineString) Reverse added in v1.4.0

func (g *LineString) Reverse()

Reverse reverses the order of g's coordinates.

func (*LineString) SetCoords

func (g *LineString) SetCoords(coords []Coord) (*LineString, error)

SetCoords sets the coordinates of g.

func (*LineString) SetSRID

func (g *LineString) SetSRID(srid int) *LineString

SetSRID sets the SRID of g.

func (*LineString) SubLineString

func (g *LineString) SubLineString(start, stop int) *LineString

SubLineString returns a LineString from starts at index start and stops at index stop of g. The returned LineString aliases g.

func (*LineString) Swap

func (g *LineString) Swap(g2 *LineString)

Swap swaps the values of g and g2.

type LinearRing

type LinearRing struct {
	// contains filtered or unexported fields
}

A LinearRing is a linear ring.

func NewLinearRing

func NewLinearRing(layout Layout) *LinearRing

NewLinearRing returns a new LinearRing with no coordinates.

func NewLinearRingFlat

func NewLinearRingFlat(layout Layout, flatCoords []float64) *LinearRing

NewLinearRingFlat returns a new LinearRing with the given flat coordinates.

func (*LinearRing) Area

func (g *LinearRing) Area() float64

Area returns the area.

func (*LinearRing) Clone

func (g *LinearRing) Clone() *LinearRing

Clone returns a deep copy.

func (*LinearRing) Coord

func (g *LinearRing) Coord(i int) Coord

Coord returns the ith coord of g.

func (*LinearRing) Coords

func (g *LinearRing) Coords() []Coord

Coords unpacks and returns all of g's coordinates.

func (*LinearRing) Length

func (g *LinearRing) Length() float64

Length returns the length of the perimeter.

func (*LinearRing) MustSetCoords

func (g *LinearRing) MustSetCoords(coords []Coord) *LinearRing

MustSetCoords sets the coordinates and panics if there is any error.

func (*LinearRing) NumCoords

func (g *LinearRing) NumCoords() int

NumCoords returns the number of coordinates in g.

func (*LinearRing) Reverse added in v1.4.0

func (g *LinearRing) Reverse()

Reverse reverses the order of g's coordinates.

func (*LinearRing) SetCoords

func (g *LinearRing) SetCoords(coords []Coord) (*LinearRing, error)

SetCoords sets the coordinates.

func (*LinearRing) SetSRID

func (g *LinearRing) SetSRID(srid int) *LinearRing

SetSRID sets the SRID of g.

func (*LinearRing) Swap

func (g *LinearRing) Swap(g2 *LinearRing)

Swap swaps the values of g and g2.

type MultiLineString

type MultiLineString struct {
	// contains filtered or unexported fields
}

A MultiLineString is a collection of LineStrings.

func NewMultiLineString

func NewMultiLineString(layout Layout) *MultiLineString

NewMultiLineString returns a new MultiLineString with no LineStrings.

func NewMultiLineStringFlat

func NewMultiLineStringFlat(layout Layout, flatCoords []float64, ends []int) *MultiLineString

NewMultiLineStringFlat returns a new MultiLineString with the given flat coordinates.

func (*MultiLineString) Area

func (g *MultiLineString) Area() float64

Area returns the area of g, i.e. 0.

func (*MultiLineString) Clone

func (g *MultiLineString) Clone() *MultiLineString

Clone returns a deep copy.

func (*MultiLineString) Coords

func (g *MultiLineString) Coords() [][]Coord

Coords returns all of g's coordinates.

func (*MultiLineString) Ends

func (g *MultiLineString) Ends() []int

Ends returns the end indexes of all sub-structures in g.

func (*MultiLineString) Length

func (g *MultiLineString) Length() float64

Length returns the sum of the length of the LineStrings.

func (*MultiLineString) LineString

func (g *MultiLineString) LineString(i int) *LineString

LineString returns the ith LineString.

func (*MultiLineString) MustSetCoords

func (g *MultiLineString) MustSetCoords(coords [][]Coord) *MultiLineString

MustSetCoords sets the coordinates and panics on any error.

func (*MultiLineString) NumLineStrings

func (g *MultiLineString) NumLineStrings() int

NumLineStrings returns the number of LineStrings.

func (*MultiLineString) Push

func (g *MultiLineString) Push(ls *LineString) error

Push appends a LineString.

func (*MultiLineString) Reverse added in v1.4.0

func (g *MultiLineString) Reverse()

Reverse reverses the order of coordinates for each sub-structure in g.

func (*MultiLineString) SetCoords

func (g *MultiLineString) SetCoords(coords [][]Coord) (*MultiLineString, error)

SetCoords sets the coordinates.

func (*MultiLineString) SetSRID

func (g *MultiLineString) SetSRID(srid int) *MultiLineString

SetSRID sets the SRID of g.

func (*MultiLineString) Swap

func (g *MultiLineString) Swap(g2 *MultiLineString)

Swap swaps the values of g and g2.

type MultiPoint

type MultiPoint struct {
	// contains filtered or unexported fields
}

A MultiPoint is a collection of Points.

func NewMultiPoint

func NewMultiPoint(layout Layout) *MultiPoint

NewMultiPoint returns a new, empty, MultiPoint.

func NewMultiPointFlat

func NewMultiPointFlat(
	layout Layout, flatCoords []float64, opts ...NewMultiPointFlatOption,
) *MultiPoint

NewMultiPointFlat returns a new MultiPoint with the given flat coordinates. Assumes no points are empty by default. Use `NewMultiPointFlatOptionWithEnds` to specify empty points.

func (*MultiPoint) Area

func (g *MultiPoint) Area() float64

Area returns the area of g, i.e. zero.

func (*MultiPoint) Clone

func (g *MultiPoint) Clone() *MultiPoint

Clone returns a deep copy.

func (*MultiPoint) Coord

func (g *MultiPoint) Coord(i int) Coord

Coord returns the ith coord of g.

func (*MultiPoint) Coords

func (g *MultiPoint) Coords() []Coord

Coords unpacks and returns all of g's coordinates.

func (*MultiPoint) Ends added in v1.3.0

func (g *MultiPoint) Ends() []int

Ends returns the end indexes of all sub-structures in g.

func (*MultiPoint) Length

func (g *MultiPoint) Length() float64

Length returns zero.

func (*MultiPoint) MustSetCoords

func (g *MultiPoint) MustSetCoords(coords []Coord) *MultiPoint

MustSetCoords sets the coordinates and panics on any error.

func (*MultiPoint) NumCoords

func (g *MultiPoint) NumCoords() int

NumCoords returns the number of coordinates in g.

func (*MultiPoint) NumPoints

func (g *MultiPoint) NumPoints() int

NumPoints returns the number of Points.

func (*MultiPoint) Point

func (g *MultiPoint) Point(i int) *Point

Point returns the ith Point.

func (*MultiPoint) Push

func (g *MultiPoint) Push(p *Point) error

Push appends a point.

func (*MultiPoint) Reverse added in v1.4.0

func (g *MultiPoint) Reverse()

Reverse reverses the order of coordinates for each sub-structure in g.

func (*MultiPoint) SetCoords

func (g *MultiPoint) SetCoords(coords []Coord) (*MultiPoint, error)

SetCoords sets the coordinates.

func (*MultiPoint) SetSRID

func (g *MultiPoint) SetSRID(srid int) *MultiPoint

SetSRID sets the SRID of g.

func (*MultiPoint) Swap

func (g *MultiPoint) Swap(g2 *MultiPoint)

Swap swaps the values of g and g2.

type MultiPolygon

type MultiPolygon struct {
	// contains filtered or unexported fields
}

A MultiPolygon is a collection of Polygons.

func NewMultiPolygon

func NewMultiPolygon(layout Layout) *MultiPolygon

NewMultiPolygon returns a new MultiPolygon with no Polygons.

func NewMultiPolygonFlat

func NewMultiPolygonFlat(layout Layout, flatCoords []float64, endss [][]int) *MultiPolygon

NewMultiPolygonFlat returns a new MultiPolygon with the given flat coordinates.

func (*MultiPolygon) Area

func (g *MultiPolygon) Area() float64

Area returns the sum of the area of the individual Polygons.

func (*MultiPolygon) Clone

func (g *MultiPolygon) Clone() *MultiPolygon

Clone returns a deep copy.

func (*MultiPolygon) Coords

func (g *MultiPolygon) Coords() [][][]Coord

Coords returns all the coordinates in g.

func (*MultiPolygon) Endss

func (g *MultiPolygon) Endss() [][]int

Endss returns a list of all the sub-sub-structures in g.

func (*MultiPolygon) Length

func (g *MultiPolygon) Length() float64

Length returns the sum of the perimeters of the Polygons.

func (*MultiPolygon) MustSetCoords

func (g *MultiPolygon) MustSetCoords(coords [][][]Coord) *MultiPolygon

MustSetCoords sets the coordinates and panics on any error.

func (*MultiPolygon) NumPolygons

func (g *MultiPolygon) NumPolygons() int

NumPolygons returns the number of Polygons.

func (*MultiPolygon) Polygon

func (g *MultiPolygon) Polygon(i int) *Polygon

Polygon returns the ith Polygon.

func (*MultiPolygon) Push

func (g *MultiPolygon) Push(p *Polygon) error

Push appends a Polygon.

func (*MultiPolygon) Reverse added in v1.4.0

func (g *MultiPolygon) Reverse()

Reverse reverses the order of coordinates for each sub-sub-structure in g.

func (*MultiPolygon) SetCoords

func (g *MultiPolygon) SetCoords(coords [][][]Coord) (*MultiPolygon, error)

SetCoords sets the coordinates.

func (*MultiPolygon) SetSRID

func (g *MultiPolygon) SetSRID(srid int) *MultiPolygon

SetSRID sets the SRID of g.

func (*MultiPolygon) Swap

func (g *MultiPolygon) Swap(g2 *MultiPolygon)

Swap swaps the values of g and g2.

type NewMultiPointFlatOption added in v1.3.0

type NewMultiPointFlatOption func(*MultiPoint)

NewMultiPointFlatOption represents an option that can be passed into NewMultiPointFlat.

func NewMultiPointFlatOptionWithEnds added in v1.3.0

func NewMultiPointFlatOptionWithEnds(ends []int) NewMultiPointFlatOption

NewMultiPointFlatOptionWithEnds allows passing ends to NewMultiPointFlat, which allows the representation of empty points.

type Point

type Point struct {
	// contains filtered or unexported fields
}

A Point represents a single point.

func NewPoint

func NewPoint(l Layout) *Point

NewPoint allocates a new Point with layout l and all values zero.

func NewPointEmpty added in v1.1.0

func NewPointEmpty(l Layout) *Point

NewPointEmpty allocates a new Point with no coordinates.

func NewPointFlat

func NewPointFlat(l Layout, flatCoords []float64) *Point

NewPointFlat allocates a new Point with layout l and flat coordinates flatCoords.

func NewPointFlatMaybeEmpty added in v1.3.0

func NewPointFlatMaybeEmpty(layout Layout, flatCoords []float64) *Point

NewPointFlatMaybeEmpty returns a new point, checking whether the point may be empty by checking wther all the points are NaN.

func (*Point) Area

func (g *Point) Area() float64

Area returns g's area, i.e. zero.

func (*Point) Bounds

func (g *Point) Bounds() *Bounds

Bounds returns the bounds of g.

func (*Point) Clone

func (g *Point) Clone() *Point

Clone returns a copy of g that does not alias g.

func (*Point) Coords

func (g *Point) Coords() Coord

Coords returns all the coordinates in g, i.e. a single coordinate.

func (*Point) Empty

func (g *Point) Empty() bool

Empty returns true if g contains no coordinates.

func (*Point) Ends

func (g *Point) Ends() []int

Ends returns the end indexes of sub-structures of g, i.e. an empty slice.

func (*Point) Endss

func (g *Point) Endss() [][]int

Endss returns the end indexes of sub-sub-structures of g, i.e. an empty slice.

func (*Point) FlatCoords

func (g *Point) FlatCoords() []float64

FlatCoords returns the flat coordinates of g.

func (*Point) Layout

func (g *Point) Layout() Layout

Layout returns g's layout.

func (*Point) Length

func (g *Point) Length() float64

Length returns the length of g, i.e. zero.

func (*Point) M

func (g *Point) M() float64

M returns g's M-coordinate, or zero if g has no M-coordinate.

func (*Point) MustSetCoords

func (g *Point) MustSetCoords(coords Coord) *Point

MustSetCoords is like SetCoords but panics on any error.

func (*Point) NumCoords

func (g *Point) NumCoords() int

NumCoords returns the number of coordinates in g, i.e. 1.

func (*Point) Reserve

func (g *Point) Reserve(n int)

Reserve reserves space in g for n coordinates.

func (*Point) SRID

func (g *Point) SRID() int

SRID returns g's SRID.

func (*Point) SetCoords

func (g *Point) SetCoords(coords Coord) (*Point, error)

SetCoords sets the coordinates of g.

func (*Point) SetSRID

func (g *Point) SetSRID(srid int) *Point

SetSRID sets the SRID of g.

func (*Point) Stride

func (g *Point) Stride() int

Stride returns g's stride.

func (*Point) Swap

func (g *Point) Swap(g2 *Point)

Swap swaps the values of g and g2.

func (*Point) X

func (g *Point) X() float64

X returns g's X-coordinate.

func (*Point) Y

func (g *Point) Y() float64

Y returns g's Y-coordinate.

func (*Point) Z

func (g *Point) Z() float64

Z returns g's Z-coordinate, or zero if g has no Z-coordinate.

type Polygon

type Polygon struct {
	// contains filtered or unexported fields
}

A Polygon represents a polygon as a collection of LinearRings. The first LinearRing is the outer boundary. Subsequent LinearRings are inner boundaries (holes).

func NewPolygon

func NewPolygon(layout Layout) *Polygon

NewPolygon returns a new, empty, Polygon.

Example
unitSquare := NewPolygon(XY).MustSetCoords([][]Coord{
	{{0, 0}, {1, 0}, {1, 1}, {0, 1}, {0, 0}},
})
fmt.Printf("unitSquare.Area() == %f", unitSquare.Area())
Output:

unitSquare.Area() == 1.000000

func NewPolygonFlat

func NewPolygonFlat(layout Layout, flatCoords []float64, ends []int) *Polygon

NewPolygonFlat returns a new Polygon with the given flat coordinates.

func (*Polygon) Area

func (g *Polygon) Area() float64

Area returns the area.

func (*Polygon) Clone

func (g *Polygon) Clone() *Polygon

Clone returns a deep copy.

func (*Polygon) Coords

func (g *Polygon) Coords() [][]Coord

Coords returns all of g's coordinates.

func (*Polygon) Ends

func (g *Polygon) Ends() []int

Ends returns the end indexes of all sub-structures in g.

func (*Polygon) Length

func (g *Polygon) Length() float64

Length returns the perimter.

func (*Polygon) LinearRing

func (g *Polygon) LinearRing(i int) *LinearRing

LinearRing returns the ith LinearRing.

func (*Polygon) MustSetCoords

func (g *Polygon) MustSetCoords(coords [][]Coord) *Polygon

MustSetCoords sets the coordinates and panics on any error.

func (*Polygon) NumLinearRings

func (g *Polygon) NumLinearRings() int

NumLinearRings returns the number of LinearRings.

func (*Polygon) Push

func (g *Polygon) Push(lr *LinearRing) error

Push appends a LinearRing.

func (*Polygon) Reverse added in v1.4.0

func (g *Polygon) Reverse()

Reverse reverses the order of coordinates for each sub-structure in g.

func (*Polygon) SetCoords

func (g *Polygon) SetCoords(coords [][]Coord) (*Polygon, error)

SetCoords sets the coordinates.

func (*Polygon) SetSRID

func (g *Polygon) SetSRID(srid int) *Polygon

SetSRID sets the SRID of g.

func (*Polygon) Swap

func (g *Polygon) Swap(g2 *Polygon)

Swap swaps the values of g and g2.

type T

type T interface {
	Layout() Layout
	Stride() int
	Bounds() *Bounds
	FlatCoords() []float64
	Ends() []int
	Endss() [][]int
	SRID() int
	Empty() bool
}

T is a generic interface implemented by all geometry types.

func Must

func Must(g T, err error) T

Must panics if err is not nil, otherwise it returns g.

func SetSRID added in v1.4.0

func SetSRID(g T, srid int) (T, error)

SetSRID sets the SRID of an arbitrary geometry.

func TransformInPlace added in v1.3.3

func TransformInPlace(g T, f func(Coord)) T

TransformInPlace replaces all coordinates in g using f.

Directories

Path Synopsis
Package bigxy contains robust geographic functions on planar (xy) data.
Package bigxy contains robust geographic functions on planar (xy) data.
encoding
ewkb
Package ewkb implements Extended Well Known Binary encoding and decoding.
Package ewkb implements Extended Well Known Binary encoding and decoding.
ewkbhex
Package ewkbhex implements Extended Well Known Binary encoding and decoding of strings.
Package ewkbhex implements Extended Well Known Binary encoding and decoding of strings.
geojson
Package geojson implements GeoJSON encoding and decoding.
Package geojson implements GeoJSON encoding and decoding.
igc
Package igc implements an IGC parser.
Package igc implements an IGC parser.
kml
Package kml implements KML encoding.
Package kml implements KML encoding.
wkb
Package wkb implements Well Known Binary encoding and decoding.
Package wkb implements Well Known Binary encoding and decoding.
wkbcommon
Package wkbcommon contains code common to WKB and EWKB encoding.
Package wkbcommon contains code common to WKB and EWKB encoding.
wkbhex
Package wkbhex implements Well Known Binary encoding and decoding of strings.
Package wkbhex implements Well Known Binary encoding and decoding of strings.
wkt
Package wkt implements Well Known Text encoding and decoding.
Package wkt implements Well Known Text encoding and decoding.
examples
internal
cmd/parse-igc
parse-igc parsers all IGC files passed on the command line and prints any errors encountered.
parse-igc parsers all IGC files passed on the command line and prints any errors encountered.
xy
Package xy contains low-level planar (xy) geographic functions.
Package xy contains low-level planar (xy) geographic functions.
internal/robustdeterminate
Package robustdeterminate implements an algorithm to compute the sign of a 2x2 determinant for double precision values robustly.
Package robustdeterminate implements an algorithm to compute the sign of a 2x2 determinant for double precision values robustly.
Package xyz contains operations in 3d coordinate space.
Package xyz contains operations in 3d coordinate space.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL