route/vendor/github.com/GoRethink/gorethink/query_geospatial.go

171 lines
6.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package gorethink
import (
p "gopkg.in/gorethink/gorethink.v2/ql2"
)
// CircleOpts contains the optional arguments for the Circle term.
type CircleOpts struct {
NumVertices interface{} `gorethink:"num_vertices,omitempty"`
GeoSystem interface{} `gorethink:"geo_system,omitempty"`
Unit interface{} `gorethink:"unit,omitempty"`
Fill interface{} `gorethink:"fill,omitempty"`
}
func (o CircleOpts) toMap() map[string]interface{} {
return optArgsToMap(o)
}
// Circle constructs a circular line or polygon. A circle in RethinkDB is
// a polygon or line approximating a circle of a given radius around a given
// center, consisting of a specified number of vertices (default 32).
func Circle(point, radius interface{}, optArgs ...CircleOpts) Term {
opts := map[string]interface{}{}
if len(optArgs) >= 1 {
opts = optArgs[0].toMap()
}
return constructRootTerm("Circle", p.Term_CIRCLE, []interface{}{point, radius}, opts)
}
// DistanceOpts contains the optional arguments for the Distance term.
type DistanceOpts struct {
GeoSystem interface{} `gorethink:"geo_system,omitempty"`
Unit interface{} `gorethink:"unit,omitempty"`
}
func (o DistanceOpts) toMap() map[string]interface{} {
return optArgsToMap(o)
}
// Distance calculates the Haversine distance between two points. At least one
// of the geometry objects specified must be a point.
func (t Term) Distance(point interface{}, optArgs ...DistanceOpts) Term {
opts := map[string]interface{}{}
if len(optArgs) >= 1 {
opts = optArgs[0].toMap()
}
return constructMethodTerm(t, "Distance", p.Term_DISTANCE, []interface{}{point}, opts)
}
// Distance calculates the Haversine distance between two points. At least one
// of the geometry objects specified must be a point.
func Distance(point1, point2 interface{}, optArgs ...DistanceOpts) Term {
opts := map[string]interface{}{}
if len(optArgs) >= 1 {
opts = optArgs[0].toMap()
}
return constructRootTerm("Distance", p.Term_DISTANCE, []interface{}{point1, point2}, opts)
}
// Fill converts a Line object into a Polygon object. If the last point does not
// specify the same coordinates as the first point, polygon will close the
// polygon by connecting them
func (t Term) Fill() Term {
return constructMethodTerm(t, "Fill", p.Term_FILL, []interface{}{}, map[string]interface{}{})
}
// GeoJSON converts a GeoJSON object to a ReQL geometry object.
func GeoJSON(args ...interface{}) Term {
return constructRootTerm("GeoJSON", p.Term_GEOJSON, args, map[string]interface{}{})
}
// ToGeoJSON converts a ReQL geometry object to a GeoJSON object.
func (t Term) ToGeoJSON(args ...interface{}) Term {
return constructMethodTerm(t, "ToGeoJSON", p.Term_TO_GEOJSON, args, map[string]interface{}{})
}
// GetIntersectingOpts contains the optional arguments for the GetIntersecting term.
type GetIntersectingOpts struct {
Index interface{} `gorethink:"index,omitempty"`
}
func (o GetIntersectingOpts) toMap() map[string]interface{} {
return optArgsToMap(o)
}
// GetIntersecting gets all documents where the given geometry object intersects
// the geometry object of the requested geospatial index.
func (t Term) GetIntersecting(args interface{}, optArgs ...GetIntersectingOpts) Term {
opts := map[string]interface{}{}
if len(optArgs) >= 1 {
opts = optArgs[0].toMap()
}
return constructMethodTerm(t, "GetIntersecting", p.Term_GET_INTERSECTING, []interface{}{args}, opts)
}
// GetNearestOpts contains the optional arguments for the GetNearest term.
type GetNearestOpts struct {
Index interface{} `gorethink:"index,omitempty"`
MaxResults interface{} `gorethink:"max_results,omitempty"`
MaxDist interface{} `gorethink:"max_dist,omitempty"`
Unit interface{} `gorethink:"unit,omitempty"`
GeoSystem interface{} `gorethink:"geo_system,omitempty"`
}
func (o GetNearestOpts) toMap() map[string]interface{} {
return optArgsToMap(o)
}
// GetNearest gets all documents where the specified geospatial index is within a
// certain distance of the specified point (default 100 kilometers).
func (t Term) GetNearest(point interface{}, optArgs ...GetNearestOpts) Term {
opts := map[string]interface{}{}
if len(optArgs) >= 1 {
opts = optArgs[0].toMap()
}
return constructMethodTerm(t, "GetNearest", p.Term_GET_NEAREST, []interface{}{point}, opts)
}
// Includes tests whether a geometry object is completely contained within another.
// When applied to a sequence of geometry objects, includes acts as a filter,
// returning a sequence of objects from the sequence that include the argument.
func (t Term) Includes(args ...interface{}) Term {
return constructMethodTerm(t, "Includes", p.Term_INCLUDES, args, map[string]interface{}{})
}
// Intersects tests whether two geometry objects intersect with one another.
// When applied to a sequence of geometry objects, intersects acts as a filter,
// returning a sequence of objects from the sequence that intersect with the
// argument.
func (t Term) Intersects(args ...interface{}) Term {
return constructMethodTerm(t, "Intersects", p.Term_INTERSECTS, args, map[string]interface{}{})
}
// Line constructs a geometry object of type Line. The line can be specified in
// one of two ways:
// - Two or more two-item arrays, specifying longitude and latitude numbers of
// the line's vertices;
// - Two or more Point objects specifying the line's vertices.
func Line(args ...interface{}) Term {
return constructRootTerm("Line", p.Term_LINE, args, map[string]interface{}{})
}
// Point constructs a geometry object of type Point. The point is specified by
// two floating point numbers, the longitude (180 to 180) and latitude
// (90 to 90) of the point on a perfect sphere.
func Point(lon, lat interface{}) Term {
return constructRootTerm("Point", p.Term_POINT, []interface{}{lon, lat}, map[string]interface{}{})
}
// Polygon constructs a geometry object of type Polygon. The Polygon can be
// specified in one of two ways:
// - Three or more two-item arrays, specifying longitude and latitude numbers of the polygon's vertices;
// - Three or more Point objects specifying the polygon's vertices.
func Polygon(args ...interface{}) Term {
return constructRootTerm("Polygon", p.Term_POLYGON, args, map[string]interface{}{})
}
// PolygonSub "punches a hole" out of the parent polygon using the polygon passed
// to the function.
// polygon1.PolygonSub(polygon2) -> polygon
// In the example above polygon2 must be completely contained within polygon1
// and must have no holes itself (it must not be the output of polygon_sub itself).
func (t Term) PolygonSub(args ...interface{}) Term {
return constructMethodTerm(t, "PolygonSub", p.Term_POLYGON_SUB, args, map[string]interface{}{})
}