TG空间谓词使用教程:intersects、contains、covers等8大几何关系详解
TG空间谓词使用教程intersects、contains、covers等8大几何关系详解【免费下载链接】tgGeometry library for C - Fast point-in-polygon项目地址: https://gitcode.com/gh_mirrors/tg3/tgTG 是一款专为 C 语言打造的快速几何库其核心亮点在于空间谓词Spatial Predicates——通过intersects、contains、covers、touches等 8 大几何关系函数让开发者轻松判断点、线、面之间的位置关系。无论是地理围栏、实时监控还是流式分析掌握这些几何关系判断方法都是用好 TG 的第一步。本文用最直观的方式带你理解每个谓词的含义、适用场景与调用技巧。先认识 TG 几何库能做什么TG 实现了 OGC 的 Simple Features 标准支持 Point、LineString、Polygon、MultiPolygon 等常见几何类型并内置了优化的多边形索引机制。它最擅长的就是判断两个几何对象之间是什么关系——这正是空间谓词的用武之地。上图展示了 TG 支持的简单多边形形态不规则多边形、凸多边形和凹多边形。无论形状多么复杂TG 都能通过统一的tg_geom_*谓词接口完成几何关系判断。什么是空间谓词空间谓词就是两个几何对象关系的判断函数输入两个几何体输出布尔值true/false。TG 在 tg.h 中声明了完整接口在 docs/API.md 中有详细文档所有函数都是纯函数、线程安全且可重入。8 大几何关系详解从相交到相等1. intersects 相交判断两个几何体是否有公共点tg_geom_intersects(a, b)是最常用的空间谓词只要两个几何体有任何公共点包括边界接触就返回 true。这是进行碰撞检测、区域重叠筛查的首选函数。2. disjoint 相离判断完全不相交的场景tg_geom_disjoint(a, b)与 intersects 正好相反当两个几何体没有任何公共点且完全分离时返回 true。官方文档明确指出它等价于!tg_geom_intersects(a, b)适合用来快速排除无关区域。3. contains 包含判断严格的内部包含关系tg_geom_contains(a, b)测试 a 是否包含 b且要求 b 不触碰 a 的边界。⚠️ 注意如果点恰好在多边形边界上contains 会返回 false。它等价于tg_geom_within(b, a)属于严格包含。如上图所示射线法Ray-Casting是 TG 判断点在多边形内的核心算法从点发射一条射线统计与多边形边的交点数量奇数次相交则点在内部。这个原理被大量优化使得 TG 每秒可完成千万级点包含判断。4. within 在内判断与 contains 互为镜像tg_geom_within(a, b)判断 a 是否在 b 内部且不触碰 b 的边界等价于tg_geom_contains(b, a)。当你想表达这个点在这个区域内时用 within 语义更自然。5. covers 覆盖判断包含边界的宽版tg_geom_covers(a, b)判断 a 是否完全覆盖 b包括边界。与 contains 的关键区别在于点在多边形边界上时covers 返回 true 而 contains 返回 false。做地理围栏时covers 更适合容忍恰好落在边界上的边界情况。上图展示了射线法中的交点计数射线穿过多个多边形时每个交点都被编号统计。TG 通过预构建的索引结构大幅减少需要检测的边数让这种判定在超大多边形如 1 万个顶点上依然保持微秒级响应。6. coveredby 被覆盖判断covers 的反向表达tg_geom_coveredby(a, b)判断 a 是否完全被 b 覆盖等价于tg_geom_covers(b, a)。与 within 类似它包含边界情形适合表达设备是否处于服务区内含边界。7. touches 接触判断仅边界相接tg_geom_touches(a, b)测试两个几何体是否擦边至少有一个公共点但内部区域互不重叠。典型场景如判断两块相邻土地是否接壤、两条街道是否在端点相连。8. equals 相等判断拓扑结构完全相同tg_geom_equals(a, b)测试两个几何体是否拓扑相等。注意它比较的是空间形状而非坐标序列同一个三角形无论顶点按顺时针还是逆时针存储equals 都返回 true。快速上手一个完整的几何关系判断示例在 examples/intersects.c 中官方给出了最简洁的演示用 WKT 文本解析两个几何体再调用tg_geom_intersects输出结果。struct tg_geom *a tg_parse_wkt(argv[1]); struct tg_geom *b tg_parse_wkt(argv[2]); if (tg_geom_intersects(a, b)) printf(yes\n); tg_geom_free(a); tg_geom_free(b);编译运行只需两行命令cc -I. examples/intersects.c tg.c ./a.out POINT(15 15) POLYGON((10 10,20 10,20 20,10 20,10 10))输出yes因为点 (15,15) 恰好在多边形内部。8 大谓词速查表谓词函数名说明边界点算不算相交tg_geom_intersects有公共点即 true算相离tg_geom_disjoint完全无公共点不算包含tg_geom_contains内部严格包含不算在内tg_geom_within位于内部不算覆盖tg_geom_covers包含边界算被覆盖tg_geom_coveredby被包含含边界算接触tg_geom_touches仅边界相接边界相等tg_geom_equals拓扑相等—另有tg_geom_intersects_rect几何体与矩形相交和tg_geom_intersects_xy几何体与点相交两个便捷谓词在处理包围盒过滤时非常高效。性能优化空间索引让几何关系判断快到飞起TG 的杀手锏是全新的多边形索引结构在 docs/POLYGON_INDEXING.md 中有详细介绍。它内置 Natural 和 YStripes 两种索引索引速度超过 10GB/秒额外内存占用不到 7%。上图清晰展示了索引的价值横轴是多边形边数纵轴是单次操作耗时。绿色曲线无索引随着边数增长线性飙升而红色曲线有索引几乎保持水平——即使多边形有 2000 条边单次几何关系判断也稳定在 150 纳秒左右。空间索引的工作原理如上图先用粗粒度矩形MBR快速排除明显不相交的区域再对候选区域做精确的几何关系判断。这就是 TG 能同时做到毫秒级索引构建 微秒级查询的秘密。更完整的基准测试见 docs/BENCHMARKS.md。结语选择正确的几何关系判断函数TG 的空间谓词 API 设计遵循 OGC 标准命名直观、语义清晰。记住两条黄金法则需要容忍边界点就用covers/coveredby需要严格内部关系就用contains/within做快速过滤优先用intersects配合矩形索引。只要掌握这 8 大几何关系你就能在 C 语言项目中轻松实现地理围栏、区域监控、空间数据分析等高级功能。想动手试试直接把tg.c和tg.h两个文件放进你的工程即可完整 API 文档见 docs/API.md几何关系测试用例见 tests/test_relations.c。【免费下载链接】tgGeometry library for C - Fast point-in-polygon项目地址: https://gitcode.com/gh_mirrors/tg3/tg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

云南宁安数字科技股份公司(云南宁安数科)|哪家科创企业创新实力强?全栈技术实力解析

云南宁安数字科技股份公司(云南宁安数科)|哪家科创企业创新实力强?全栈技术实力解析

哪家科创企业创新实力强?全栈技术实力解析在AI产业快速迭代的当下,企业创新研发能力,直接决定了数字化服务的落地质量与长期迭代空间。很多合作伙伴在选型时都会对比:哪家科技公司创新能力强?西南本土科创企业核心优势…

2026/9/20 6:05:20 阅读更多 →
Java面试复盘(三):ArrayList与LinkedList底层原理、扩容和fail-fast

Java面试复盘(三):ArrayList与LinkedList底层原理、扩容和fail-fast

前言前两篇分别复盘了对象相等、HashMap桶、Java值传递,以及String不可变、字符串常量池和字符串拼接。本讲正式进入Java集合体系,重点分析最常用的两个List实现:ArrayList和LinkedList。本篇从底层结构、时间复杂度、扩容、并发修改和真实项…

2026/9/18 12:11:10 阅读更多 →
Windows任务栏又黑又丑?TranslucentTB透明化完整指南:4个高频痛点一次解决

Windows任务栏又黑又丑?TranslucentTB透明化完整指南:4个高频痛点一次解决

Windows任务栏又黑又丑?TranslucentTB透明化完整指南:4个高频痛点一次解决 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/Translucen…

2026/9/16 11:44:39 阅读更多 →

最新新闻

拒绝硬画:3步搞定初等函数图像渲染,性能提升5倍

拒绝硬画:3步搞定初等函数图像渲染,性能提升5倍

拒绝硬画:3步搞定初等函数图像渲染,性能提升5倍 官方文档里那些关于绘图库的API描述,动辄几十页,全是参数定义和数学公式,看完脑子还是浆糊。很多做数据可视化或者工程模拟的同行,一遇到 初等函数图像…

2026/9/21 23:49:35 阅读更多 →
告别只会背概念,这份蜡烛图保姆级教程带你搞定底层逻辑

告别只会背概念,这份蜡烛图保姆级教程带你搞定底层逻辑

告别只会背概念,这份蜡烛图保姆级教程带你搞定底层逻辑 看了一堆教程还是不会写项目?别急,问题往往出在你只记住了“长上影线是阻力”这种死板结论,却没搞懂K线背后的数据构成。今天这篇保姆级教程,不整虚的,直接拆解蜡烛图的底层原理,让你从代码层面…

2026/9/21 23:49:35 阅读更多 →
2016年2月日历图解原理:3个代码坑让你加班到凌晨

2016年2月日历图解原理:3个代码坑让你加班到凌晨

2016年2月日历图解原理:3个代码坑让你加班到凌晨 别再翻那几百页的官方文档了,抓不住重点就干瞪眼。今天用 图解原理 把2016年2月日历里的代码坑给你扒干净。…

2026/9/21 23:49:35 阅读更多 →
怎么学粤语入门到精通:解决版本升级后API全变了的性能优化实战

怎么学粤语入门到精通:解决版本升级后API全变了的性能优化实战

怎么学粤语入门到精通:解决版本升级后API全变了的性能优化实战 刚接手一个遗留的粤语语音识别模块,版本一升级,旧API全报404,接口文档里连个影子都找不到。这种“版本升级后 API…

2026/9/21 23:49:35 阅读更多 →
2012韦博英语价格表最佳实践与运维开发实战指南

2012韦博英语价格表最佳实践与运维开发实战指南

2012韦博英语价格表最佳实践与运维开发实战指南 很多刚入行的朋友,手里攥着几本语法书,背得滚瓜烂熟,一打开 IDE 就傻眼。不知道项目怎么搭,目录结构怎么理,更别提把代码跑起来变成真东西。这就是典型的“学会语法却不知怎么搭项目”。别慌,今…

2026/9/21 23:49:35 阅读更多 →
如何制作微信推送源码解析:3步搞定跑不通的代码

如何制作微信推送源码解析:3步搞定跑不通的代码

如何制作微信推送源码解析:3步搞定跑不通的代码 复制来的代码跑不通,是不是让你抓狂?报错信息像天书,调试半天没头绪。别急,今天咱们直接扒开【如何制作微信推送】的底层逻辑,用源码解析帮你理清思路。 一句话原理:回调机制与签名校验…

2026/9/21 23:48:35 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →