小i约球诞生记02:做附近球友匹配时,LBS 能力怎么选
本文是「小i约球诞生记」系列文章之一。小i约球是一个微信小程序主要帮乒乓球、羽毛球、台球、网球爱好者找到附近合适的球友。本文从一个具体技术或产品问题切入记录约球小程序从 0 到 1 过程中的设计取舍。前言做“附近球友”这个功能时我一开始以为 LBS 很简单。拿到用户经纬度查附近的人按距离排一下就结束了。但真正放到约球场景里会发现 LBS 不是一个单点能力而是一组能力的组合小程序怎么拿定位用户怎么选择常用约球地点数据库存什么坐标格式附近查询交给谁做地图怎么展示点位列表和地图是不是同一套数据距离、球类、场景筛选怎么组合可选方案做这个功能时大概有几种方案。方案一只存文本地址最简单的方式是只让用户填写地址比如“海淀区西二旗附近”“某某羽毛球馆”。优点是实现非常简单。缺点也很明显不能准确算距离不能做地图点位不能按半径查询地址文本不统一后期很难清洗同一个地点可能有很多种写法这个方案只适合非常早期的人工运营不适合真正做附近匹配。方案二前端拿经纬度后端普通字段存储第二种方式是用小程序拿到经纬度然后存在普通字段里{latitude:39.9,longitude:116.3}这个方案比纯文本好很多至少可以自己算距离也可以在地图上显示点位。但如果后端只是普通字段附近查询就比较麻烦。你要么全量拉出来自己算要么自己做经纬度范围过滤再二次计算距离。用户量小的时候能跑数据量稍微大一点就会很难受。方案三使用云开发数据库 Geo 能力小i约球最后选择的是这个方案。用户选点或定位后普通地址信息继续保留同时额外存一个数据库 GeoPointconstlocationdb.Geo.Point(longitude,latitude)这样数据库里同时有两类字段address用于展示地点名称、详细地址、原始经纬度location用于数据库地理位置查询这种设计的好处是比较均衡。展示层可以拿address查询层可以拿location。前端不用自己全量算距离后端也不用额外接一个地图服务。对一个微信小程序 云开发项目来说这是最顺手的方案。为什么没有一开始接外部地图服务外部地图服务当然也能做 LBS比如地点检索、路线规划、行政区划、POI、逆地址解析等。但小i约球第一阶段没有把它作为核心依赖。原因是第一阶段需要解决的问题并不复杂用户选择一个约球地点系统存下坐标查询附近球友地图展示点位这些能力小程序和云开发已经能覆盖。如果一开始就接外部地图服务会多出不少成本key 管理请求配额域名配置坐标系处理接口封装失败兜底所以我的选择是第一阶段尽量用微信生态已有能力等需要更复杂的 POI、路线、行政区、地理围栏时再考虑接入外部地图服务。小程序端定位和选点是两件事这里是很容易混淆的地方。小程序里至少有两个和位置相关的能力getLocationchooseLocation它们解决的问题不一样。getLocation解决的是“用户现在在哪里”。比如首页打开时可以拿当前定位作为默认中心点用来展示附近球友。chooseLocation解决的是“用户想把约球名片放在哪里”。这个位置不一定是当前定位。一个用户可能现在在公司但想发布家附近的羽毛球约球名片也可能人在家里但想发布常去球馆的乒乓球名片。所以在小i约球里这两个能力不能混用首页默认定位用getLocation发布约球名片用chooseLocation这是产品场景决定的不只是技术接口差异。小程序权限定位不是无条件可用小程序定位能力还涉及权限配置。在app.json里需要声明相关用途比如{permission:{scope.userLocation:{desc:用于查找附近球友和球馆}},requiredPrivateInfos:[chooseLocation,getLocation]}这里有两个现实问题。第一用户可能拒绝授权。所以首页不能把定位当成绝对前提。定位失败时要么用历史位置要么展示默认城市或默认数据要么引导用户开启定位。第二不同定位能力的审核和精度不一样。低精度定位获取门槛低但偏差可能比较大。对资讯类应用影响不大但对约球这种线下场景偏差几公里就很明显。这里的重点是定位能力不能只看“能不能拿到”还要看精度是否符合线下见面的场景。云开发 Geo 能力适合做什么云开发数据库的 Geo 能力最适合做“给定一个点查附近的数据”。在小i约球里它主要用在三个场景。1. 查附近球友名片用户打开首页时根据用户位置查附近的约球名片。这里除了地理位置还要叠加业务条件不看自己的名片按球类筛选过滤无效数据只查普通约球名片这说明真实查询不会只有geoNear一定是“地理条件 业务条件”的组合。2. 发布名片时找潜在匹配对象用户发布新名片后也可以反向查询附近已有球友。这和首页查询方向不同。首页查询是我在哪里附近有什么。发布匹配是我发了一个新点附近谁可能对它感兴趣。同样是 Geo 查询但产品含义不同。3. 查附近本地群本地群也可以看作一种地理对象。一个群如果对应某个街道、球馆或区域就可以给它存一个位置。用户查附近群时也可以用 Geo 能力做半径查询。这说明位置能力最好设计成底层能力而不是只服务某一个页面。小程序 map 组件能做什么小程序自带map组件已经能满足第一阶段需求。最核心的几个能力是设置中心点longitude/latitude设置缩放级别scale传入markers监听 marker 点击监听地图视野变化小i约球首页地图大概就是这种结构maplongitude{{user.location.longitude || 116.397428}}latitude{{user.location.latitude || 39.90923}}markers{{allMarkers}}bindmarkertaponMarkerTapbindregionchangeonRegionChangescale13/这已经能完成基础的附近球友地图用户当前位置作为中心点附近球友作为 marker点击 marker 进入详情缩放地图时调整 marker 展示方式对第一阶段来说不需要自己接一套 Web 地图库。map 组件的限制不过小程序map组件也不是没有限制。最典型的是 marker 展示。普通 marker 只能传图标、位置、大小等属性。如果你想实现更复杂的效果比如用用户头像作为 marker不同球类不同图标教练、陪练、球馆、群聊带不同角标缩放级别高时显示角标缩放级别低时隐藏角标就需要自己做更多处理。坐标系和精度问题小程序里常见坐标类型是gcj02。如果你的数据全部来自微信小程序的定位和选点内部保持一致就好。真正容易出问题的是这些情况外部地图服务返回的是另一种坐标系后台导入的数据来自不同来源用户定位是低精度地址文本和经纬度不一致小i约球第一阶段尽量避免引入多套坐标来源就是为了降低这类问题。但即便如此定位精度仍然会影响体验。低精度定位可能偏几公里这对“附近球友”来说不是小问题。这个问题会在后面的 Location 接口踩坑里展开。半径怎么选附近查询一定要面对一个问题多远算附近这个值不是纯技术问题。对线下运动来说半径和城市密度、运动类型、用户习惯都有关系。比如乒乓球可能更依赖固定球馆羽毛球对场馆和时间更敏感台球用户可能愿意走远一点一线城市直线 5km 和实际通勤 5km 不是一回事第一阶段可以先用一个相对保守的范围比如 10km。它不一定完美但足够验证产品闭环。后面更合理的方式是把半径做成可配置用户自己选择活动范围不同城市使用不同默认半径不同球类使用不同默认半径根据数据密度动态扩大或缩小范围总结LBS 选型不能脱离业务场景。如果只是做一个地图展示可能一个map组件就够了。如果只是存一个地址文本字段也能应付。但如果要做“附近球友匹配”就必须把定位、选点、Geo 存储、附近查询、地图点位和权限降级一起考虑。小i约球第一阶段选择了微信小程序能力 云开发 Geo 能力 小程序 map 组件。这套方案的核心价值不是最强而是足够贴合早期产品成本低、集成顺、验证快。本文属于「小i约球诞生记」系列。

相关新闻

为什么顶尖AI团队已弃用GPT-4 Turbo?Gemini 2.5 Pro在逻辑链完整性、跨文档引用溯源、符号推理准确率上实现代际碾压——附可复现测评代码库(Star超5k,仅开放72小时)

为什么顶尖AI团队已弃用GPT-4 Turbo?Gemini 2.5 Pro在逻辑链完整性、跨文档引用溯源、符号推理准确率上实现代际碾压——附可复现测评代码库(Star超5k,仅开放72小时)

更多请点击: https://intelliparadigm.com 第一章:Gemini 2.5 Pro的架构跃迁与代际定位 Gemini 2.5 Pro并非简单迭代,而是Google在多模态大模型演进路径上的一次结构性重构。其核心突破在于引入**分层推理引擎(Hierarchical Reas…

2026/7/11 12:19:46阅读更多 →
5分钟掌握YaeAchievement:原神成就数据导出终极指南

5分钟掌握YaeAchievement:原神成就数据导出终极指南

5分钟掌握YaeAchievement:原神成就数据导出终极指南 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement YaeAchievement是一款专为原神玩家设计的开源工具,能够快速、准…

2026/7/11 12:19:46阅读更多 →
OpCore Simplify:三分钟完成黑苹果OpenCore EFI配置的智能工具

OpCore Simplify:三分钟完成黑苹果OpenCore EFI配置的智能工具

OpCore Simplify:三分钟完成黑苹果OpenCore EFI配置的智能工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而头…

2026/7/11 12:19:46阅读更多 →
NanaZip完全指南:Windows现代化压缩工具的终极解决方案

NanaZip完全指南:Windows现代化压缩工具的终极解决方案

NanaZip完全指南:Windows现代化压缩工具的终极解决方案 【免费下载链接】NanaZip The 7-Zip derivative intended for the modern Windows experience 项目地址: https://gitcode.com/gh_mirrors/na/NanaZip NanaZip是专为现代Windows体验设计的开源文件压缩…

2026/7/11 13:34:51阅读更多 →
5分钟搞定魔兽争霸3优化插件:现代硬件兼容性修复终极方案

5分钟搞定魔兽争霸3优化插件:现代硬件兼容性修复终极方案

5分钟搞定魔兽争霸3优化插件:现代硬件兼容性修复终极方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏《魔兽争霸3》在现…

2026/7/11 13:34:51阅读更多 →
5分钟快速上手:Windows用户必备的苹果苹方字体美化终极方案

5分钟快速上手:Windows用户必备的苹果苹方字体美化终极方案

5分钟快速上手:Windows用户必备的苹果苹方字体美化终极方案 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 还在为Windows系统上中文字体显示…

2026/7/11 13:34:51阅读更多 →
未来展望:design-system-components路线图与政府Web设计趋势分析

未来展望:design-system-components路线图与政府Web设计趋势分析

未来展望:design-system-components路线图与政府Web设计趋势分析 【免费下载链接】design-system-components 🛠 Component code and tests for the Australian Government design system 项目地址: https://gitcode.com/gh_mirrors/de/design-system-…

2026/7/11 13:34:51阅读更多 →
Rnote:从数字笔记小白到创作高手的5个实战场景

Rnote:从数字笔记小白到创作高手的5个实战场景

Rnote:从数字笔记小白到创作高手的5个实战场景 【免费下载链接】rnote Sketch and take handwritten notes. 项目地址: https://gitcode.com/GitHub_Trending/rn/rnote 你是否还在为寻找一款真正好用的手写笔记软件而烦恼?传统笔记软件要么功能简…

2026/7/11 13:34:51阅读更多 →
STM32与MP2672A实现锂电池主动均衡充电方案

STM32与MP2672A实现锂电池主动均衡充电方案

1. 项目背景与核心需求解析在便携式电子设备和储能系统中,多节锂电池串联应用越来越广泛。但电池个体差异会导致串联组中各单体电压不均衡,长期积累将严重影响电池组性能和寿命。传统被动均衡方案能量损耗大,而主动均衡电路又过于复杂。这正是…

2026/7/11 13:29:51阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/10 12:10:00阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/10 12:29:21阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/10 4:59:05阅读更多 →
Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

1. 为什么2025版PR安装比以往更“磨人”?——从弹窗警告到路径陷阱的真实处境 Premiere Pro 2025版不是简单的一次版本迭代,它是一道分水岭。我从去年底开始帮影视工作室、高校剪辑实验室和自由职业者部署2025环境,累计处理了137台设备&#…

2026/7/11 0:03:43阅读更多 →
5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效 【免费下载链接】open-source-mac-os-apps 🚀 Awesome list of open source applications for macOS. https://t.me/s/opensourcemacosapps 项目地址: https://gitcode.com/gh_mirrors/op/open-so…

2026/7/11 0:03:43阅读更多 →
5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:03:43阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/10 13:39:09阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/10 22:20:33阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/10 17:29:22阅读更多 →