Tile38: 开源的实时地理空间和地理围栏项目

Tile38 – 开源的实时地理空间和地理围栏项目

Tile38

开源的实时地理空间和地理围栏项目

info项目简介

Tile38是一个开源(MIT许可)的内存地理位置数据存储、空间索引和实时地理围栏服务器。它使用Go语言编写,具有高性能和跨平台兼容性,专为处理实时地理空间数据而设计。

stars主要功能

location_searching 空间索引与搜索
fence 实时地理围栏
memory 内存数据库
save 磁盘持久化
sync 领导者/追随者复制
terminal 完整命令行界面

category支持的对象类型

纬度/经度点
边界框
XYZ瓦片
Geohashes
GeoJSON
QuadKey

public应用场景

gps_fixed 地理围栏
directions_car 车辆管理
my_location 位置跟踪
explore 空间搜索

settings技术特点

speed 高性能
http 多协议支持
code 多种客户端库
storage RESP或JSON响应

cloud_download部署方式

docker
Docker
computer
二进制文件
apple
Homebrew
roaming.gif
Tile38 – 对象类型详解

Tile38 对象类型详解

地理空间数据类型与使用方法

category核心对象类型

place

点 (Point)

表示地球上的一个精确位置,由纬度和经度坐标定义。是最基本的地理对象类型。

SET fleet truck1 POINT 33.5123 -112.2693
crop_square

边界框 (Bounds)

由最小和最大纬度、经度定义的矩形区域,用于表示地理范围。

SET area warehouse BOUNDS 33.462 -112.268 33.491 -112.235
radio_button_unchecked

圆形 (Circle)

由中心点和半径定义的圆形区域,半径单位可以是米、千米、英里或英尺。

SET zone park CIRCLE 33.5123 -112.2693 500
change_history

多边形 (Polygon)

由三个或更多点组成的封闭区域,用于表示不规则形状的地理区域。

SET area district OBJECT {“type”:”Polygon”,”coordinates”:[[[33.51,-112.26],[33.51,-112.27],[33.52,-112.27],[33.52,-112.26],[33.51,-112.26]]]}

map高级对象类型

view_quilt

GeoJSON

支持完整的GeoJSON规范,包括Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection。

SET route line1 OBJECT {“type”:”LineString”,”coordinates”:[[-112.26,33.51],[-112.25,33.52],[-112.24,33.53]]}
grid_on

Geohash

Geohash是一种将地理坐标编码为字符串的方法,用于快速区域查询和索引。

SET area region HASH 9tbn
grid_3x3

QuadKey

微软Bing地图使用的瓦片坐标系统,用于表示地图上的特定区域。

SET area tile TILE 1202 1531 12
timeline

线串 (LineString)

由两个或更多点组成的线段,用于表示路径、道路或边界线。

SET route path1 OBJECT {“type”:”LineString”,”coordinates”:[[-112.26,33.51],[-112.25,33.52],[-112.24,33.53]]}

search空间查询方法

my_location NEARBY – 查找指定半径内的对象
crop_free WITHIN – 查找完全包含在指定区域内的对象
call_merge INTERSECTS – 查找与指定区域相交的对象
screen_search_desktop SCAN – 遍历集合中的所有对象
search SEARCH – 基于条件的高级查询
countertops COUNT – 计算匹配查询的对象数量

Tile38 – 支持的对象类型

Tile38 支持的对象类型

多种地理空间数据格式支持

place

纬度/经度点

最基本的地理对象类型,使用经纬度坐标表示地球上的一个点。支持单个点或点集合。

示例
SET point 1 POINT 33.5123 -112.2693
crop_square

边界框

由两个对角点定义的矩形区域,用于表示地理上的矩形范围。常用于区域搜索和地理围栏。

示例
BOUNDS 33.462 -112.269 33.491 -112.228
grid_on

XYZ瓦片

基于Web墨卡托投影的瓦片坐标系统,使用X. Y、Z三个参数表示地图上的一个瓦片区域。

示例
TILE 877 1648 12
grain

Geohashes

将地理坐标编码为字符串的地理编码系统,精度取决于字符串长度。适合快速区域查询。

示例
GEOHASH 9tbnthxzr
map

GeoJSON

基于JSON的地理空间数据交换格式,支持点、线、多边形等多种几何类型,是地理空间数据的标准格式。

示例
{“type”:”Point”,”coordinates”:[-112.2693,33.5123]}
view_quilt

QuadKey

微软Bing地图使用的瓦片编码系统,将瓦片坐标编码为字符串,支持不同缩放级别的地图瓦片。

示例
QUADKEY 023112

code对象类型使用示例

添加点对象
SET fleet truck1 POINT 33.5123 -112.2693
添加GeoJSON对象
SET area park OBJECT {“type”:”Polygon”,”coordinates”:[[[-112.26,33.48],[-112.24,33.48],[-112.24,33.50],[-112.26,33.50],[-112.26,33.48]]]}
边界框内搜索
SEARCH fleet BOUNDS 33.462 -112.269 33.491 -112.228
Geohash区域搜索
SEARCH fleet GEOHASH 9tbnthxzr

Tile38 – 对象类型详解

Tile38 对象类型详解

支持的地理空间对象类型及其使用方法

place基本地理对象类型

location_on

点 (Point)

由经纬度坐标表示的地理位置点,是最基本的地理对象类型。

SET fleet truck1 POINT 33.5123 -112.2693
车辆位置 兴趣点 设备定位
crop_free

边界框 (Bounds)

由最小和最大经纬度定义的矩形区域,用于表示地理范围。

SET area warehouse BOUNDS 33.462 -112.318 33.562 -112.218
仓库区域 城市边界 搜索范围
radio_button_unchecked

圆形 (Circle)

由中心点和半径定义的圆形区域,单位为米、千米、英里或英尺。

SET area safezone CIRCLE 33.5123 -112.2693 1000
安全区域 服务范围 影响范围
timeline

线串 (Linestring)

由一系列经纬度点连接而成的线段,用于表示路径或边界。

SET route highway1 LINESTRING 33.462 -112.318 33.5123 -112.2693
道路路线 管道线路 边界线

category高级地理对象类型

hexagon

多边形 (Polygon)

由一系列经纬度点定义的封闭区域,可以表示复杂形状的地理区域。

SET area park POLYGON 33.462 -112.318 33.5123 -112.2693 33.482 -112.294
公园区域 行政区划 建筑轮廓
map

GeoJSON

支持标准GeoJSON格式,可以表示各种复杂的地理空间数据结构。

SET area complex OBJECT {“type”:”Polygon”,”coordinates”:[[[33.462,-112.318],[33.5123,-112.2693],[33.482,-112.294]]]}
复杂区域 地理数据交换 GIS集成
grid_on

XYZ瓦片

使用Web墨卡托投影的瓦片坐标系统,常用于地图服务。

SET area tile TILE 5 10 15
地图瓦片 区域查询 可视化
grid_4x4

Quadkeys

微软Bing地图使用的瓦片索引系统,是一种层级网格编码。

SET area quad QUADKEY “02311”
Bing地图集成 层级区域 空间索引

grain空间索引系统

blur_circular

Geohashes

将经纬度编码为字符串的地理编码系统,精度随字符串长度增加。

SET area geo HASH “9tbnwg”
位置编码 区域索引 邻近搜索
extension

对象特性

所有地理对象类型都支持附加字段,可以存储额外的元数据。

SET fleet truck1 POINT 33.5123 -112.2693 FIELD speed 65 FIELD driver “John”
属性存储 数据过滤 状态追踪

search查询与搜索方法

my_location 附近搜索 (NEARBY) – 查找指定范围内的对象
crop_free 内部搜索 (WITHIN) – 查找完全在区域内的对象
compare_arrows 相交搜索 (INTERSECTS) – 查找与区域相交的对象
filter_list 字段过滤 (WHERE) – 基于附加字段筛选对象
sort 结果排序 (ORDERBY) – 按距离或字段值排序
filter_center_focus 结果限制 (LIMIT) – 限制返回结果数量

Tile38 – 地理围栏功能详解

Tile38 地理围栏功能详解

静态地理围栏的创建、监控与事件处理

fence地理围栏概念

gps_fixed

什么是地理围栏

地理围栏是虚拟的地理边界,当移动对象进入或离开这些边界时,系统会触发预设的事件或通知。

notifications_active

工作原理

Tile38持续监控对象位置,当对象与预定义的地理区域产生交互时,触发相应事件并通过Webhook或Pub/Sub发送通知。

category

支持的区域类型

支持所有Tile38地理对象类型作为围栏区域,包括点、边界框、圆形、多边形、GeoJSON、线串等。

settings_applications

触发条件

可设置多种触发条件,如进入、离开、穿越、交叉等,并可根据对象属性进行过滤。

build设置地理围栏

1

创建地理区域

首先使用SET命令创建一个地理区域,作为围栏的基础。

SET safezone warehouse CIRCLE 33.5123 -112.2693 1000
2

设置地理围栏

使用SETCHAN命令创建地理围栏,指定监控的区域和触发条件。

SETCHAN fleet NEARBY safezone 1000 FENCE DETECT enter,exit
3

配置通知方式

设置Webhook或Pub/Sub通道,用于接收地理围栏事件通知。

SETCHAN fleet NEARBY safezone 1000 FENCE DETECT enter,exit COMMANDS “http://example.com/webhook”

event事件类型与触发条件

login进入 (enter)
logout离开 (exit)
compare_arrows穿越 (cross)
swap_horiz交叉 (inside)
swap_vert外部 (outside)
filter_list

事件过滤

可以使用WHERE子句根据对象属性过滤事件,只有满足条件的对象才会触发通知。

SETCHAN fleet NEARBY safezone 1000 FENCE DETECT enter,exit WHERE speed 50
access_time

事件节流

可以使用DURATION参数控制事件通知的频率,避免短时间内收到过多通知。

SETCHAN fleet NEARBY safezone 1000 FENCE DETECT enter,exit DURATION 60

code地理围栏命令

add_circleSETCHAN

创建地理围栏通道,监控指定区域内的对象移动。

deleteDELCHAN

删除已创建的地理围栏通道。

listCHANS

列出所有活动的地理围栏通道。

play_circlePCHAN

通过Pub/Sub订阅地理围栏事件通知。

public实际应用场景

directions_car 车队管理:监控车辆进出仓库或配送区域
security 安全监控:检测人员进入限制区域
pets 宠物追踪:宠物离开安全区域时发送通知
shopping_cart 零售营销:顾客进入商店区域时推送优惠
delivery_dining 外卖配送:骑手到达餐厅或客户位置时通知
school 校园安全:学生进出校园区域时记录

Tile38 – 地理围栏功能详解

Tile38 地理围栏功能详解

静态地理围栏的创建、监控与事件处理

fence地理围栏概念

gps_fixed

什么是地理围栏

地理围栏是虚拟的地理边界,当移动对象进入或离开这些边界时,系统会触发预设的事件或通知。

notifications_active

工作原理

Tile38持续监控对象位置,当对象与预定义的地理区域产生交互时,触发相应事件并通过Webhook或Pub/Sub发送通知。

category

支持的区域类型

支持所有Tile38地理对象类型作为围栏区域,包括点、边界框、圆形、多边形、GeoJSON、线串等。

settings_applications

触发条件

可设置多种触发条件,如进入、离开、穿越、交叉等,并可根据对象属性进行过滤。

build设置地理围栏

1

创建地理区域

首先使用SET命令创建一个地理区域,作为围栏的基础。

SET safezone warehouse CIRCLE 33.5123 -112.2693 1000
2

设置地理围栏

使用SETCHAN命令创建地理围栏,指定监控的区域和触发条件。

SETCHAN fleet NEARBY safezone 1000 FENCE DETECT enter,exit
3

配置通知方式

设置Webhook或Pub/Sub通道,用于接收地理围栏事件通知。

SETCHAN fleet NEARBY safezone 1000 FENCE DETECT enter,exit COMMANDS “http://example.com/webhook”

event事件类型与触发条件

login进入 (enter)
logout离开 (exit)
compare_arrows穿越 (cross)
swap_horiz交叉 (inside)
swap_vert外部 (outside)
filter_list

事件过滤

可以使用WHERE子句根据对象属性过滤事件,只有满足条件的对象才会触发通知。

SETCHAN fleet NEARBY safezone 1000 FENCE DETECT enter,exit WHERE speed 50
access_time

事件节流

可以使用DURATION参数控制事件通知的频率,避免短时间内收到过多通知。

SETCHAN fleet NEARBY safezone 1000 FENCE DETECT enter,exit DURATION 60

code地理围栏命令

add_circleSETCHAN

创建地理围栏通道,监控指定区域内的对象移动。

deleteDELCHAN

删除已创建的地理围栏通道。

listCHANS

列出所有活动的地理围栏通道。

play_circlePCHAN

通过Pub/Sub订阅地理围栏事件通知。

public实际应用场景

directions_car 车队管理:监控车辆进出仓库或配送区域
security 安全监控:检测人员进入限制区域
pets 宠物追踪:宠物离开安全区域时发送通知
shopping_cart 零售营销:顾客进入商店区域时推送优惠
delivery_dining 外卖配送:骑手到达餐厅或客户位置时通知
school 校园安全:学生进出校园区域时记录

Tile38 – 复制功能详解

Tile38 复制功能详解

领导者/追随者复制机制与高可用部署

sync复制机制概述

architecture

领导者/追随者模式

Tile38采用主从复制架构,领导者节点处理所有写操作,追随者节点复制领导者的数据并提供读服务,实现高可用性。

speed

实时同步

领导者节点的所有写操作会实时同步到追随者节点,确保数据一致性,同步延迟在毫秒级别。

security

故障转移

当领导者节点发生故障时,可以手动或自动将追随者节点提升为新的领导者,确保服务连续性。

extension

灵活扩展

支持一个领导者和多个追随者节点,可以根据需求水平扩展读能力,提高系统整体性能。

settings复制配置步骤

1

启动领导者节点

使用默认配置启动Tile38作为领导者节点,监听默认端口9851。

tile38-server
2

启动追随者节点

使用-follow参数启动追随者节点,指定领导者节点的地址和端口。

tile38-server -follow leader-host:9851
3

验证复制状态

使用INFO REPLICATION命令查看复制状态,确认数据同步正常。

INFO REPLICATION

code复制相关命令

infoINFO REPLICATION

查看复制状态信息,包括角色、连接状态、同步延迟等。

settings_ethernetFOLLOWHOST

设置或获取追随者节点连接的领导者主机地址。

swap_horizOFOLLOW

停止追随者模式,使节点成为独立节点。

cachedAOF

管理AOF(Append Only File)持久化,用于数据恢复。

security高可用性与故障转移

health_and_safety 健康检查:定期检查节点状态,及时发现故障
swap_vertical_circle 自动故障转移:领导者故障时自动提升追随者
backup 数据持久化:支持快照和AOF日志确保数据安全
sync_problem 复制恢复:网络中断后自动恢复数据同步

public实际应用案例

directions_car

物流车队管理系统

大型物流公司使用Tile38复制功能部署高可用集群,确保7×24小时不间断跟踪数千辆车辆位置,即使单个节点故障也能保证服务连续性。

delivery_dining

外卖配送平台

外卖平台使用Tile38复制功能在多个数据中心部署节点,实现地理分布式架构,降低延迟,提高骑手位置查询和地理围栏通知的响应速度。

security

安全监控系统

大型活动安保系统使用Tile38复制功能构建高可用地理围栏监控平台,确保在活动期间人员位置监控不中断,保障活动安全。

pets

宠物追踪应用

宠物追踪应用使用Tile38复制功能确保服务高可用,即使在系统维护或故障期间,也能持续监控宠物位置,及时发送漫游地理围栏通知。

tips_and_updates最佳实践

lan 网络隔离:将领导者与追随者部署在不同网络区域
monitor_heart 监控告警:设置复制延迟和节点状态监控告警
storage 资源规划:为追随者节点配置足够的内存和存储
update 定期测试:定期进行故障转移演练,验证恢复流程

发表评论

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网 🐾 DeepracticeX 社区 🐾 老薛主机 🐾 智柴论坛 🐾