geo 包
geo
包是实验性的,并且随时可能更改。
geo
包提供了用于处理地理时空数据的工具,例如按地理位置进行过滤和分组。 导入 experimental/geo
包
import "experimental/geo"
Geo 模式要求
Geo 包使用 S2 Geometry Library 的 Go 实现。 geo
包中的函数需要以下内容
- 包含 S2 单元 ID 作为令牌的
s2_cell_id
标签 - 包含以十进制度表示的纬度(WGS 84)的
lat
字段 - 包含以十进制度表示的经度(WGS 84)的
lon
字段
模式建议
- 标识数据源的标签
- 一个标识点类型的标签 (例如:
start
,stop
,via
) - 一个标识轨迹或路线的字段 (例如:
id
,tid
)
地理时序线路协议示例
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 单元格 ID
使用 latitude(纬度)和 longitude(经度)与 S2 Geometry Library 的 s2.CellID.ToToken
端点一起生成 s2_cell_id
标签。 指定你的 S2 单元格 ID 级别。
注意: 要更快地进行过滤,请使用更高的 S2 单元格 ID 级别,但要知道更高的级别会增加 序列基数。
S2 Geometry Library 的特定于语言的实现提供了生成 S2 单元格 ID 令牌的方法。 例如:
- Go:
s2.CellID.ToToken()
- Python:
s2sphere.CellId.to_token()
- JavaScript:
s2.cellid.toToken()
将 S2 单元格 ID 添加到现有的地理时序数据
使用 geo.shapeData()
将 s2_cell_id
标签添加到包含纬度和经度值的字段的数据。
//...
|> shapeData(
latField: "latitude",
lonField: "longitude",
level: 10
)
纬度和经度值
Flux 支持以 十进制度 (WGS 84) 表示的纬度和经度值。
坐标 | 最小值 | 最大值 |
---|---|---|
纬度 | -90.0 | 90.0 |
经度 | -180.0 | 180.0 |
区域定义
Geo 包中的许多函数根据地理区域过滤数据。 使用以下形状定义地理区域
box (矩形)
通过指定一个包含以下属性的记录来定义一个矩形区域
- minLat: 以十进制度 (WGS 84) 表示的最小纬度 (Float)
- maxLat: 以十进制度 (WGS 84) 表示的最大纬度 (Float)
- minLon: 以十进制度 (WGS 84) 表示的最小经度 (Float)
- maxLon: 以十进制度 (WGS 84) 表示的最大经度 (Float)
矩形区域示例
{
minLat: 40.51757813,
maxLat: 40.86914063,
minLon: -73.65234375,
maxLon: -72.94921875
}
circle (圆形)
通过指定一个包含以下属性的记录来定义一个圆形区域
- lat: 圆心的纬度,以十进制度 (WGS 84) 表示 (Float)
- lon: 圆心的经度,以十进制度 (WGS 84) 表示 (Float)
- radius: 圆的半径,以千米 (km) 为单位 (Float)
圆形区域示例
{
lat: 40.69335938,
lon: -73.30078125,
radius: 20.0
}
point (点)
通过指定一个包含以下属性的记录来定义一个点区域
- lat: 纬度,以十进制度 (WGS 84) 表示 (Float)
- lon: 经度,以十进制度 (WGS 84) 表示 (Float)
点区域示例
{
lat: 40.671659,
lon: -73.936631
}
polygon (多边形)
使用包含以下属性的记录定义一个自定义多边形区域
points: 定义自定义多边形的点 (记录数组)
使用包含以下属性的记录定义每个点
- **lat**: latitude in decimal degrees (WGS 84) _(Float)_ - **lon**: longitude in decimal degrees (WGS 84) _(Float)_
多边形区域示例
{
points: [
{lat: 40.671659, lon: -73.936631},
{lat: 40.706543, lon: -73.749177},
{lat: 40.791333, lon: -73.880327}
]
}
GIS 几何定义
Geo 包中的许多函数基于地理信息系统 (GIS) 数据来操作数据。 使用以下内容定义 GIS 几何
- 任何 区域类型 (通常是 点)
- linestring (线串)
linestring (线串)
使用包含以下属性的记录定义地理线串路径
- linestring: 包含以逗号分隔的经度和纬度坐标对的字符串 (
lon lat,
)
{
linestring: "39.7515 14.01433, 38.3527 13.9228, 36.9978 15.08433"
}
距离单位
geo
包支持以下距离测量单位
m
- 米km
- 千米 (默认)mile
- 英里
定义距离单位
使用 units
选项来定义自定义测量单位
import "experimental/geo"
option geo.units = {distance: "mile"}
选项
option geo.units = {distance: "km"}
units
units
定义在地理时序操作中使用的测量单位。
函数
- 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()
此页面是否对您有帮助?
感谢您的反馈!