geom

package module
v0.0.3 Latest Latest
Warning

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

Go to latest
Published: Feb 19, 2025 License: BSD-2-Clause Imports: 3 Imported by: 0

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

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(minCoord, maxCoord 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 Geom0 added in v0.0.3

type Geom0 struct {
	Layout     Layout
	Stride     int
	FlatCoords []float64
	Srid       int
}

func (*Geom0) Coords added in v0.0.3

func (g *Geom0) Coords() Coord

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

func (*Geom0) GetBounds added in v0.0.3

func (g *Geom0) GetBounds() *Bounds

GetBounds returns the bounds of g.

func (*Geom0) GetEnds added in v0.0.3

func (g *Geom0) GetEnds() []int

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

func (*Geom0) GetEndss added in v0.0.3

func (g *Geom0) GetEndss() [][]int

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

func (*Geom0) GetFlatCoords added in v0.0.3

func (g *Geom0) GetFlatCoords() []float64

GetFlatCoords returns the flat coordinates of g.

func (*Geom0) GetLayout added in v0.0.3

func (g *Geom0) GetLayout() Layout

GetLayout returns g's layout.

func (*Geom0) GetSRID added in v0.0.3

func (g *Geom0) GetSRID() int

GetSRID returns g's GetSRID.

func (*Geom0) GetStride added in v0.0.3

func (g *Geom0) GetStride() int

GetStride returns g's stride.

func (*Geom0) IsEmpty added in v0.0.3

func (g *Geom0) IsEmpty() bool

IsEmpty returns true if g contains no coordinates.

func (*Geom0) NumCoords added in v0.0.3

func (g *Geom0) NumCoords() int

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

func (*Geom0) Reserve added in v0.0.3

func (g *Geom0) Reserve(n int)

Reserve reserves space in g for n coordinates.

type Geom1 added in v0.0.3

type Geom1 struct {
	Geom0
}

func (*Geom1) Coord added in v0.0.3

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

Coord returns the ith coord of g.

func (*Geom1) Coords added in v0.0.3

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

Coords unpacks and returns all of g's coordinates.

func (*Geom1) NumCoords added in v0.0.3

func (g *Geom1) NumCoords() int

NumCoords returns the number of coordinates in g.

func (*Geom1) Reverse added in v0.0.3

func (g *Geom1) Reverse()

Reverse reverses the order of g's coordinates.

type Geom2 added in v0.0.3

type Geom2 struct {
	Geom1
	Ends []int
}

func (*Geom2) Coords added in v0.0.3

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

Coords returns all of g's coordinates.

func (*Geom2) GetEnds added in v0.0.3

func (g *Geom2) GetEnds() []int

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

func (*Geom2) Reverse added in v0.0.3

func (g *Geom2) Reverse()

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

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) CheckLayout

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

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

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) GetBounds

func (g *GeometryCollection) GetBounds() *Bounds

GetBounds returns the bounds of all the geometries in g.

func (*GeometryCollection) GetEnds

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

GetEnds panics.

func (*GeometryCollection) GetEndss

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

GetEndss panics.

func (*GeometryCollection) GetFlatCoords

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

GetFlatCoords panics.

func (*GeometryCollection) GetLayout

func (g *GeometryCollection) GetLayout() Layout

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

func (*GeometryCollection) GetSRID

func (g *GeometryCollection) GetSRID() int

GetSRID returns g's GetSRID.

func (*GeometryCollection) GetStride

func (g *GeometryCollection) GetStride() int

GetStride returns the stride of g's layout.

func (*GeometryCollection) IsEmpty

func (g *GeometryCollection) IsEmpty() bool

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

func (*GeometryCollection) MustPush

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

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

func (*GeometryCollection) MustSetLayout

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) SetLayout

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.

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 {
	Geom1
}

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) 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) 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 {
	Geom1
}

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) 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) 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 {
	Geom2
}

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) 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) 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 {
	// To represent an MultiPoint that allows EMPTY elements, e.g.
	// MULTIPOINT ( EMPTY, POINT(1.0 1.0), EMPTY), we have to allow
	// record ends. If there is an empty point, ends[i] == ends[i-1].
	Geom2
}

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) 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) 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) GetEndss

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

GetEndss 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

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

type NewMultiPointFlatOption func(*MultiPoint)

NewMultiPointFlatOption represents an option that can be passed into NewMultiPointFlat.

func NewMultiPointFlatOptionWithEnds

func NewMultiPointFlatOptionWithEnds(ends []int) NewMultiPointFlatOption

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

type Point

type Point struct {
	Geom0
}

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

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

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) Clone

func (g *Point) Clone() *Point

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

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) 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) 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 {
	Geom2
}

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) 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) 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 {
	GetLayout() Layout
	GetStride() int
	GetBounds() *Bounds
	GetFlatCoords() []float64
	GetEnds() []int
	GetEndss() [][]int
	GetSRID() int
	IsEmpty() 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

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

SetSRID sets the SRID of an arbitrary geometry.

func TransformInPlace

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.
igc/cmd/igc2kml command
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.
internal
cmd/parse-igc command
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