Documentation ¶
Overview ¶
Package geom implements efficient geometry types for geospatial applications.
Index ¶
- type Bounds
- func (b *Bounds) Clone() *Bounds
- func (b *Bounds) Extend(g T) *Bounds
- func (b *Bounds) IsEmpty() bool
- func (b *Bounds) Layout() Layout
- func (b *Bounds) Max(dim int) float64
- func (b *Bounds) Min(dim int) float64
- func (b *Bounds) Overlaps(layout Layout, b2 *Bounds) bool
- func (b *Bounds) OverlapsPoint(layout Layout, point Coord) bool
- func (b *Bounds) Set(args ...float64) *Bounds
- func (b *Bounds) SetCoords(min, max Coord) *Bounds
- type Coord
- type ErrLayoutMismatch
- type ErrStrideMismatch
- type ErrUnsupportedLayout
- type ErrUnsupportedType
- type GeometryCollection
- func (gc *GeometryCollection) Bounds() *Bounds
- func (gc *GeometryCollection) Empty() bool
- func (*GeometryCollection) Ends() []int
- func (*GeometryCollection) Endss() [][]int
- func (*GeometryCollection) FlatCoords() []float64
- func (gc *GeometryCollection) Geom(i int) T
- func (gc *GeometryCollection) Geoms() []T
- func (gc *GeometryCollection) Layout() Layout
- func (gc *GeometryCollection) MustPush(gs ...T) *GeometryCollection
- func (gc *GeometryCollection) NumGeoms() int
- func (gc *GeometryCollection) Push(gs ...T) error
- func (gc *GeometryCollection) SRID() int
- func (gc *GeometryCollection) SetSRID(srid int) *GeometryCollection
- func (gc *GeometryCollection) Stride() int
- type Layout
- type LineString
- func (ls *LineString) Area() float64
- func (ls *LineString) Clone() *LineString
- func (g *LineString) Coord(i int) Coord
- func (g *LineString) Coords() []Coord
- func (ls *LineString) Empty() bool
- func (ls *LineString) Interpolate(val float64, dim int) (int, float64)
- func (ls *LineString) Length() float64
- func (ls *LineString) MustSetCoords(coords []Coord) *LineString
- func (g *LineString) NumCoords() int
- func (ls *LineString) SetCoords(coords []Coord) (*LineString, error)
- func (ls *LineString) SetSRID(srid int) *LineString
- func (ls *LineString) SubLineString(start, stop int) *LineString
- func (ls *LineString) Swap(ls2 *LineString)
- type LinearRing
- func (lr *LinearRing) Area() float64
- func (lr *LinearRing) Clone() *LinearRing
- func (g *LinearRing) Coord(i int) Coord
- func (g *LinearRing) Coords() []Coord
- func (lr *LinearRing) Empty() bool
- func (lr *LinearRing) Length() float64
- func (lr *LinearRing) MustSetCoords(coords []Coord) *LinearRing
- func (g *LinearRing) NumCoords() int
- func (lr *LinearRing) SetCoords(coords []Coord) (*LinearRing, error)
- func (lr *LinearRing) SetSRID(srid int) *LinearRing
- func (lr *LinearRing) Swap(lr2 *LinearRing)
- type MultiLineString
- func (mls *MultiLineString) Area() float64
- func (mls *MultiLineString) Clone() *MultiLineString
- func (g *MultiLineString) Coords() [][]Coord
- func (mls *MultiLineString) Empty() bool
- func (g *MultiLineString) Ends() []int
- func (mls *MultiLineString) Length() float64
- func (mls *MultiLineString) LineString(i int) *LineString
- func (mls *MultiLineString) MustSetCoords(coords [][]Coord) *MultiLineString
- func (mls *MultiLineString) NumLineStrings() int
- func (mls *MultiLineString) Push(ls *LineString) error
- func (mls *MultiLineString) SetCoords(coords [][]Coord) (*MultiLineString, error)
- func (mls *MultiLineString) SetSRID(srid int) *MultiLineString
- func (mls *MultiLineString) Swap(mls2 *MultiLineString)
- type MultiPoint
- func (mp *MultiPoint) Area() float64
- func (mp *MultiPoint) Clone() *MultiPoint
- func (g *MultiPoint) Coord(i int) Coord
- func (g *MultiPoint) Coords() []Coord
- func (mp *MultiPoint) Empty() bool
- func (mp *MultiPoint) Length() float64
- func (mp *MultiPoint) MustSetCoords(coords []Coord) *MultiPoint
- func (g *MultiPoint) NumCoords() int
- func (mp *MultiPoint) NumPoints() int
- func (mp *MultiPoint) Point(i int) *Point
- func (mp *MultiPoint) Push(p *Point) error
- func (mp *MultiPoint) SetCoords(coords []Coord) (*MultiPoint, error)
- func (mp *MultiPoint) SetSRID(srid int) *MultiPoint
- func (mp *MultiPoint) Swap(mp2 *MultiPoint)
- type MultiPolygon
- func (mp *MultiPolygon) Area() float64
- func (mp *MultiPolygon) Clone() *MultiPolygon
- func (g *MultiPolygon) Coords() [][][]Coord
- func (mp *MultiPolygon) Empty() bool
- func (g *MultiPolygon) Endss() [][]int
- func (mp *MultiPolygon) Length() float64
- func (mp *MultiPolygon) MustSetCoords(coords [][][]Coord) *MultiPolygon
- func (mp *MultiPolygon) NumPolygons() int
- func (mp *MultiPolygon) Polygon(i int) *Polygon
- func (mp *MultiPolygon) Push(p *Polygon) error
- func (mp *MultiPolygon) SetCoords(coords [][][]Coord) (*MultiPolygon, error)
- func (mp *MultiPolygon) SetSRID(srid int) *MultiPolygon
- func (mp *MultiPolygon) Swap(mp2 *MultiPolygon)
- type Point
- func (p *Point) Area() float64
- func (g *Point) Bounds() *Bounds
- func (p *Point) Clone() *Point
- func (g *Point) Coords() Coord
- func (p *Point) Empty() bool
- func (g *Point) Ends() []int
- func (g *Point) Endss() [][]int
- func (g *Point) FlatCoords() []float64
- func (g *Point) Layout() Layout
- func (p *Point) Length() float64
- func (p *Point) M() float64
- func (p *Point) MustSetCoords(coords Coord) *Point
- func (g *Point) NumCoords() int
- func (g *Point) Reserve(n int)
- func (g *Point) SRID() int
- func (p *Point) SetCoords(coords Coord) (*Point, error)
- func (p *Point) SetSRID(srid int) *Point
- func (g *Point) Stride() int
- func (p *Point) Swap(p2 *Point)
- func (p *Point) X() float64
- func (p *Point) Y() float64
- func (p *Point) Z() float64
- type Polygon
- func (p *Polygon) Area() float64
- func (p *Polygon) Clone() *Polygon
- func (g *Polygon) Coords() [][]Coord
- func (p *Polygon) Empty() bool
- func (g *Polygon) Ends() []int
- func (p *Polygon) Length() float64
- func (p *Polygon) LinearRing(i int) *LinearRing
- func (p *Polygon) MustSetCoords(coords [][]Coord) *Polygon
- func (p *Polygon) NumLinearRings() int
- func (p *Polygon) Push(lr *LinearRing) error
- func (p *Polygon) SetCoords(coords [][]Coord) (*Polygon, error)
- func (p *Polygon) SetSRID(srid int) *Polygon
- func (p *Polygon) Swap(p2 *Polygon)
- type T
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Bounds ¶
type Bounds struct {
// contains filtered or unexported fields
}
A Bounds represents a multi-dimensional bounding box.
func (*Bounds) OverlapsPoint ¶
OverlapsPoint determines if the bounding box overlaps the point (point is within or on the border of the bounds)
type Coord ¶
type Coord []float64
A Coord represents an N-dimensional coordinate.
func (Coord) Equal ¶
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.
type ErrLayoutMismatch ¶
An ErrLayoutMismatch is returned when geometries with different layouts cannot be combined.
func (ErrLayoutMismatch) Error ¶
func (e ErrLayoutMismatch) Error() string
type ErrStrideMismatch ¶
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 GeometryCollection with the specified geometries.
func (*GeometryCollection) Bounds ¶
func (gc *GeometryCollection) Bounds() *Bounds
Bounds returns the bounds of all the geometries in gc.
func (*GeometryCollection) Empty ¶
func (gc *GeometryCollection) Empty() bool
Empty returns true if the collection is empty.
func (*GeometryCollection) FlatCoords ¶
func (*GeometryCollection) FlatCoords() []float64
FlatCoords panics.
func (*GeometryCollection) Geom ¶
func (gc *GeometryCollection) Geom(i int) T
Geom returns the ith geometry in gc.
func (*GeometryCollection) Geoms ¶
func (gc *GeometryCollection) Geoms() []T
Geoms returns the geometries in gc.
func (*GeometryCollection) Layout ¶
func (gc *GeometryCollection) Layout() Layout
Layout returns the smallest layout that covers all of the layouts in gc's geometries.
func (*GeometryCollection) MustPush ¶
func (gc *GeometryCollection) MustPush(gs ...T) *GeometryCollection
MustPush pushes gs to gc. It panics on any error.
func (*GeometryCollection) NumGeoms ¶
func (gc *GeometryCollection) NumGeoms() int
NumGeoms returns the number of geometries in gc.
func (*GeometryCollection) Push ¶
func (gc *GeometryCollection) Push(gs ...T) error
Push appends geometries.
func (*GeometryCollection) SetSRID ¶
func (gc *GeometryCollection) SetSRID(srid int) *GeometryCollection
SetSRID sets gc's SRID and the SRID of all its elements.
func (*GeometryCollection) Stride ¶
func (gc *GeometryCollection) Stride() int
Stride returns the stride of gc'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.
func (Layout) MIndex ¶
MIndex returns the index of the M dimension, or -1 if the l does not have an M 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 (ls *LineString) Area() float64
Area returns the length of ls, i.e. zero.
func (*LineString) Clone ¶
func (ls *LineString) Clone() *LineString
Clone returns a copy of ls that does not alias ls.
func (*LineString) Interpolate ¶
func (ls *LineString) Interpolate(val float64, dim int) (int, float64)
Interpolate returns the index and delta of val in dimension dim.
func (*LineString) MustSetCoords ¶
func (ls *LineString) MustSetCoords(coords []Coord) *LineString
MustSetCoords is like SetCoords but it panics on any error.
func (*LineString) SetCoords ¶
func (ls *LineString) SetCoords(coords []Coord) (*LineString, error)
SetCoords sets the coordinates of ls.
func (*LineString) SetSRID ¶
func (ls *LineString) SetSRID(srid int) *LineString
SetSRID sets the SRID of ls.
func (*LineString) SubLineString ¶
func (ls *LineString) SubLineString(start, stop int) *LineString
SubLineString returns a LineString from starts at index start and stops at index stop of ls. The returned LineString aliases ls.
func (*LineString) Swap ¶
func (ls *LineString) Swap(ls2 *LineString)
Swap swaps the values of ls and ls2.
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) Length ¶
func (lr *LinearRing) Length() float64
Length returns the length of the perimeter.
func (*LinearRing) MustSetCoords ¶
func (lr *LinearRing) MustSetCoords(coords []Coord) *LinearRing
MustSetCoords sets the coordinates and panics if there is any error.
func (*LinearRing) SetCoords ¶
func (lr *LinearRing) SetCoords(coords []Coord) (*LinearRing, error)
SetCoords sets the coordinates.
func (*LinearRing) SetSRID ¶
func (lr *LinearRing) SetSRID(srid int) *LinearRing
SetSRID sets the SRID of lr.
func (*LinearRing) Swap ¶
func (lr *LinearRing) Swap(lr2 *LinearRing)
Swap swaps the values of lr and lr2.
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) Clone ¶
func (mls *MultiLineString) Clone() *MultiLineString
Clone returns a deep copy.
func (*MultiLineString) Empty ¶
func (mls *MultiLineString) Empty() bool
Empty returns true if the collection is empty.
func (*MultiLineString) Length ¶
func (mls *MultiLineString) Length() float64
Length returns the sum of the length of the LineStrings.
func (*MultiLineString) LineString ¶
func (mls *MultiLineString) LineString(i int) *LineString
LineString returns the ith LineString.
func (*MultiLineString) MustSetCoords ¶
func (mls *MultiLineString) MustSetCoords(coords [][]Coord) *MultiLineString
MustSetCoords sets the coordinates and panics on any error.
func (*MultiLineString) NumLineStrings ¶
func (mls *MultiLineString) NumLineStrings() int
NumLineStrings returns the number of LineStrings.
func (*MultiLineString) Push ¶
func (mls *MultiLineString) Push(ls *LineString) error
Push appends a LineString.
func (*MultiLineString) SetCoords ¶
func (mls *MultiLineString) SetCoords(coords [][]Coord) (*MultiLineString, error)
SetCoords sets the coordinates.
func (*MultiLineString) SetSRID ¶
func (mls *MultiLineString) SetSRID(srid int) *MultiLineString
SetSRID sets the SRID of mls.
func (*MultiLineString) Swap ¶
func (mls *MultiLineString) Swap(mls2 *MultiLineString)
Swap swaps the values of mls and mls2.
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) *MultiPoint
NewMultiPointFlat returns a new MultiPoint with the given flat coordinates.
func (*MultiPoint) Empty ¶
func (mp *MultiPoint) Empty() bool
Empty returns true if the collection is empty.
func (*MultiPoint) MustSetCoords ¶
func (mp *MultiPoint) MustSetCoords(coords []Coord) *MultiPoint
MustSetCoords sets the coordinates and panics on any error.
func (*MultiPoint) NumPoints ¶
func (mp *MultiPoint) NumPoints() int
NumPoints returns the number of Points.
func (*MultiPoint) SetCoords ¶
func (mp *MultiPoint) SetCoords(coords []Coord) (*MultiPoint, error)
SetCoords sets the coordinates.
func (*MultiPoint) SetSRID ¶
func (mp *MultiPoint) SetSRID(srid int) *MultiPoint
SetSRID sets the SRID of mp.
func (*MultiPoint) Swap ¶
func (mp *MultiPoint) Swap(mp2 *MultiPoint)
Swap swaps the values of mp and mp2.
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 (mp *MultiPolygon) Area() float64
Area returns the sum of the area of the individual Polygons.
func (*MultiPolygon) Clone ¶
func (mp *MultiPolygon) Clone() *MultiPolygon
Clone returns a deep copy.
func (*MultiPolygon) Empty ¶
func (mp *MultiPolygon) Empty() bool
Empty returns true if the collection is empty.
func (*MultiPolygon) Length ¶
func (mp *MultiPolygon) Length() float64
Length returns the sum of the perimeters of the Polygons.
func (*MultiPolygon) MustSetCoords ¶
func (mp *MultiPolygon) MustSetCoords(coords [][][]Coord) *MultiPolygon
MustSetCoords sets the coordinates and panics on any error.
func (*MultiPolygon) NumPolygons ¶
func (mp *MultiPolygon) NumPolygons() int
NumPolygons returns the number of Polygons.
func (*MultiPolygon) Polygon ¶
func (mp *MultiPolygon) Polygon(i int) *Polygon
Polygon returns the ith Polygon.
func (*MultiPolygon) SetCoords ¶
func (mp *MultiPolygon) SetCoords(coords [][][]Coord) (*MultiPolygon, error)
SetCoords sets the coordinates.
func (*MultiPolygon) SetSRID ¶
func (mp *MultiPolygon) SetSRID(srid int) *MultiPolygon
SetSRID sets the SRID of mp.
func (*MultiPolygon) Swap ¶
func (mp *MultiPolygon) Swap(mp2 *MultiPolygon)
Swap swaps the values of mp and mp2.
type Point ¶
type Point struct {
// contains filtered or unexported fields
}
A Point represents a single point.
func NewPointFlat ¶
NewPointFlat allocates a new Point with layout l and flat coordinates flatCoords.
func (*Point) FlatCoords ¶
func (g *Point) FlatCoords() []float64
func (*Point) MustSetCoords ¶
MustSetCoords is like SetCoords but panics on any error.
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 ¶
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 ¶
NewPolygonFlat returns a new Polygon with the given flat coordinates.
func (*Polygon) LinearRing ¶
func (p *Polygon) LinearRing(i int) *LinearRing
LinearRing returns the ith LinearRing.
func (*Polygon) MustSetCoords ¶
MustSetCoords sets the coordinates and panics on any error.
func (*Polygon) NumLinearRings ¶
NumLinearRings returns the number of LinearRings.
Source Files ¶
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. |
Package xy contains low-level planar (xy) geographic functions.
|
Package xy contains low-level planar (xy) geographic functions. |
Package xyz contains operations in 3d coordinate space.
|
Package xyz contains operations in 3d coordinate space. |