README
¶
go-geos
Package go-geos
provides an interface to GEOS.
Install
$ go get github.com/twpayne/go-geos
You must also install the GEOS development headers and libraries. These are
typically in the package libgeos-dev
on Debian-like systems, geos-devel
on
RedHat-like systems, and geos
in Homebrew.
Features
-
Fluent Go API.
-
Low-level
Context
,CoordSeq
,Geom
,PrepGeom
, andSTRtree
types provide access to all GEOS methods. -
High-level
geometry.Geometry
type implements all GEOS functionality and many standard Go interfaces:database/sql/driver.Valuer
anddatabase/sql.Scanner
(WKB) for PostGIS database integration.encoding/json.Marshaler
andencoding/json.Unmarshaler
(GeoJSON).encoding/xml.Marshaler
(KML).encoding.BinaryMarshaler
andencoding.BinaryUnmarshaler
(WKB).encoding.TextMarshaler
andencoding.TextUnmarshaler
(WKT).encoding/gob.GobEncoder
andencoding/gob.GobDecoder
(GOB).
See the PostGIS example for a demonstration of the use of these interfaces.
-
Concurrency-safe.
go-geos
uses GEOS's threadsafe*_r
functions under the hood, with locking to ensure safety, even when used across multiple goroutines. For best performance, use onegeos.Context
per goroutine. -
Caching of geometry properties to avoid cgo overhead.
-
Optimized GeoJSON encoder.
-
Automatic finalization of GEOS objects.
Memory management
go-geos
objects live mostly on the C heap. go-geos
sets finalizers on the
objects it creates that free the associated C memory. However, the C heap is not
visible to the Go runtime. The can result in significant memory pressure as
memory is consumed by large, non-finalized geometries, of which the Go runtime
is unaware. Consequently, if it is known that a geometry will no longer be used,
it should be explicitly freed by calling its Destroy()
method. Periodic calls
to runtime.GC()
can also help, but the Go runtime makes no guarantees about
when or if finalizers will be called.
You can set a function to be called whenever a geometry's finalizer is invoked
with the WithGeomFinalizeFunc
option to NewContext()
. This can be helpful
for tracking down geometry leaks.
For more information, see the documentation for
runtime.SetFinalizer()
and this
thread on
golang-nuts
.
Errors, exceptions, and panics
go-geos
uses the stable GEOS C bindings. These bindings catch exceptions from
the underlying C++ code and convert them to an integer return code. For normal
geometry operations, go-geos
panics whenever it encounters a GEOS return code
indicating an error, rather than returning an error
. Such panics will not
occur if go-geos
is used correctly. Panics will occur for invalid API calls,
out-of-bounds access, or operations on invalid geometries. This behavior is
similar to slice access in Go (out-of-bounds accesses panic) and keeps the API
fluent. When parsing data, errors are expected so an error
is returned.
Comparison with github.com/twpayne/go-geom
github.com/twpayne/go-geom
is a pure Go
library providing similar functionality to go-geos
. The major differences are:
go-geos
uses GEOS, which is an extremely mature library with a rich feature set.go-geos
uses cgo, with all the disadvantages that that entails, notably expensive function call overhead, more complex memory management and trickier cross-compilation.go-geom
uses a cache-friendly coordinate layout which is generally faster than GEOS for many operations.
go-geos
is a good fit if your program is short-lived (meaning you can ignore
memory management), or you require the battle-tested geometry functions provided
by GEOS and are willing to handle memory management manually. go-geom
is
recommended for long-running processes with less stringent geometry function
requirements.
GEOS version compatibility
go-geos
is tested to work with the versions of GEOS
tested on CI.
See here.
Calling functions unsupported by the underlying GEOS
library will result in a panic.
Users can use VersionCompare
to be sure that a function exists.
Contributing
Please check CONTRIBUTING.md
for instructions before you open a pull-request!
License
MIT
Documentation
¶
Overview ¶
Package geos provides an interface to GEOS. See https://trac.osgeo.org/geos/.
Index ¶
- Constants
- Variables
- func VersionCompare(major, minor, patch int) int
- type Box2D
- func (b *Box2D) Contains(other *Box2D) bool
- func (b *Box2D) ContainsPoint(x, y float64) bool
- func (b *Box2D) ContextGeom(context *Context) *Geom
- func (b *Box2D) Equals(other *Box2D) bool
- func (b *Box2D) Geom() *Geom
- func (b *Box2D) Height() float64
- func (b *Box2D) Intersects(other *Box2D) bool
- func (b *Box2D) IsEmpty() bool
- func (b *Box2D) IsPoint() bool
- func (b *Box2D) String() string
- func (b *Box2D) Width() float64
- type Box3D
- type BufCapStyle
- type BufJoinStyle
- type BufferParams
- func (p *BufferParams) Destroy()
- func (p *BufferParams) SetEndCapStyle(style BufCapStyle) *BufferParams
- func (p *BufferParams) SetJoinStyle(style BufJoinStyle) *BufferParams
- func (p *BufferParams) SetMitreLimit(mitreLimit float64) *BufferParams
- func (p *BufferParams) SetQuadrantSegments(quadSegs int) *BufferParams
- func (p *BufferParams) SetSingleSided(singleSided bool) *BufferParams
- type Context
- func (c *Context) Clone(g *Geom) *Geom
- func (c *Context) NewBufferParams() *BufferParams
- func (c *Context) NewCollection(typeID TypeID, geoms []*Geom) *Geom
- func (c *Context) NewCoordSeq(size, dims int) *CoordSeq
- func (c *Context) NewCoordSeqFromCoords(coords [][]float64) *CoordSeq
- func (c *Context) NewEmptyCollection(typeID TypeID) *Geom
- func (c *Context) NewEmptyLineString() *Geom
- func (c *Context) NewEmptyPoint() *Geom
- func (c *Context) NewEmptyPolygon() *Geom
- func (c *Context) NewGeomFromBounds(minX, minY, maxX, maxY float64) *Geom
- func (c *Context) NewGeomFromGeoJSON(geoJSON string) (*Geom, error)
- func (c *Context) NewGeomFromWKB(wkb []byte) (*Geom, error)
- func (c *Context) NewGeomFromWKT(wkt string) (*Geom, error)
- func (c *Context) NewLineString(coords [][]float64) *Geom
- func (c *Context) NewLinearRing(coords [][]float64) *Geom
- func (c *Context) NewPoint(coord []float64) *Geom
- func (c *Context) NewPointFromXY(x, y float64) *Geom
- func (c *Context) NewPoints(coords [][]float64) []*Geom
- func (c *Context) NewPolygon(coordss [][][]float64) *Geom
- func (c *Context) NewSTRtree(nodeCapacity int) *STRtree
- func (c *Context) OrientationIndex(ax, ay, bx, by, px, py float64) int
- func (c *Context) Polygonize(geoms []*Geom) *Geom
- func (c *Context) PolygonizeValid(geoms []*Geom) *Geom
- func (c *Context) RelatePatternMatch(mat, pat string) bool
- func (c *Context) SegmentIntersection(ax0, ay0, ax1, ay1, bx0, by0, bx1, by1 float64) (x, y float64, intersection bool)
- type ContextOption
- type CoordSeq
- func (s *CoordSeq) Clone() *CoordSeq
- func (s *CoordSeq) Destroy()
- func (s *CoordSeq) Dimensions() int
- func (s *CoordSeq) IsCCW() bool
- func (s *CoordSeq) Ordinate(idx, dim int) float64
- func (s *CoordSeq) SetOrdinate(idx, dim int, val float64)
- func (s *CoordSeq) SetX(idx int, val float64)
- func (s *CoordSeq) SetY(idx int, val float64)
- func (s *CoordSeq) SetZ(idx int, val float64)
- func (s *CoordSeq) Size() int
- func (s *CoordSeq) ToCoords() [][]float64
- func (s *CoordSeq) X(idx int) float64
- func (s *CoordSeq) Y(idx int) float64
- func (s *CoordSeq) Z(idx int) float64
- type Error
- type Geom
- func Clone(g *Geom) *Geom
- func NewCollection(typeID TypeID, geoms []*Geom) *Geom
- func NewEmptyCollection(typeID TypeID) *Geom
- func NewEmptyLineString() *Geom
- func NewEmptyPoint() *Geom
- func NewEmptyPolygon() *Geom
- func NewGeomFromBounds(minX, minY, maxX, maxY float64) *Geom
- func NewGeomFromGeoJSON(geoJSON string) (*Geom, error)
- func NewGeomFromWKB(wkb []byte) (*Geom, error)
- func NewGeomFromWKT(wkt string) (*Geom, error)
- func NewLineString(coords [][]float64) *Geom
- func NewLinearRing(coords [][]float64) *Geom
- func NewPoint(coord []float64) *Geom
- func NewPointFromXY(x, y float64) *Geom
- func NewPolygon(coordss [][][]float64) *Geom
- func Polygonize(geoms []*Geom) *Geom
- func PolygonizeValid(geoms []*Geom) *Geom
- func (g *Geom) Area() float64
- func (g *Geom) Boundary() *Geom
- func (g *Geom) Bounds() *Box2D
- func (g *Geom) Buffer(width float64, quadsegs int) *Geom
- func (g *Geom) BufferWithParams(bufferParams *BufferParams, width float64) *Geom
- func (g *Geom) BufferWithStyle(width float64, quadsegs int, endCapStyle BufCapStyle, joinStyle BufJoinStyle, ...) *Geom
- func (g *Geom) BuildArea() *Geom
- func (g *Geom) Centroid() *Geom
- func (g *Geom) ClipByBox2D(box2d *Box2D) *Geom
- func (g *Geom) ClipByRect(minX float64, minY float64, maxX float64, maxY float64) *Geom
- func (g *Geom) Clone() *Geom
- func (g *Geom) ConcaveHull(ratio float64, allowHoles uint) *Geom
- func (g *Geom) ConcaveHullByLength(ratio float64, allowHoles uint) *Geom
- func (g *Geom) ConstrainedDelaunayTriangulation() *Geom
- func (g *Geom) Contains(other *Geom) bool
- func (g *Geom) ConvexHull() *Geom
- func (g *Geom) CoordSeq() *CoordSeq
- func (g *Geom) CoverageUnion() *Geom
- func (g *Geom) CoveredBy(other *Geom) bool
- func (g *Geom) Covers(other *Geom) bool
- func (g *Geom) Crosses(other *Geom) bool
- func (g *Geom) Densify(tolerance float64) *Geom
- func (g *Geom) Destroy()
- func (g *Geom) Difference(other *Geom) *Geom
- func (g *Geom) DifferencePrec(other *Geom, gridSize float64) *Geom
- func (g *Geom) Disjoint(other *Geom) bool
- func (g *Geom) DisjointSubsetUnion() *Geom
- func (g *Geom) Distance(other *Geom) float64
- func (g *Geom) DistanceIndexed(other *Geom) float64
- func (g *Geom) DistanceWithin(other *Geom, dist float64) bool
- func (g *Geom) EndPoint() *Geom
- func (g *Geom) Envelope() *Geom
- func (g *Geom) Equals(other *Geom) bool
- func (g *Geom) EqualsExact(other *Geom, tolerance float64) bool
- func (g *Geom) ExteriorRing() *Geom
- func (g *Geom) FrechetDistance(other *Geom) float64
- func (g *Geom) FrechetDistanceDensify(other *Geom, densifyFrac float64) float64
- func (g *Geom) Geometry(n int) *Geom
- func (g *Geom) HasZ() bool
- func (g *Geom) HausdorffDistance(other *Geom) float64
- func (g *Geom) HausdorffDistanceDensify(other *Geom, densifyFrac float64) float64
- func (g *Geom) InteriorRing(n int) *Geom
- func (g *Geom) Interpolate(d float64) *Geom
- func (g *Geom) InterpolateNormalized(proportion float64) *Geom
- func (g *Geom) Intersection(other *Geom) *Geom
- func (g *Geom) IntersectionPrec(other *Geom, gridSize float64) *Geom
- func (g *Geom) Intersects(other *Geom) bool
- func (g *Geom) IsClosed() bool
- func (g *Geom) IsEmpty() bool
- func (g *Geom) IsRing() bool
- func (g *Geom) IsSimple() bool
- func (g *Geom) IsValid() bool
- func (g *Geom) IsValidReason() string
- func (g *Geom) LargestEmptyCircle(other *Geom, tolerance float64) *Geom
- func (g *Geom) Length() float64
- func (g *Geom) LineMerge() *Geom
- func (g *Geom) MakeValid() *Geom
- func (g *Geom) MakeValidWithParams(method MakeValidMethod, collapse MakeValidCollapsed) *Geom
- func (g *Geom) MaximumInscribedCircle(tolerance float64) *Geom
- func (g *Geom) MinimumClearance() float64
- func (g *Geom) MinimumClearanceLine() *Geom
- func (g *Geom) MinimumRotatedRectangle() *Geom
- func (g *Geom) MinimumWidth() *Geom
- func (g *Geom) NearestPoints(other *Geom) [][]float64
- func (g *Geom) Node() *Geom
- func (g *Geom) Normalize() *Geom
- func (g *Geom) NumCoordinates() int
- func (g *Geom) NumGeometries() int
- func (g *Geom) NumInteriorRings() int
- func (g *Geom) NumPoints() int
- func (g *Geom) OffsetCurve(width float64, quadsegs int, joinStyle BufJoinStyle, mitreLimit float64) *Geom
- func (g *Geom) Overlaps(other *Geom) bool
- func (g *Geom) Point(n int) *Geom
- func (g *Geom) PointOnSurface() *Geom
- func (g *Geom) PolygonizeFull() (geom, cuts, dangles, invalidRings *Geom)
- func (g *Geom) Precision() float64
- func (g *Geom) Prepare() *PrepGeom
- func (g *Geom) Project(other *Geom) float64
- func (g *Geom) ProjectNormalized(other *Geom) float64
- func (g *Geom) Relate(other *Geom) string
- func (g *Geom) RelateBoundaryNodeRule(other *Geom, bnr RelateBoundaryNodeRule) string
- func (g *Geom) RelatePattern(other *Geom, pat string) bool
- func (g *Geom) Reverse() *Geom
- func (g *Geom) SRID() int
- func (g *Geom) SetPrecision(gridSize float64, flags PrecisionRule) *Geom
- func (g *Geom) SetSRID(srid int) *Geom
- func (g *Geom) SetUserData(userdata uintptr) *Geom
- func (g *Geom) SharedPaths(other *Geom) *Geom
- func (g *Geom) Simplify(tolerance float64) *Geom
- func (g *Geom) Snap(other *Geom, tolerance float64) *Geom
- func (g *Geom) StartPoint() *Geom
- func (g *Geom) String() string
- func (g *Geom) SymDifference(other *Geom) *Geom
- func (g *Geom) SymDifferencePrec(other *Geom, gridSize float64) *Geom
- func (g *Geom) ToEWKBWithSRID() []byte
- func (g *Geom) ToGeoJSON(indent int) string
- func (g *Geom) ToWKB() []byte
- func (g *Geom) ToWKT() string
- func (g *Geom) TopologyPreserveSimplify(tolerance float64) *Geom
- func (g *Geom) Touches(other *Geom) bool
- func (g *Geom) Type() string
- func (g *Geom) TypeID() TypeID
- func (g *Geom) UnaryUnion() *Geom
- func (g *Geom) UnaryUnionPrec(gridSize float64) *Geom
- func (g *Geom) Union(other *Geom) *Geom
- func (g *Geom) UnionPrec(other *Geom, gridSize float64) *Geom
- func (g *Geom) UserData() uintptr
- func (g *Geom) Within(other *Geom) bool
- func (g *Geom) X() float64
- func (g *Geom) Y() float64
- type MakeValidCollapsed
- type MakeValidMethod
- type PrecisionRule
- type PrepGeom
- func (pg *PrepGeom) Contains(g *Geom) bool
- func (pg *PrepGeom) ContainsProperly(g *Geom) bool
- func (pg *PrepGeom) ContainsXY(x, y float64) bool
- func (pg *PrepGeom) CoveredBy(g *Geom) bool
- func (pg *PrepGeom) Covers(g *Geom) bool
- func (pg *PrepGeom) Crosses(g *Geom) bool
- func (pg *PrepGeom) Destroy()
- func (pg *PrepGeom) Disjoint(g *Geom) bool
- func (pg *PrepGeom) DistanceWithin(g *Geom, dist float64) bool
- func (pg *PrepGeom) Intersects(g *Geom) bool
- func (pg *PrepGeom) IntersectsXY(x, y float64) bool
- func (pg *PrepGeom) NearestPoints(g *Geom) *CoordSeq
- func (pg *PrepGeom) Overlaps(g *Geom) bool
- func (pg *PrepGeom) Touches(g *Geom) bool
- func (pg *PrepGeom) Within(g *Geom) bool
- type RelateBoundaryNodeRule
- type STRtree
- func (t *STRtree) Destroy()
- func (t *STRtree) Insert(g *Geom, value any) error
- func (t *STRtree) Iterate(callback func(any))
- func (t *STRtree) Nearest(value any, valueEnvelope *Geom, geomfn func(any) *Geom) any
- func (t *STRtree) Query(g *Geom, callback func(any))
- func (t *STRtree) Remove(g *Geom, value any) bool
- type TypeID
Constants ¶
const ( VersionMajor = C.GEOS_VERSION_MAJOR VersionMinor = C.GEOS_VERSION_MINOR VersionPatch = C.GEOS_VERSION_PATCH )
Version.
Variables ¶
var DefaultContext = NewContext()
DefaultContext is the default context.
Functions ¶
func VersionCompare ¶ added in v0.15.0
VersionCompare returns a negative number if the GEOS version is less than the given major.minor.patch version, zero if it is equal, or a positive number otherwise.
Types ¶
type Box2D ¶ added in v0.17.0
A Box2D is a two-dimensional bounds.
func NewBox2DEmpty ¶ added in v0.17.0
func NewBox2DEmpty() *Box2D
NewBox2DEmpty returns a new empty bounds.
func (*Box2D) ContainsPoint ¶ added in v0.17.0
ContainsPoint returns true if b contains the point at x, y.
func (*Box2D) ContextGeom ¶ added in v0.17.0
ContextGeom returns b as a Geom.
func (*Box2D) Intersects ¶ added in v0.17.0
Intersects returns true if b intersects other.
type Box3D ¶ added in v0.18.0
A Box3D is a three-dimensional bounds.
func NewBox3DEmpty ¶ added in v0.18.0
func NewBox3DEmpty() *Box3D
NewBox3DEmpty returns a new empty bounds.
type BufCapStyle ¶ added in v0.7.0
type BufCapStyle int
const ( BufCapStyleRound BufCapStyle = C.GEOSBUF_CAP_ROUND BufCapStyleFlat BufCapStyle = C.GEOSBUF_CAP_FLAT BufCapStyleSquare BufCapStyle = C.GEOSBUF_CAP_SQUARE )
Buffer cap styles.
type BufJoinStyle ¶ added in v0.7.0
type BufJoinStyle int
const ( BufJoinStyleRound BufJoinStyle = C.GEOSBUF_JOIN_ROUND BufJoinStyleMitre BufJoinStyle = C.GEOSBUF_JOIN_MITRE BufJoinStyleBevel BufJoinStyle = C.GEOSBUF_JOIN_BEVEL )
Buffer join styles.
type BufferParams ¶ added in v0.17.0
type BufferParams struct {
// contains filtered or unexported fields
}
A BufferParams contains parameters for BufferWithParams.
func (*BufferParams) Destroy ¶ added in v0.17.0
func (p *BufferParams) Destroy()
Destroy destroys all resources associated with p.
func (*BufferParams) SetEndCapStyle ¶ added in v0.17.0
func (p *BufferParams) SetEndCapStyle(style BufCapStyle) *BufferParams
SetEndCapStyle sets p's end cap style.
func (*BufferParams) SetJoinStyle ¶ added in v0.17.0
func (p *BufferParams) SetJoinStyle(style BufJoinStyle) *BufferParams
SetJoinStyle sets p's join style.
func (*BufferParams) SetMitreLimit ¶ added in v0.17.0
func (p *BufferParams) SetMitreLimit(mitreLimit float64) *BufferParams
SetMitreLimit sets p's mitre limit.
func (*BufferParams) SetQuadrantSegments ¶ added in v0.17.0
func (p *BufferParams) SetQuadrantSegments(quadSegs int) *BufferParams
SetQuadrantSegments sets the number of segments to stroke each quadrant of circular arcs.
func (*BufferParams) SetSingleSided ¶ added in v0.17.0
func (p *BufferParams) SetSingleSided(singleSided bool) *BufferParams
SetSingleSided sets whether the computed buffer should be single sided.
type Context ¶
A Context is a context.
func NewContext ¶
func NewContext(options ...ContextOption) *Context
NewContext returns a new Context.
func (*Context) NewBufferParams ¶ added in v0.17.0
func (c *Context) NewBufferParams() *BufferParams
NewBufferParams returns a new BufferParams.
func (*Context) NewCollection ¶
NewCollection returns a new collection.
func (*Context) NewCoordSeq ¶
NewCoordSeq returns a new CoordSeq.
func (*Context) NewCoordSeqFromCoords ¶
NewCoordSeqFromCoords returns a new CoordSeq populated with coords.
func (*Context) NewEmptyCollection ¶
NewEmptyCollection returns a new empty collection.
func (*Context) NewEmptyLineString ¶
NewEmptyLineString returns a new empty line string.
func (*Context) NewEmptyPoint ¶
NewEmptyPoint returns a new empty point.
func (*Context) NewEmptyPolygon ¶
NewEmptyPolygon returns a new empty polygon.
func (*Context) NewGeomFromBounds ¶
NewGeomFromBounds returns a new polygon constructed from bounds.
func (*Context) NewGeomFromGeoJSON ¶ added in v0.4.0
NewGeomFromGeoJSON returns a new geometry in JSON format from json.
func (*Context) NewGeomFromWKB ¶
NewGeomFromWKB parses a geometry in WKB format from wkb.
func (*Context) NewGeomFromWKT ¶
NewGeomFromWKT parses a geometry in WKT format from wkt.
func (*Context) NewLineString ¶
NewLineString returns a new line string populated with coords.
func (*Context) NewLinearRing ¶
NewLinearRing returns a new linear ring populated with coords.
func (*Context) NewPointFromXY ¶ added in v0.13.0
NewPointFromXY returns a new point with a x and y.
func (*Context) NewPoints ¶ added in v0.3.0
NewPoints returns a new slice of points populated from coords.
func (*Context) NewPolygon ¶
NewPolygon returns a new point populated with coordss.
func (*Context) NewSTRtree ¶ added in v0.12.0
NewSTRtree returns a new STRtree.
func (*Context) OrientationIndex ¶ added in v0.13.0
OrientationIndex returns the orientation index from A to B and then to P.
func (*Context) Polygonize ¶ added in v0.9.0
Polygonize returns a set of geometries which contains linework that represents the edges of a planar graph.
func (*Context) PolygonizeValid ¶ added in v0.9.0
PolygonizeValid returns a set of polygons which contains linework that represents the edges of a planar graph.
func (*Context) RelatePatternMatch ¶ added in v0.12.0
RelatePatternMatch returns if two DE9IM patterns are consistent.
type ContextOption ¶ added in v0.1.0
type ContextOption func(*Context)
A ContextOption sets an option on a Context.
func WithGeomFinalizeFunc ¶ added in v0.1.0
func WithGeomFinalizeFunc(geomFinalizeFunc func(*Geom)) ContextOption
WithGeomFinalizeFunc sets a function to be called just before a geometry is finalized. This is typically used to log the geometry to help debug geometry leaks.
func WithSTRtreeFinalizeFunc ¶ added in v0.12.0
func WithSTRtreeFinalizeFunc(strTreeFinalizeFunc func(*STRtree)) ContextOption
WithSTRtreeFinalizeFunc sets a function to be called just before an STRtree is finalized. This is typically used to log the STRtree to help debug STRtree leaks.
type CoordSeq ¶
type CoordSeq struct {
// contains filtered or unexported fields
}
A CoordSeq is a coordinate sequence.
func NewCoordSeqFromCoords ¶
NewCoordSeqFromCoords returns a new CoordSeq populated with coords.
func (*CoordSeq) Destroy ¶ added in v0.17.0
func (s *CoordSeq) Destroy()
Destroy destroys s and all resources associated with s.
func (*CoordSeq) Dimensions ¶
Dimensions returns the dimensions of s.
func (*CoordSeq) SetOrdinate ¶
SetOrdinate sets the idx-th dim coordinate of s to val.
type Geom ¶
type Geom struct {
// contains filtered or unexported fields
}
A Geom is a geometry.
func NewCollection ¶
NewCollection returns a new collection.
func NewEmptyCollection ¶
NewEmptyCollection returns a new empty collection.
func NewEmptyLineString ¶
func NewEmptyLineString() *Geom
NewEmptyLineString returns a new empty line string.
func NewGeomFromBounds ¶
NewGeomFromBounds returns a new polygon populated with bounds.
func NewGeomFromGeoJSON ¶ added in v0.4.0
NewGeomFromGeoJSON parses a geometry in GeoJSON format from GeoJSON.
func NewGeomFromWKB ¶
NewGeomFromWKB parses a geometry in WKB format from wkb.
func NewGeomFromWKT ¶
NewGeomFromWKT parses a geometry in WKT format from wkt.
func NewLineString ¶
NewLineString returns a new line string populated with coords.
func NewLinearRing ¶
NewLinearRing returns a new linear ring populated with coords.
func NewPointFromXY ¶ added in v0.13.0
NewPointFromXY returns a new point with x and y.
func NewPolygon ¶
NewPolygon returns a new point populated with coordss.
func Polygonize ¶ added in v0.9.0
Polygonize returns a set of geometries which contains linework that represents the edges of a planar graph.
func PolygonizeValid ¶ added in v0.9.0
PolygonizeValid returns a set of polygons which contains linework that represents the edges of a planar graph.
func (*Geom) BufferWithParams ¶ added in v0.17.0
func (g *Geom) BufferWithParams(bufferParams *BufferParams, width float64) *Geom
BufferWithParams returns g buffered with bufferParams.
func (*Geom) BufferWithStyle ¶ added in v0.7.0
func (g *Geom) BufferWithStyle(width float64, quadsegs int, endCapStyle BufCapStyle, joinStyle BufJoinStyle, mitreLimit float64) *Geom
BufferWithStyle returns a buffer using the provided style parameters.
func (*Geom) BuildArea ¶ added in v0.10.0
BuildArea returns the polygonization using all the linework, assuming that rings contained within rings are empty holes, rather than extra PolygonHoleSimplify.
func (*Geom) ClipByBox2D ¶ added in v0.17.0
func (*Geom) ClipByRect ¶ added in v0.10.0
ClipByRect returns g clipped to a rectangular polygon.
func (*Geom) ConcaveHull ¶ added in v0.7.0
ConcaveHull returns the concave hull of g.
func (*Geom) ConcaveHullByLength ¶ added in v0.14.0
ConcaveHullByLength returns the concave hull of g.
func (*Geom) ConstrainedDelaunayTriangulation ¶ added in v0.13.0
ConstrainedDelaunayTriangulation returns the constrained Delaunay triangulation of the vertices of the g.
func (*Geom) CoverageUnion ¶ added in v0.10.0
CoverageUnion returns the union of g for polygonal inputs that are correctly noded and do not overlap.
func (*Geom) Destroy ¶
func (g *Geom) Destroy()
Destroy destroys g and releases all resources it holds.
func (*Geom) Difference ¶ added in v0.6.0
Difference returns the difference between g and other.
func (*Geom) DifferencePrec ¶ added in v0.6.0
DifferencePrec returns the difference between g and other.
func (*Geom) DisjointSubsetUnion ¶ added in v0.20.1
DisjointSubsetUnion returns the union of all components of a single geometry (optimized for inputs that can be divided into subsets that do not intersect).
func (*Geom) Distance ¶ added in v0.3.0
Distance returns the distance between the closes points on g and other.
func (*Geom) DistanceIndexed ¶ added in v0.5.0
DistanceIndexed returns the distance between g and other, using the indexed facet distance.
func (*Geom) DistanceWithin ¶ added in v0.5.0
DistanceWithin returns whether the distance between g and other is within the given dist.
func (*Geom) EqualsExact ¶
EqualsExact returns true if g equals other exactly.
func (*Geom) ExteriorRing ¶
ExteriorRing returns the exterior ring.
func (*Geom) FrechetDistance ¶ added in v0.5.0
FrechetDistance returns the Fréchet distance between g and other.
func (*Geom) FrechetDistanceDensify ¶ added in v0.5.0
FrechetDistanceDensify returns the Fréchet distance between g and other.
func (*Geom) HausdorffDistance ¶ added in v0.5.0
HausdorffDistance returns the Hausdorff distance between g and other.
func (*Geom) HausdorffDistanceDensify ¶ added in v0.5.0
HausdorffDistanceDensify returns the Hausdorff distance between g and other.
func (*Geom) InteriorRing ¶
InteriorRing returns the nth interior ring.
func (*Geom) Interpolate ¶ added in v0.7.0
Interpolate returns a point distance d from the start of g, which must be a linestring.
func (*Geom) InterpolateNormalized ¶ added in v0.7.0
InterpolateNormalized returns the point that is at proportion from the start.
func (*Geom) Intersection ¶
Intersection returns the intersection of g and other.
func (*Geom) IntersectionPrec ¶ added in v0.7.0
IntersectionPrec returns the intersection of g and other.
func (*Geom) Intersects ¶
Intersects returns true if g intersects other.
func (*Geom) IsValidReason ¶
IsValidReason returns the reason that g is invalid.
func (*Geom) LargestEmptyCircle ¶ added in v0.13.0
LargestEmptyCircle returns the largest empty circle for g, up to a specified tolerance.
func (*Geom) LineMerge ¶ added in v0.13.0
LineMerge returns a set of fully noded LineStrings, removing any cardinality 2 nodes in the linework.
func (*Geom) MakeValid ¶ added in v0.8.0
MakeValid repairs an invalid geometry, returning a valid output.
func (*Geom) MakeValidWithParams ¶ added in v0.14.0
func (g *Geom) MakeValidWithParams(method MakeValidMethod, collapse MakeValidCollapsed) *Geom
MakeValidWithParams returns a new valid geometry using the MakeValidMethods and MakeValidCollapsed parameters.
func (*Geom) MaximumInscribedCircle ¶ added in v0.7.0
MaximumInscribedCircle returns the maximum inscribed circle of g up to the the given tolerance.
func (*Geom) MinimumClearance ¶ added in v0.13.0
MinimumClearance returns the minimum clearance of g.
func (*Geom) MinimumClearanceLine ¶ added in v0.13.0
MinimumClearanceLine returns a LineString whose endpoints define the minimum clearance of g.
func (*Geom) MinimumRotatedRectangle ¶ added in v0.7.0
MinimumRotatedRectangle returns the minimum rotated rectangle enclosing g.
func (*Geom) MinimumWidth ¶ added in v0.4.0
MinimumWidth returns a linestring geometry which represents the minimum diameter of g.
func (*Geom) NearestPoints ¶ added in v0.3.0
NearestPoints returns the nearest coordinates of g and other. If the nearest coordinates do not exist (e.g., when either geom is empty), it returns nil.
func (*Geom) Node ¶ added in v0.10.0
Node returns a new geometry in which no lines cross each other, and all touching occurs at endpoints.
func (*Geom) NumCoordinates ¶ added in v0.13.0
NumCoordinates returns the number of coordinates in g.
func (*Geom) NumGeometries ¶
NumGeometries returns the number of geometries in g.
func (*Geom) NumInteriorRings ¶
NumInteriorRings returns the number of interior rings in g.
func (*Geom) OffsetCurve ¶ added in v0.7.0
func (g *Geom) OffsetCurve(width float64, quadsegs int, joinStyle BufJoinStyle, mitreLimit float64) *Geom
OffsetCurve returns the offset curve line(s) of g.
func (*Geom) PointOnSurface ¶ added in v0.13.0
PointOnSurface returns a point that is inside the boundary of a polygonal geometry.
func (*Geom) PolygonizeFull ¶ added in v0.9.0
PolygonizeFull returns a set of geometries which contains linework that represents the edge of a planar graph.
func (*Geom) Project ¶ added in v0.11.0
Project returns the distance of other(a point) projected onto g(a line) from the start of the line.
func (*Geom) ProjectNormalized ¶ added in v0.11.0
ProjectNormalized returns the proportional distance of other(a point) projected onto g(a line) from the start of the line. For example, a point that projects to the middle of a line would be return 0.5.
func (*Geom) RelateBoundaryNodeRule ¶ added in v0.12.0
func (g *Geom) RelateBoundaryNodeRule(other *Geom, bnr RelateBoundaryNodeRule) string
RelateBoundaryNodeRule returns the DE9IM pattern for g and other.
func (*Geom) RelatePattern ¶ added in v0.12.0
RelatePattern returns if the DE9IM pattern for g and other matches pat.
func (*Geom) SetPrecision ¶ added in v0.8.0
func (g *Geom) SetPrecision(gridSize float64, flags PrecisionRule) *Geom
SetPrecision changes the coordinate precision of g.
func (*Geom) SetUserData ¶ added in v0.10.0
SetUserData sets g's userdata and returns g.
func (*Geom) SharedPaths ¶ added in v0.10.0
SharedPaths returns the paths shared between g and other, which must be lineal geometries.
func (*Geom) Snap ¶ added in v0.13.0
Snap returns a geometry with the vertices and segments of g snapped to other within the given tolerance.
func (*Geom) StartPoint ¶ added in v0.13.0
StartPoint returns the first point of a LineString.
func (*Geom) SymDifference ¶ added in v0.7.0
SymDifference returns the symmetric difference between g and other.
func (*Geom) SymDifferencePrec ¶ added in v0.10.0
SymDifferencePrec returns the symmetric difference between g and other.
func (*Geom) ToEWKBWithSRID ¶ added in v0.16.0
ToEWKBWithSRID returns g in Extended WKB format with its SRID.
func (*Geom) TopologyPreserveSimplify ¶ added in v0.8.0
TopologyPreserveSimplify returns a simplified geometry preserving topology.
func (*Geom) UnaryUnion ¶ added in v0.4.0
UnaryUnion returns the union of all components of a single geometry.
func (*Geom) UnaryUnionPrec ¶ added in v0.10.0
UnaryUnionPrec returns the union of all components of a single geometry.
type MakeValidCollapsed ¶ added in v0.14.0
type MakeValidCollapsed int
const ( MakeValidDiscardCollapsed MakeValidCollapsed = 0 MakeValidKeepCollapsed MakeValidCollapsed = 1 )
MakeValidMethods.
type MakeValidMethod ¶ added in v0.14.0
type MakeValidMethod int
const ( MakeValidLinework MakeValidMethod = C.GEOS_MAKE_VALID_LINEWORK MakeValidStructure MakeValidMethod = C.GEOS_MAKE_VALID_STRUCTURE )
MakeValidMethods.
type PrecisionRule ¶ added in v0.8.0
type PrecisionRule int
const ( PrecisionRuleNone PrecisionRule = 0 PrecisionRuleValidOutput PrecisionRule = C.GEOS_PREC_VALID_OUTPUT PrecisionRuleNoTopo PrecisionRule = C.GEOS_PREC_NO_TOPO PrecisionRulePointwise PrecisionRule = C.GEOS_PREC_NO_TOPO PrecisionRuleKeepCollapsed PrecisionRule = C.GEOS_PREC_KEEP_COLLAPSED )
Precision rules.
type PrepGeom ¶
type PrepGeom struct {
// contains filtered or unexported fields
}
A PrepGeom is a prepared geometry.
func (*PrepGeom) ContainsProperly ¶
ContainsProperly returns if pg contains g properly.
func (*PrepGeom) ContainsXY ¶ added in v0.19.0
ContainsXY returns if pg contains the point (x, y).
func (*PrepGeom) Destroy ¶ added in v0.17.0
func (pg *PrepGeom) Destroy()
Destroy destroys pg and all resources associated with s.
func (*PrepGeom) DistanceWithin ¶ added in v0.19.0
DistanceWithin returns if pg is within dist g.
func (*PrepGeom) Intersects ¶
Intersects returns if pg contains g.
func (*PrepGeom) IntersectsXY ¶ added in v0.19.0
IntersectsXY returns if pg intersects the point at (x, y).
func (*PrepGeom) NearestPoints ¶ added in v0.19.0
NearestPoints returns if pg overlaps g.
type RelateBoundaryNodeRule ¶ added in v0.12.0
type RelateBoundaryNodeRule int
A RelateBoundaryNodeRule is a relate boundary node rule.
const ( RelateBoundaryNodeRuleMod2 RelateBoundaryNodeRule = C.GEOSRELATE_BNR_MOD2 RelateBoundaryNodeRuleOGC RelateBoundaryNodeRule = C.GEOSRELATE_BNR_OGC RelateBoundaryNodeRuleEndpoint RelateBoundaryNodeRule = C.GEOSRELATE_BNR_ENDPOINT RelateBoundaryNodeRuleMultivalentEndpoint RelateBoundaryNodeRule = C.GEOSRELATE_BNR_MULTIVALENT_ENDPOINT RelateBoundaryNodeRuleMonovalentEndpoint RelateBoundaryNodeRule = C.GEOSRELATE_BNR_MONOVALENT_ENDPOINT )
Boundary node rules.
type STRtree ¶ added in v0.12.0
type STRtree struct {
// contains filtered or unexported fields
}
An STRtree is an R-tree spatial index structure for two dimensional data.
func (*STRtree) Destroy ¶ added in v0.12.0
func (t *STRtree) Destroy()
Destroy frees all resources associated with t.
type TypeID ¶ added in v0.7.0
type TypeID int
A TypeID is a geometry type id.
const ( TypeIDPoint TypeID = C.GEOS_POINT TypeIDLineString TypeID = C.GEOS_LINESTRING TypeIDLinearRing TypeID = C.GEOS_LINEARRING TypeIDPolygon TypeID = C.GEOS_POLYGON TypeIDMultiPoint TypeID = C.GEOS_MULTIPOINT TypeIDMultiLineString TypeID = C.GEOS_MULTILINESTRING TypeIDMultiPolygon TypeID = C.GEOS_MULTIPOLYGON TypeIDGeometryCollection TypeID = C.GEOS_GEOMETRYCOLLECTION )
Geometry type ids.