geos

package module
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Oct 8, 2024 License: MIT Imports: 7 Imported by: 0

README

go-geos

PkgGoDev

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, and STRtree 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 and database/sql.Scanner (WKB) for PostGIS database integration.
    • encoding/json.Marshaler and encoding/json.Unmarshaler (GeoJSON).
    • encoding/xml.Marshaler (KML).
    • encoding.BinaryMarshaler and encoding.BinaryUnmarshaler (WKB).
    • encoding.TextMarshaler and encoding.TextUnmarshaler (WKT).
    • encoding/gob.GobEncoder and encoding/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 one geos.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.

License

MIT

Documentation

Overview

Package geos provides an interface to GEOS. See https://trac.osgeo.org/geos/.

Index

Constants

View Source
const (
	VersionMajor = C.GEOS_VERSION_MAJOR
	VersionMinor = C.GEOS_VERSION_MINOR
	VersionPatch = C.GEOS_VERSION_PATCH
)

Version.

Variables

View Source
var DefaultContext = NewContext()

DefaultContext is the default context.

Functions

func VersionCompare

func VersionCompare(major, minor, patch int) int

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

type Box2D struct {
	MinX float64
	MinY float64
	MaxX float64
	MaxY float64
}

A Box2D is a two-dimensional bounds.

func NewBox2D

func NewBox2D(minX, minY, maxX, maxY float64) *Box2D

NewBox2D returns a new bounds.

func NewBox2DEmpty

func NewBox2DEmpty() *Box2D

NewBox2DEmpty returns a new empty bounds.

func (*Box2D) Contains

func (b *Box2D) Contains(other *Box2D) bool

Contains returns true if b contains other.

func (*Box2D) ContainsPoint

func (b *Box2D) ContainsPoint(x, y float64) bool

ContainsPoint returns true if b contains the point at x, y.

func (*Box2D) ContextGeom

func (b *Box2D) ContextGeom(context *Context) *Geom

ContextGeom returns b as a Geom.

func (*Box2D) Equals

func (b *Box2D) Equals(other *Box2D) bool

Equals returns true if b equals other.

func (*Box2D) Geom

func (b *Box2D) Geom() *Geom

Geom returns b as a Geom.

func (*Box2D) Height

func (b *Box2D) Height() float64

Height returns the height of b.

func (*Box2D) Intersects

func (b *Box2D) Intersects(other *Box2D) bool

Intersects returns true if b intersects other.

func (*Box2D) IsEmpty

func (b *Box2D) IsEmpty() bool

IsEmpty returns true if b is empty.

func (*Box2D) IsPoint

func (b *Box2D) IsPoint() bool

IsPoint returns true if b is a point.

func (*Box2D) String

func (b *Box2D) String() string

func (*Box2D) Width

func (b *Box2D) Width() float64

Width returns the width of b.

type Box3D

type Box3D struct {
	MinX float64
	MinY float64
	MinZ float64
	MaxX float64
	MaxY float64
	MaxZ float64
}

A Box3D is a three-dimensional bounds.

func NewBox3D

func NewBox3D(minX, minY, minZ, maxX, maxY, maxZ float64) *Box3D

NewBox3D returns a new bounds.

func NewBox3DEmpty

func NewBox3DEmpty() *Box3D

NewBox3DEmpty returns a new empty bounds.

func (*Box3D) String

func (b *Box3D) String() string

type BufCapStyle

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

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

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

A BufferParams contains parameters for BufferWithParams.

func (*BufferParams) Destroy

func (p *BufferParams) Destroy()

Destroy destroys all resources associated with p.

func (*BufferParams) SetEndCapStyle

func (p *BufferParams) SetEndCapStyle(style BufCapStyle) *BufferParams

SetEndCapStyle sets p's end cap style.

func (*BufferParams) SetJoinStyle

func (p *BufferParams) SetJoinStyle(style BufJoinStyle) *BufferParams

SetJoinStyle sets p's join style.

func (*BufferParams) SetMitreLimit

func (p *BufferParams) SetMitreLimit(mitreLimit float64) *BufferParams

SetMitreLimit sets p's mitre limit.

func (*BufferParams) SetQuadrantSegments

func (p *BufferParams) SetQuadrantSegments(quadSegs int) *BufferParams

SetQuadrantSegments sets the number of segments to stroke each quadrant of circular arcs.

func (*BufferParams) SetSingleSided

func (p *BufferParams) SetSingleSided(singleSided bool) *BufferParams

SetSingleSided sets whether the computed buffer should be single sided.

type Context

type Context struct {
	sync.Mutex
	// contains filtered or unexported fields
}

A Context is a context.

func NewContext

func NewContext(options ...ContextOption) *Context

NewContext returns a new Context.

func (*Context) Clone

func (c *Context) Clone(g *Geom) *Geom

Clone clones g into c.

func (*Context) NewBufferParams

func (c *Context) NewBufferParams() *BufferParams

NewBufferParams returns a new BufferParams.

func (*Context) NewCollection

func (c *Context) NewCollection(typeID TypeID, geoms []*Geom) *Geom

NewCollection returns a new collection.

func (*Context) NewCoordSeq

func (c *Context) NewCoordSeq(size, dims int) *CoordSeq

NewCoordSeq returns a new CoordSeq.

func (*Context) NewCoordSeqFromCoords

func (c *Context) NewCoordSeqFromCoords(coords [][]float64) *CoordSeq

NewCoordSeqFromCoords returns a new CoordSeq populated with coords.

func (*Context) NewEmptyCollection

func (c *Context) NewEmptyCollection(typeID TypeID) *Geom

NewEmptyCollection returns a new empty collection.

func (*Context) NewEmptyLineString

func (c *Context) NewEmptyLineString() *Geom

NewEmptyLineString returns a new empty line string.

func (*Context) NewEmptyPoint

func (c *Context) NewEmptyPoint() *Geom

NewEmptyPoint returns a new empty point.

func (*Context) NewEmptyPolygon

func (c *Context) NewEmptyPolygon() *Geom

NewEmptyPolygon returns a new empty polygon.

func (*Context) NewGeomFromBounds

func (c *Context) NewGeomFromBounds(minX, minY, maxX, maxY float64) *Geom

NewGeomFromBounds returns a new polygon constructed from bounds.

func (*Context) NewGeomFromGeoJSON

func (c *Context) NewGeomFromGeoJSON(geoJSON string) (*Geom, error)

NewGeomFromGeoJSON returns a new geometry in JSON format from json.

func (*Context) NewGeomFromWKB

func (c *Context) NewGeomFromWKB(wkb []byte) (*Geom, error)

NewGeomFromWKB parses a geometry in WKB format from wkb.

func (*Context) NewGeomFromWKT

func (c *Context) NewGeomFromWKT(wkt string) (*Geom, error)

NewGeomFromWKT parses a geometry in WKT format from wkt.

func (*Context) NewLineString

func (c *Context) NewLineString(coords [][]float64) *Geom

NewLineString returns a new line string populated with coords.

func (*Context) NewLinearRing

func (c *Context) NewLinearRing(coords [][]float64) *Geom

NewLinearRing returns a new linear ring populated with coords.

func (*Context) NewPoint

func (c *Context) NewPoint(coord []float64) *Geom

NewPoint returns a new point populated with coord.

func (*Context) NewPointFromXY

func (c *Context) NewPointFromXY(x, y float64) *Geom

NewPointFromXY returns a new point with a x and y.

func (*Context) NewPoints

func (c *Context) NewPoints(coords [][]float64) []*Geom

NewPoints returns a new slice of points populated from coords.

func (*Context) NewPolygon

func (c *Context) NewPolygon(coordss [][][]float64) *Geom

NewPolygon returns a new point populated with coordss.

func (*Context) NewSTRtree

func (c *Context) NewSTRtree(nodeCapacity int) *STRtree

NewSTRtree returns a new STRtree.

func (*Context) OrientationIndex

func (c *Context) OrientationIndex(Ax, Ay, Bx, By, Px, Py float64) int

OrientationIndex returns the orientation index from A to B and then to P.

func (*Context) Polygonize

func (c *Context) Polygonize(geoms []*Geom) *Geom

Polygonize returns a set of geometries which contains linework that represents the edges of a planar graph.

func (*Context) PolygonizeValid

func (c *Context) PolygonizeValid(geoms []*Geom) *Geom

PolygonizeValid returns a set of polygons which contains linework that represents the edges of a planar graph.

func (*Context) RelatePatternMatch

func (c *Context) RelatePatternMatch(mat, pat string) bool

RelatePatternMatch returns if two DE9IM patterns are consistent.

func (*Context) SegmentIntersection

func (c *Context) SegmentIntersection(ax0, ay0, ax1, ay1, bx0, by0, bx1, by1 float64) (float64, float64, bool)

SegmentIntersection returns the coordinate where two lines intersect.

type ContextOption

type ContextOption func(*Context)

A ContextOption sets an option on a Context.

func WithGeomFinalizeFunc

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

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 NewCoordSeq

func NewCoordSeq(size, dims int) *CoordSeq

NewCoordSeq returns a new CoordSeq.

func NewCoordSeqFromCoords

func NewCoordSeqFromCoords(coords [][]float64) *CoordSeq

NewCoordSeqFromCoords returns a new CoordSeq populated with coords.

func (*CoordSeq) Clone

func (s *CoordSeq) Clone() *CoordSeq

Clone returns a clone of s.

func (*CoordSeq) Destroy

func (s *CoordSeq) Destroy()

Destroy destroys s and all resources associated with s.

func (*CoordSeq) Dimensions

func (s *CoordSeq) Dimensions() int

Dimensions returns the dimensions of s.

func (*CoordSeq) IsCCW

func (s *CoordSeq) IsCCW() bool

IsCCW returns if s is counter-clockwise.

func (*CoordSeq) Ordinate

func (s *CoordSeq) Ordinate(idx, dim int) float64

Ordinate returns the idx-th dim coordinate of s.

func (*CoordSeq) SetOrdinate

func (s *CoordSeq) SetOrdinate(idx, dim int, val float64)

SetOrdinate sets the idx-th dim coordinate of s to val.

func (*CoordSeq) SetX

func (s *CoordSeq) SetX(idx int, val float64)

SetX sets the idx-th X coordinate of s to val.

func (*CoordSeq) SetY

func (s *CoordSeq) SetY(idx int, val float64)

SetY sets the idx-th Y coordinate of s to val.

func (*CoordSeq) SetZ

func (s *CoordSeq) SetZ(idx int, val float64)

SetZ sets the idx-th Z coordinate of s to val.

func (*CoordSeq) Size

func (s *CoordSeq) Size() int

Size returns the size of s.

func (*CoordSeq) ToCoords

func (s *CoordSeq) ToCoords() [][]float64

ToCoords returns s as a [][]float64.

func (*CoordSeq) X

func (s *CoordSeq) X(idx int) float64

X returns the idx-th X coordinate of s.

func (*CoordSeq) Y

func (s *CoordSeq) Y(idx int) float64

Y returns the idx-th Y coordinate of s.

func (*CoordSeq) Z

func (s *CoordSeq) Z(idx int) float64

Z returns the idx-th Z coordinate of s.

type Error

type Error string

An Error is an error returned by GEOS.

func (Error) Error

func (e Error) Error() string

type Geom

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

A Geom is a geometry.

func Clone

func Clone(g *Geom) *Geom

Clone clones g into c.

func NewCollection

func NewCollection(typeID TypeID, geoms []*Geom) *Geom

NewCollection returns a new collection.

func NewEmptyCollection

func NewEmptyCollection(typeID TypeID) *Geom

NewEmptyCollection returns a new empty collection.

func NewEmptyLineString

func NewEmptyLineString() *Geom

NewEmptyLineString returns a new empty line string.

func NewEmptyPoint

func NewEmptyPoint() *Geom

NewEmptyPoint returns a new empty point.

func NewEmptyPolygon

func NewEmptyPolygon() *Geom

NewEmptyPolygon returns a new empty polygon.

func NewGeomFromBounds

func NewGeomFromBounds(minX, minY, maxX, maxY float64) *Geom

NewGeomFromBounds returns a new polygon populated with bounds.

func NewGeomFromGeoJSON

func NewGeomFromGeoJSON(geoJSON string) (*Geom, error)

NewGEOMFromGeoJSON parses a geometry in GeoJSON format from GeoJSON.

func NewGeomFromWKB

func NewGeomFromWKB(wkb []byte) (*Geom, error)

NewGeomFromWKB parses a geometry in WKB format from wkb.

func NewGeomFromWKT

func NewGeomFromWKT(wkt string) (*Geom, error)

NewGeomFromWKT parses a geometry in WKT format from wkt.

func NewLineString

func NewLineString(coords [][]float64) *Geom

NewLineString returns a new line string populated with coords.

func NewLinearRing

func NewLinearRing(coords [][]float64) *Geom

NewLinearRing returns a new linear ring populated with coords.

func NewPoint

func NewPoint(coord []float64) *Geom

NewPoint returns a new point populated with coord.

func NewPointFromXY

func NewPointFromXY(x, y float64) *Geom

NewPointFromXY returns a new point with x and y.

func NewPolygon

func NewPolygon(coordss [][][]float64) *Geom

NewPolygon returns a new point populated with coordss.

func Polygonize

func Polygonize(geoms []*Geom) *Geom

Polygonize returns a set of geometries which contains linework that represents the edges of a planar graph.

func PolygonizeValid

func PolygonizeValid(geoms []*Geom) *Geom

PolygonizeValid returns a set of polygons which contains linework that represents the edges of a planar graph.

func (*Geom) Area

func (g *Geom) Area() float64

Area returns g's area.

func (*Geom) Boundary

func (g *Geom) Boundary() *Geom

Boundary returns the boundary of g.

func (*Geom) Bounds

func (g *Geom) Bounds() *Box2D

Bounds returns g's bounds.

func (*Geom) Buffer

func (g *Geom) Buffer(width float64, quadsegs int) *Geom

Buffer returns g with the given buffer.

func (*Geom) BufferWithParams

func (g *Geom) BufferWithParams(bufferParams *BufferParams, width float64) *Geom

BufferWithParams returns g buffered with bufferParams.

func (*Geom) BufferWithStyle

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

func (g *Geom) BuildArea() *Geom

BuildArea returns the polygonization using all the linework, assuming that rings contained within rings are empty holes, rather than extra PolygonHoleSimplify.

func (*Geom) Centroid

func (g *Geom) Centroid() *Geom

Centroid returns a point at the center of mass of g.

func (*Geom) ClipByBox2D

func (g *Geom) ClipByBox2D(box2d *Box2D) *Geom

func (*Geom) ClipByRect

func (g *Geom) ClipByRect(minX float64, minY float64, maxX float64, maxY float64) *Geom

ClipByRect returns g clipped to a rectangular polygon.

func (*Geom) Clone

func (g *Geom) Clone() *Geom

Clone returns a clone of g.

func (*Geom) ConcaveHull

func (g *Geom) ConcaveHull(ratio float64, allowHoles uint) *Geom

ConcaveHull returns the concave hull of g.

func (*Geom) ConcaveHullByLength

func (g *Geom) ConcaveHullByLength(ratio float64, allowHoles uint) *Geom

ConcaveHullByLength returns the concave hull of g.

func (*Geom) ConstrainedDelaunayTriangulation

func (g *Geom) ConstrainedDelaunayTriangulation() *Geom

ConstrainedDelaunayTriangulation returns the constrained Delaunay triangulation of the vertices of the g.

func (*Geom) Contains

func (g *Geom) Contains(other *Geom) bool

Contains returns true if g contains other.

func (*Geom) ConvexHull

func (g *Geom) ConvexHull() *Geom

ConvexHull returns g's convex hull.

func (*Geom) CoordSeq

func (g *Geom) CoordSeq() *CoordSeq

CoordSeq returns g's coordinate sequence.

func (*Geom) CoverageUnion

func (g *Geom) CoverageUnion() *Geom

CoverageUnion returns the union of g for polygonal inputs that are correctly noded and do not overlap.

func (*Geom) CoveredBy

func (g *Geom) CoveredBy(other *Geom) bool

CoveredBy returns true if g is covered by other.

func (*Geom) Covers

func (g *Geom) Covers(other *Geom) bool

Covers returns true if g covers other.

func (*Geom) Crosses

func (g *Geom) Crosses(other *Geom) bool

Crosses returns true if g crosses other.

func (*Geom) Densify

func (g *Geom) Densify(tolerance float64) *Geom

Densify returns g densified with the given tolerance.

func (*Geom) Destroy

func (g *Geom) Destroy()

Destroy destroys g and releases all resources it holds.

func (*Geom) Difference

func (g *Geom) Difference(other *Geom) *Geom

Difference returns the difference between g and other.

func (*Geom) DifferencePrec

func (g *Geom) DifferencePrec(other *Geom, gridSize float64) *Geom

DifferencePrec returns the difference between g and other.

func (*Geom) Disjoint

func (g *Geom) Disjoint(other *Geom) bool

Disjoint returns true if g is disjoint from other.

func (*Geom) Distance

func (g *Geom) Distance(other *Geom) float64

Distance returns the distance between the closes points on g and other.

func (*Geom) DistanceIndexed

func (g *Geom) DistanceIndexed(other *Geom) float64

DistanceIndexed returns the distance between g and other, using the indexed facet distance.

func (*Geom) DistanceWithin

func (g *Geom) DistanceWithin(other *Geom, dist float64) bool

DistanceWithin returns whether the distance between g and other is within the given dist.

func (*Geom) EndPoint

func (g *Geom) EndPoint() *Geom

EndPoint returns the last point of a LineString.

func (*Geom) Envelope

func (g *Geom) Envelope() *Geom

Envelope returns the envelope of g.

func (*Geom) Equals

func (g *Geom) Equals(other *Geom) bool

Equals returns true if g equals other.

func (*Geom) EqualsExact

func (g *Geom) EqualsExact(other *Geom, tolerance float64) bool

EqualsExact returns true if g equals other exactly.

func (*Geom) ExteriorRing

func (g *Geom) ExteriorRing() *Geom

ExteriorRing returns the exterior ring.

func (*Geom) FrechetDistance

func (g *Geom) FrechetDistance(other *Geom) float64

FrechetDistance returns the Fréchet distance between g and other.

func (*Geom) FrechetDistanceDensify

func (g *Geom) FrechetDistanceDensify(other *Geom, densifyFrac float64) float64

FrechetDistanceDensify returns the Fréchet distance between g and other.

func (*Geom) Geometry

func (g *Geom) Geometry(n int) *Geom

Geometry returns the nth geometry of g.

func (*Geom) HasZ

func (g *Geom) HasZ() bool

HasZ returns if g has Z coordinates.

func (*Geom) HausdorffDistance

func (g *Geom) HausdorffDistance(other *Geom) float64

HausdorffDistance returns the Hausdorff distance between g and other.

func (*Geom) HausdorffDistanceDensify

func (g *Geom) HausdorffDistanceDensify(other *Geom, densifyFrac float64) float64

HausdorffDistanceDensify returns the Hausdorff distance between g and other.

func (*Geom) InteriorRing

func (g *Geom) InteriorRing(n int) *Geom

InteriorRing returns the nth interior ring.

func (*Geom) Interpolate

func (g *Geom) Interpolate(d float64) *Geom

Interpolate returns a point distance d from the start of g, which must be a linestring.

func (*Geom) InterpolateNormalized

func (g *Geom) InterpolateNormalized(proportion float64) *Geom

InterpolateNormalized returns the point that is at proportion from the start.

func (*Geom) Intersection

func (g *Geom) Intersection(other *Geom) *Geom

Intersection returns the intersection of g and other.

func (*Geom) IntersectionPrec

func (g *Geom) IntersectionPrec(other *Geom, gridSize float64) *Geom

IntersectionPrec returns the intersection of g and other.

func (*Geom) Intersects

func (g *Geom) Intersects(other *Geom) bool

Intersects returns true if g intersects other.

func (*Geom) IsClosed

func (g *Geom) IsClosed() bool

IsClosed returns true if g is closed.

func (*Geom) IsEmpty

func (g *Geom) IsEmpty() bool

IsEmpty returns true if g is empty.

func (*Geom) IsRing

func (g *Geom) IsRing() bool

IsRing returns true if g is a ring.

func (*Geom) IsSimple

func (g *Geom) IsSimple() bool

IsSimple returns true if g is simple.

func (*Geom) IsValid

func (g *Geom) IsValid() bool

IsValid returns true if g is valid.

func (*Geom) IsValidReason

func (g *Geom) IsValidReason() string

IsValidReason returns the reason that g is invalid.

func (*Geom) LargestEmptyCircle

func (g *Geom) LargestEmptyCircle(other *Geom, tolerance float64) *Geom

LargestEmptyCircle returns the largest empty circle for g, up to a specified tolerance.

func (*Geom) Length

func (g *Geom) Length() float64

Length returns g's length.

func (*Geom) LineMerge

func (g *Geom) LineMerge() *Geom

LineMerge returns a set of fully noded LineStrings, removing any cardinality 2 nodes in the linework.

func (*Geom) MakeValid

func (g *Geom) MakeValid() *Geom

MakeValid repairs an invalid geometry, returning a valid output.

func (*Geom) MakeValidWithParams

func (g *Geom) MakeValidWithParams(method MakeValidMethod, collapse MakeValidCollapsed) *Geom

MakeValidWithParams returns a new valid geometry using the MakeValidMethods and MakeValidCollapsed parameters.

func (*Geom) MaximumInscribedCircle

func (g *Geom) MaximumInscribedCircle(tolerance float64) *Geom

MaximumInscribedCircle returns the maximum inscribed circle of g up to the the given tolerance.

func (*Geom) MinimumClearance

func (g *Geom) MinimumClearance() float64

MinimumClearance returns the minimum clearance of g.

func (*Geom) MinimumClearanceLine

func (g *Geom) MinimumClearanceLine() *Geom

MinimumClearanceLine returns a LineString whose endpoints define the minimum clearance of g.

func (*Geom) MinimumRotatedRectangle

func (g *Geom) MinimumRotatedRectangle() *Geom

MinimumRotatedRectangle returns the minimum rotated rectangle enclosing g.

func (*Geom) MinimumWidth

func (g *Geom) MinimumWidth() *Geom

MinimumWidth returns a linestring geometry which represents the minimum diameter of g.

func (*Geom) NearestPoints

func (g *Geom) NearestPoints(other *Geom) [][]float64

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

func (g *Geom) Node() *Geom

Node returns a new geometry in which no lines cross each other, and all touching occurs at endpoints.

func (*Geom) Normalize

func (g *Geom) Normalize() *Geom

func (*Geom) NumCoordinates

func (g *Geom) NumCoordinates() int

NumCoordinates returns the number of coordinates in g.

func (*Geom) NumGeometries

func (g *Geom) NumGeometries() int

NumGeometries returns the number of geometries in g.

func (*Geom) NumInteriorRings

func (g *Geom) NumInteriorRings() int

NumInteriorRings returns the number of interior rings in g.

func (*Geom) NumPoints

func (g *Geom) NumPoints() int

NumPoints returns the number of points in g.

func (*Geom) OffsetCurve

func (g *Geom) OffsetCurve(width float64, quadsegs int, joinStyle BufJoinStyle, mitreLimit float64) *Geom

OffsetCurve returns the offset curve line(s) of g.

func (*Geom) Overlaps

func (g *Geom) Overlaps(other *Geom) bool

Overlaps returns true if g overlaps other.

func (*Geom) Point

func (g *Geom) Point(n int) *Geom

Point returns the g's nth point.

func (*Geom) PointOnSurface

func (g *Geom) PointOnSurface() *Geom

PointOnSurface returns a point that is inside the boundary of a polygonal geometry.

func (*Geom) PolygonizeFull

func (g *Geom) PolygonizeFull() (geom, cuts, dangles, invalidRings *Geom)

PolygonizeFull returns a set of geometries which contains linework that represents the edge of a planar graph.

func (*Geom) Precision

func (g *Geom) Precision() float64

Precision returns g's precision.

func (*Geom) Prepare

func (g *Geom) Prepare() *PrepGeom

Prepare prepares g.

func (*Geom) Project

func (g *Geom) Project(other *Geom) float64

Project returns the distance of other(a point) projected onto g(a line) from the start of the line.

func (*Geom) ProjectNormalized

func (g *Geom) ProjectNormalized(other *Geom) float64

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

func (g *Geom) Relate(other *Geom) string

Relate returns the DE9IM pattern for g and other.

func (*Geom) RelateBoundaryNodeRule

func (g *Geom) RelateBoundaryNodeRule(other *Geom, bnr RelateBoundaryNodeRule) string

RelateBoundaryNodeRule returns the DE9IM pattern for g and other.

func (*Geom) RelatePattern

func (g *Geom) RelatePattern(other *Geom, pat string) bool

RelatePattern returns if the DE9IM pattern for g and other matches pat.

func (*Geom) Reverse

func (g *Geom) Reverse() *Geom

Reverse returns g with sequence orders reversed.

func (*Geom) SRID

func (g *Geom) SRID() int

SRID returns g's SRID.

func (*Geom) SetPrecision

func (g *Geom) SetPrecision(gridSize float64, flags PrecisionRule) *Geom

SetPrecision changes the coordinate precision of g.

func (*Geom) SetSRID

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

SetSRID sets g's SRID to srid.

func (*Geom) SetUserData

func (g *Geom) SetUserData(userdata uintptr) *Geom

SetUserData sets g's userdata and returns g.

func (*Geom) SharedPaths

func (g *Geom) SharedPaths(other *Geom) *Geom

SharedPaths returns the paths shared between g and other, which must be lineal geometries.

func (*Geom) Simplify

func (g *Geom) Simplify(tolerance float64) *Geom

Simplify returns a simplified geometry.

func (*Geom) Snap

func (g *Geom) Snap(other *Geom, tolerance float64) *Geom

Snap returns a geometry with the vertices and segments of g snapped to other within the given tolerance.

func (*Geom) StartPoint

func (g *Geom) StartPoint() *Geom

StartPoint returns the first point of a LineString.

func (*Geom) String

func (g *Geom) String() string

String returns g in WKT format.

func (*Geom) SymDifference

func (g *Geom) SymDifference(other *Geom) *Geom

SymDifference returns the symmetric difference between g and other.

func (*Geom) SymDifferencePrec

func (g *Geom) SymDifferencePrec(other *Geom, gridSize float64) *Geom

SymDifferencePrec returns the symmetric difference between g and other.

func (*Geom) ToEWKBWithSRID

func (g *Geom) ToEWKBWithSRID() []byte

ToEWKB returns g in Extended WKB format with its SRID.

func (*Geom) ToGeoJSON

func (g *Geom) ToGeoJSON(indent int) string

ToGeoJSON returns g in GeoJSON format.

func (*Geom) ToWKB

func (g *Geom) ToWKB() []byte

ToWKB returns g in WKB format.

func (*Geom) ToWKT

func (g *Geom) ToWKT() string

ToWKT returns g in WKT format.

func (*Geom) TopologyPreserveSimplify

func (g *Geom) TopologyPreserveSimplify(tolerance float64) *Geom

TopologyPreserveSimplify returns a simplified geometry preserving topology.

func (*Geom) Touches

func (g *Geom) Touches(other *Geom) bool

Touches returns true if g touches other.

func (*Geom) Type

func (g *Geom) Type() string

Type returns g's type.

func (*Geom) TypeID

func (g *Geom) TypeID() TypeID

TypeID returns g's geometry type id.

func (*Geom) UnaryUnion

func (g *Geom) UnaryUnion() *Geom

UnaryUnion returns the union of all components of a single geometry.

func (*Geom) UnaryUnionPrec

func (g *Geom) UnaryUnionPrec(gridSize float64) *Geom

UnaryUnionPrec returns the union of all components of a single geometry.

func (*Geom) Union

func (g *Geom) Union(other *Geom) *Geom

Union returns the union of g and other.

func (*Geom) UnionPrec

func (g *Geom) UnionPrec(other *Geom, gridSize float64) *Geom

UnionPrec returns the union of g and other.

func (*Geom) UserData

func (g *Geom) UserData() uintptr

UserData returns g's userdata.

func (*Geom) Within

func (g *Geom) Within(other *Geom) bool

Within returns true if g is within other.

func (*Geom) X

func (g *Geom) X() float64

X returns g's X coordinate.

func (*Geom) Y

func (g *Geom) Y() float64

Y returns g's Y coordinate.

type MakeValidCollapsed

type MakeValidCollapsed int
const (
	MakeValidDiscardCollapsed MakeValidCollapsed = 0
	MakeValidKeepCollapsed    MakeValidCollapsed = 1
)

MakeValidMethods.

type MakeValidMethod

type MakeValidMethod int
const (
	MakeValidLinework  MakeValidMethod = C.GEOS_MAKE_VALID_LINEWORK
	MakeValidStructure MakeValidMethod = C.GEOS_MAKE_VALID_STRUCTURE
)

MakeValidMethods.

type PrecisionRule

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

func (pg *PrepGeom) Contains(g *Geom) bool

Contains returns if pg contains g.

func (*PrepGeom) ContainsProperly

func (pg *PrepGeom) ContainsProperly(g *Geom) bool

ContainsProperly returns if pg contains g properly.

func (*PrepGeom) CoveredBy

func (pg *PrepGeom) CoveredBy(g *Geom) bool

CoveredBy returns if pg is covered by g.

func (*PrepGeom) Covers

func (pg *PrepGeom) Covers(g *Geom) bool

Covers returns if pg covers g.

func (*PrepGeom) Crosses

func (pg *PrepGeom) Crosses(g *Geom) bool

Crosses returns if pg crosses g.

func (*PrepGeom) Destroy

func (pg *PrepGeom) Destroy()

Destroy destroys pg and all resources associated with s.

func (*PrepGeom) Disjoint

func (pg *PrepGeom) Disjoint(g *Geom) bool

Disjoint returns if pg is disjoint from g.

func (*PrepGeom) DistanceWithin

func (pg *PrepGeom) DistanceWithin(g *Geom, dist float64) bool

DistanceWithin returns if pg is within g.

func (*PrepGeom) Intersects

func (pg *PrepGeom) Intersects(g *Geom) bool

Intersects returns if pg contains g.

func (*PrepGeom) Overlaps

func (pg *PrepGeom) Overlaps(g *Geom) bool

Overlaps returns if pg overlaps g.

func (*PrepGeom) Touches

func (pg *PrepGeom) Touches(g *Geom) bool

Touches returns if pg contains g.

func (*PrepGeom) Within

func (pg *PrepGeom) Within(g *Geom) bool

Within returns if pg is within g.

type RelateBoundaryNodeRule

type RelateBoundaryNodeRule int

A BoundaryNodeRule is a 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

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

An STRtree is an R-tree spatial index structure for two dimensional data.

func (*STRtree) Destroy

func (t *STRtree) Destroy()

Destroy frees all resources associated with t.

func (*STRtree) Insert

func (t *STRtree) Insert(g *Geom, value any) error

Insert inserts value with geometry g.

func (*STRtree) Iterate

func (t *STRtree) Iterate(callback func(any))

Iterate calls f for every value in the t.

func (*STRtree) Nearest

func (t *STRtree) Nearest(value any, valueEnvelope *Geom, geomfn func(any) *Geom) any

Nearest returns the nearest item in t to value.

func (*STRtree) Query

func (t *STRtree) Query(g *Geom, callback func(any))

Query calls f with each value that intersects g.

func (*STRtree) Remove

func (t *STRtree) Remove(g *Geom, value any) bool

Remove removes value with geometry g from t.

type TypeID

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.

Directories

Path Synopsis
examples
internal

Jump to

Keyboard shortcuts

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