geo package
The geo
package is experimental and subject to change at any time.
The geo
package provides tools for working with geotemporal data, such as
filtering and grouping by geographic location.
Import the experimental/geo
package:
import "experimental/geo"
Geo schema requirements
The Geo package uses the Go implementation of the S2 Geometry Library.
Functions in the geo
package require the following:
- a
s2_cell_id
tag containing an S2 cell ID as a token - a
lat
field containing the latitude in decimal degrees (WGS 84) - a
lon
field containing the longitude in decimal degrees (WGS 84)
Schema recommendations
- a tag that identifies the data source
- a tag that identifies the point type (for example:
start
,stop
,via
) - a field that identifies the track or route (for example:
id
,tid
)
Examples of geotemporal line protocol
taxi,pt=start,s2_cell_id=89c2594 tip=3.75,dist=14.3,lat=40.744614,lon=-73.979424,tid=1572566401123234345i 1572566401947779410
bike,id=biker-007,pt=via,s2_cell_id=89c25dc lat=40.753944,lon=-73.992035,tid=1572588100i 1572567115
S2 Cell IDs
Use latitude and longitude with the s2.CellID.ToToken
endpoint of the S2
Geometry Library to generate s2_cell_id
tags.
Specify your S2 Cell ID level.
Note: To filter more quickly, use higher S2 Cell ID levels, but know that higher levels increase series cardinality.
Language-specific implementations of the S2 Geometry Library provide methods for generating S2 Cell ID tokens. For example:
- Go:
s2.CellID.ToToken()
- Python:
s2sphere.CellId.to_token()
- JavaScript:
s2.cellid.toToken()
Add S2 Cell IDs to existing geotemporal data
Use geo.shapeData()
to add s2_cell_id
tags to data that includes fields
with latitude and longitude values.
//...
|> shapeData(
latField: "latitude",
lonField: "longitude",
level: 10
)
Latitude and longitude values
Flux supports latitude and longitude values in decimal degrees (WGS 84).
Coordinate | Minimum | Maximum |
---|---|---|
Latitude | -90.0 | 90.0 |
Longitude | -180.0 | 180.0 |
Region definitions
Many functions in the Geo package filter data based on geographic region. Define geographic regions using the following shapes:
box
Define a box-shaped region by specifying a record containing the following properties:
- minLat: minimum latitude in decimal degrees (WGS 84) (Float)
- maxLat: maximum latitude in decimal degrees (WGS 84) (Float)
- minLon: minimum longitude in decimal degrees (WGS 84) (Float)
- maxLon: maximum longitude in decimal degrees (WGS 84) (Float)
Example box-shaped region
{
minLat: 40.51757813,
maxLat: 40.86914063,
minLon: -73.65234375,
maxLon: -72.94921875
}
circle
Define a circular region by specifying a record containing the following properties:
- lat: latitude of the circle center in decimal degrees (WGS 84) (Float)
- lon: longitude of the circle center in decimal degrees (WGS 84) (Float)
- radius: radius of the circle in kilometers (km) (Float)
Example circular region
{
lat: 40.69335938,
lon: -73.30078125,
radius: 20.0
}
point
Define a point region by specifying a record containing the following properties:
- lat: latitude in decimal degrees (WGS 84) (Float)
- lon: longitude in decimal degrees (WGS 84) (Float)
Example point region
{
lat: 40.671659,
lon: -73.936631
}
polygon
Define a custom polygon region using a record containing the following properties:
points: points that define the custom polygon (Array of records)
Define each point with a record containing the following properties:
- **lat**: latitude in decimal degrees (WGS 84) _(Float)_ - **lon**: longitude in decimal degrees (WGS 84) _(Float)_
Example polygonal region
{
points: [
{lat: 40.671659, lon: -73.936631},
{lat: 40.706543, lon: -73.749177},
{lat: 40.791333, lon: -73.880327}
]
}
GIS geometry definitions
Many functions in the Geo package manipulate data based on geographic information system (GIS) data. Define GIS geometry using the following:
- Any region type (typically point)
- linestring
linestring
Define a geographic linestring path using a record containing the following properties:
- linestring: string containing comma-separated longitude and latitude
coordinate pairs (
lon lat,
):
{
linestring: "39.7515 14.01433, 38.3527 13.9228, 36.9978 15.08433"
}
Distance units
The geo
package supports the following units of measurement for distance:
m
- meterskm
- kilometers (default)mile
- miles
Define distance units
Use the units
option to define custom units of measurement:
import "experimental/geo"
option geo.units = {distance: "mile"}
Options
option geo.units = {distance: "km"}
units
units
defines the unit of measurement used in geotemporal operations.
Functions
- geo.asTracks()
- geo.filterRows()
- geo.getGrid()
- geo.getLevel()
- geo.gridFilter()
- geo.groupByArea()
- geo.s2CellIDToken()
- geo.s2CellLatLon()
- geo.shapeData()
- geo.ST_Contains()
- geo.ST_Distance()
- geo.ST_DWithin()
- geo.ST_Intersects()
- geo.ST_Length()
- geo.ST_LineString()
- geo.stContains()
- geo.stDistance()
- geo.stLength()
- geo.strictFilter()
- geo.toRows()
- geo.totalDistance()
Was this page helpful?
Thank you for your feedback!
Support and feedback
Thank you for being part of our community! We welcome and encourage your feedback and bug reports for Flux and this documentation. To find support, use the following resources:
Customers with an annual or support contract can contact InfluxData Support.