`import "github.com/cockroachdb/cockroach/pkg/geo/geodist"`

Package geodist finds distances between two geospatial shapes.

- func ShapeDistance(c DistanceCalculator, a Shape, b Shape) (bool, error)
- type DistanceCalculator
- type DistanceUpdater
- type Edge
- type EdgeCrosser
- type LineString
- type LinearRing
- type Point
- type Polygon
- type Shape

ShapeDistance returns the distance between two given shapes. Distance is defined by the DistanceUpdater provided by the interface. It returns whether the function above should return early.

❖

type DistanceCalculator interface { // DistanceUpdater returns the DistanceUpdater for the current set of calculations. DistanceUpdater() DistanceUpdater // NewEdgeCrosser returns a new EdgeCrosser with the given edge initialized to be // the edge to compare against, and the start point to be the start of the first // edge to compare against. NewEdgeCrosser(edge Edge, startPoint Point) EdgeCrosser // PointInLinearRing returns whether the point is inside the given linearRing. PointInLinearRing(point Point, linearRing LinearRing) bool // ClosestPointToEdge returns the closest point to the infinite line denoted by // the edge, and a bool on whether this point lies on the edge segment. ClosestPointToEdge(edge Edge, point Point) (Point, bool) // BoundingBoxIntersects returns whether the bounding boxes of the shapes in // question intersect. BoundingBoxIntersects() bool }

DistanceCalculator contains calculations which allow ShapeDistance to calculate the distance between two shapes.

❖

type DistanceUpdater interface { // Update updates the distance based on two provided points, // returning if the function should return early. Update(a Point, b Point) bool // OnIntersects is called when two shapes intersects. OnIntersects(p Point) bool // Distance returns the distance to return so far. Distance() float64 // IsMaxDistance returns whether the updater is looking for maximum distance. IsMaxDistance() bool // FlipGeometries is called to flip the order of geometries. FlipGeometries() }

DistanceUpdater is a provided hook that has a series of functions that allows the caller to maintain the distance value desired.

Edge is a struct that represents a connection between two points.

❖

type EdgeCrosser interface { // ChainCrossing assumes there is an edge to compare against, and the previous // point `p0` is the start of the next edge. It will then returns whether (p0, p) // intersects with the edge and point of intersection if they intersect. // When complete, point p will become p0. // Desired usage examples: // crosser := NewEdgeCrosser(edge.V0, edge.V1, startingP0) // intersects, _ := crosser.ChainCrossing(p1) // laterIntersects, _ := crosser.ChainCrossing(p2) // intersects |= laterIntersects .... ChainCrossing(p Point) (bool, Point) }

EdgeCrosser is a provided hook that calculates whether edges intersect.

❖

type LineString interface { Edge(i int) Edge NumEdges() int Vertex(i int) Point NumVertexes() int IsShape() IsLineString() }

LineString is an interface that represents a geospatial LineString.

❖

type LinearRing interface { Edge(i int) Edge NumEdges() int Vertex(i int) Point NumVertexes() int IsShape() IsLinearRing() }

LinearRing is an interface that represents a geospatial LinearRing.

Point is a union of the point types used in geometry and geography representation. The interfaces for distance calculation defined below are shared for both representations, and this union helps us avoid heap allocations by doing cheap copy-by-value of points. The code that peers inside a Point knows which of the two fields is populated.

IsShape implements the geodist.Shape interface.

❖

type Polygon interface { LinearRing(i int) LinearRing NumLinearRings() int IsShape() IsPolygon() }

Polygon is an interface that represents a geospatial Polygon.

❖

```
type Shape interface {
IsShape()
}
```

Shape is an interface that represents any Geospatial shape.

Package geodist imports 3 packages (graph) and is imported by 3 packages. Updated 2020-08-12. Refresh now. Tools for package owners.