尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于腾讯位置服务与AI的智能找厕应用开发实践

基于腾讯位置服务与AI的智能找厕应用开发实践 1. 项目缘起一个“急”出来的产品构想不知道你有没有过这样的经历在一个陌生的商圈、公园或者大型交通枢纽突然内急却怎么也找不到公共厕所的指示牌。打开手机地图搜索“厕所”要么结果寥寥无几要么显示的“厕所”点进去一看是某个商场内部早已关闭的设施或者干脆定位不准让你在几栋楼之间来回打转。这种“燃眉之急”的尴尬和焦虑相信不少人都体会过。作为一个经常在外面跑的程序员我更是这类场景的“资深体验官”。传统的解决方案无非是依赖地图App的POI兴趣点搜索但公共厕所这类数据往往存在几个痛点一是数据不全很多街头巷尾、小型公园的公厕没有被收录二是数据不准有些厕所可能已经拆除或变更了用途三是信息维度单一你只知道那里有个厕所但不知道它是否干净、有没有无障碍设施、是否需要排队、甚至有没有纸巾。这些信息对于真正有需求的人来说至关重要。于是一个想法冒了出来能不能做一个专门解决“找厕所”这个垂直需求的App它不仅要“找得到”更要“找得准”、“找得好”。这个想法就是“AI厕急达”的雏形。我决定利用腾讯位置服务提供的地图、定位和地点搜索能力作为技术底座再结合一些巧妙的AI应用思路来打造这个移动端的找厕所助手。参加腾讯位置服务开发者征文大赛正好给了我一个将想法落地的契机和动力。2. 技术选型与核心架构为什么是腾讯位置服务在项目启动前我评估了几个主流的地图服务提供商。最终选择腾讯位置服务并非偶然而是基于其在这个特定场景下的几项核心优势。### 2.1 海量且鲜活的POI数据是基石找厕所首先得有厕所的数据。腾讯位置服务依托微信、QQ等国民级应用的生态积累了海量的用户贡献数据UGC。这意味着很多小众的、非官方的厕所点位比如某个小餐馆同意路人使用的洗手间有可能已经被用户添加或确认过。其地点搜索Place SearchAPI的覆盖度和数据新鲜度对于“厕所”这种长尾但高频的POI类型来说具有天然优势。相比之下一些地图服务在非商业、非地标性的民生设施数据上可能更新不够及时。### 2.2 逆地址解析与精准定位是关键用户内急时往往是在一个具体的、微观的位置。普通的GPS坐标经纬度对用户没有意义他需要的是“我在XX大厦B座的后门”。腾讯位置服务的逆地址解析Reverse Geocoding能力非常强大能够将用户手机获取的经纬度快速、准确地转换为结构化的地址描述例如“广东省深圳市南山区科技园科苑路XX号腾讯大厦附近”。这为后续“查找附近厕所”以及路线规划提供了清晰的起终点描述基础。### 2.3 路线规划与步行导航是刚需找到厕所列表只是第一步如何最快、最省力地到达才是解决问题的最后一环。腾讯位置服务的路线规划DirectionAPI特别是针对步行场景的优化能够综合考虑人行道、天桥、地下通道等要素规划出真正可行的步行路线。其集成在SDK中的步行导航功能可以实时引导用户转向、提示距离在“争分夺秒”的场景下体验至关重要。### 2.4 稳定的SDK与清晰的文档降低开发门槛作为一个个人开发者时间和精力有限。腾讯位置服务提供了完善的移动端SDKAndroid/iOS集成过程相对顺畅文档和社区资源也比较丰富。其WebService API设计清晰对于服务端进行一些辅助计算比如距离排序、信息过滤也很友好。这让我能更专注于业务逻辑和“AI”部分的创新而不是在基础地图功能上耗费过多时间。基于以上考虑我确定了以腾讯位置服务为核心移动端选择Flutter框架以实现跨平台为交互界面结合轻量级AI服务的应用架构。整体数据流如下用户打开App - 获取精准定位腾讯定位SDK- 逆地址解析确认位置 - 发起“附近厕所”搜索腾讯地点搜索API- 对结果进行智能排序与过滤AI模块- 展示列表并提供导航腾讯地图组件与导航SDK。3. “AI”如何赋能超越简单搜索的智能体验如果只是调用腾讯地点搜索API然后把结果列出来那这个产品与传统地图App的厕所搜索功能没有本质区别价值有限。我理解的“AI厕急达”其智能AI应体现在对搜索结果的“再加工”和“深理解”上为用户提供决策支持。这里我主要引入了两个层面的AI应用。### 3.1 智能排序与推荐算法腾讯地点搜索API返回的厕所列表默认可能是按直线距离或相关性排序。但“最近”不一定等于“最好”或“最快能用到”。我设计了一个多因子加权排序模型对每个厕所点位进行打分分数高的优先推荐。这些因子包括静态因子来自腾讯数据或补充信息距离计算用户当前位置与厕所的步行距离使用腾讯路线规划API获取实际步行距离比直线距离更准确。类型给予公共厕所、商场厕所、加油站厕所、快餐店厕所不同的基础权重。例如商场厕所可能环境较好但可能需穿越整个商场快餐店厕所可能要求消费。设施信息如果数据中包含或通过其他渠道补充是否有无障碍卫生间、母婴室、纸巾售卖等信息则相应加分。动态因子通过轻量AI模型或规则推断拥挤度预测这是核心创新点。我无法在每个厕所安装传感器但可以利用历史数据和一些间接信号进行预测。例如时间模式工作日下午办公楼附近的厕所可能更拥挤周末公园的厕所可能更拥挤。这是一个简单的基于时间和位置的规则模型。周边人流热力可以尝试集成需合规获取腾讯位置服务的人流热力数据或类似服务如果厕所所在区域当前热力值高则拥挤概率增大。注意实际应用中需严格评估数据来源的合规性与用户隐私政策。用户上报建立简单的UGC机制让到达的用户可以快速点击“排队中”、“空闲”等状态这些数据经过清洗后可以用于实时或近未来的预测。初期数据冷启动时可以用时间模式规则作为默认值。最终排序分数 距离权重 * (1/标准化距离) 类型权重 设施权重 - 拥挤度惩罚因子。这个模型并不复杂甚至有些因子基于规则但它确实将简单的列表变成了有“智商”的推荐把“距离最近”但可能排长队的厕所排到后面优先推荐一个步行多50米但无需等待的厕所用户体验的提升是巨大的。### 3.2 自然语言查询的意图理解我设想用户在最着急的时候可能不想在一堆筛选条件里点选。他们更可能直接输入一句话“找一个人少干净的厕所”或者“附近有母婴室的卫生间”。这就需要用到自然语言处理NLP技术。我在后端部署了一个轻量级的意图识别模型例如使用BERT等预训练模型微调。当用户输入此类查询时模型会识别出核心意图“找厕所”和关键修饰条件“人少”、“干净”、“母婴室”。将“找厕所”映射到调用腾讯地点搜索API。将“人少”、“干净”等条件转化为对上述智能排序模型中“拥挤度预测”和“类型/设施权重”的调整参数。例如“人少”会显著提高拥挤度惩罚因子的权重“母婴室”会直接过滤掉没有该设施的选项。将“干净”这种主观性较强的条件暂时与“类型权重”关联如提高商场、酒店厕所的权重降低老旧公厕的权重未来可以通过用户评价数据来细化。这样用户可以用最自然的方式表达需求AI助手负责“翻译”成机器可执行的过滤和排序指令最终呈现符合用户模糊描述的结果。这比让用户在焦急时操作复杂的筛选器要友好得多。注意AI模型的引入尤其是涉及用户数据处理的部分必须将合规与隐私保护放在首位。所有用户位置数据需匿名化处理用户上报信息需明确授权且不能关联到个人身份。模型应在端侧或服务器侧安全运行。4. 移动端实现详解Flutter与腾讯地图SDK的集成实践我选择Flutter进行跨平台开发是为了节省同时维护iOS和Android版本的成本。腾讯位置服务也提供了对Flutter的支持通过插件tencent_map_flutter但集成过程中还是有些细节需要注意。### 4.1 项目初始化与权限管理首先需要在腾讯位置服务开放平台创建应用获取iOS的Bundle Identifier和Android的包名以及对应的密钥Key。这一步是基础但密钥的安全存储至关重要。在Flutter中我使用permission_handler插件来动态申请定位权限。这里有个关键点不能只申请location权限在Android上如果需要后台获取位置本应用不需要可能还需要always权限但前台使用通常whenInUse级别就够了。在iOS上需要在Info.plist中详细说明定位用途NSLocationWhenInUseUsageDescription描述文案要清晰比如“用于寻找您附近的公共厕所”以提高用户授权率。权限请求的代码需要包裹在友好的UI引导中如果用户拒绝需要给出明确的提示告知用户没有定位将无法使用核心功能并引导用户去系统设置中开启。### 4.2 腾讯地图插件的集成与配置将tencent_map_flutter插件加入pubspec.yaml后需要在Android和iOS原生侧进行配置。Android端在android/app/src/main/AndroidManifest.xml中填入腾讯地图Android Key并配置网络权限、定位权限等。特别注意混淆规则需要在proguard-rules.pro中添加腾讯地图SDK的-keep规则否则发布正式版Release时可能因代码混淆导致地图功能异常。!-- AndroidManifest.xml 示例片段 -- meta-data android:namecom.tencent.mapapi.key android:value您的ANDROID_KEY /iOS端在ios/Runner/Info.plist中填入腾讯地图iOS Key。此外由于iOS对网络安全的严格要求如果您的API域名不在默认信任列表可能需要在Info.plist中配置NSAppTransportSecurity以允许HTTP请求腾讯地图SDK内部请求通常是HTTPS一般不需要。同时确保在ios/Podfile中post_install阶段正确处理Flutter对Pod的依赖。### 4.3 核心页面交互逻辑主页面主要由地图组件和底部列表构成。定位与地图初始化应用启动后首先请求定位权限获取成功后使用腾讯定位SDK获取当前经纬度。随后将地图中心点移动到该位置并添加一个自定义的定位图标Marker。搜索附近厕所调用腾讯地点搜索API。这里API参数的设计有讲究keyword: 设为“厕所”或“卫生间”。但实际测试发现单独搜“厕所”可能漏掉一些标注为“洗手间”、“盥洗室”的地点。因此更稳妥的做法是发起多个关键词的搜索或者利用地点搜索的category参数如果腾讯分类体系中有明确的“厕所”分类。我采用了“厕所”、“卫生间”、“洗手间”多关键词并行搜索然后对结果去重。boundary: 设置为nearby(lat, lng, radius)以用户为中心搜索半径例如1000米内的地点。半径不宜过大否则结果不精准也不宜过小以防附近没有结果。page_size: 控制每页返回数量初次加载可以设为20。结果展示与交互地图展示将搜索到的每个厕所点位用一个醒目的比如马桶形状的Marker标注在地图上。用户点击Marker可以弹出信息窗InfoWindow显示厕所名称、距离、拥挤度预测图标等简要信息。列表展示底部列表按智能排序后的顺序显示。每个列表项包含名称、距离、步行预计时间、拥挤度图标如绿色笑脸表示空闲红色哭脸表示拥挤、以及核心设施图标如轮椅、婴儿标志。列表项点击后地图视角应平滑移动至该点位并高亮对应的Marker。路线规划与导航当用户选定一个厕所后点击“导航”按钮。调用腾讯路线规划API步行模式传入起点用户当前位置和终点厕所经纬度。API会返回一条或多条路线方案包括路径坐标点、距离、预计时间。我选择第一条通常是最佳方案将其坐标点数组传递给地图SDK在地图上绘制出清晰的蓝色导航线。同时可以启动腾讯地图SDK的步行导航组件进入实时语音导航模式。### 4.4 性能优化与体验打磨Marker聚合当缩放级别较小时如果附近厕所密集地图上会出现大量重叠的Marker影响观感和性能。我实现了简单的Marker聚合算法当地图缩放级别改变时对屏幕范围内的Marker进行距离聚类距离过近的多个Marker合并显示为一个聚合点点击聚合点可以展开。这大大提升了地图渲染效率。图片缓存厕所类型图标、设施图标等静态资源使用cached_network_image等插件进行缓存避免重复下载。列表懒加载与分页如果首次搜索结果很多列表采用懒加载滚动到底部时自动加载下一页。同时与地图进行联动当地图视野变化时可以重新搜索视野区域内的厕所实现“所见即所得”的探索模式。状态管理使用Provider或Riverpod等状态管理工具清晰管理用户位置、厕所列表、选中目标、导航路线等全局状态确保UI能及时响应状态变化。5. 开发中的“坑”与实战经验这个项目从构想到实现踩了不少坑也积累了一些经验分享出来希望能帮到同样想法的开发者。### 5.1 数据源之痛腾讯数据与第三方数据的融合腾讯地点搜索返回的厕所信息有时不够完整可能缺少开放时间、设施详情。我曾尝试接入一些政府开放的“智慧公厕”数据接口但面临数据格式不统一、更新频率低、覆盖率有限的问题。我的解决方案是“分层数据策略”第一层主数据源腾讯地点搜索API。确保覆盖广、数据基本可用。第二层补充数据源手动维护一个本地的“优质厕所”数据库。通过用户上报、自己采集的方式为一些高频地点如核心商圈、交通枢纽的厕所补充详细信息如确切的入口位置照片、厕位数量、是否有纸巾和洗手液、清洁频率等。这部分数据量小但价值高。第三层UGC数据在App内设计极简的用户反馈入口。例如在厕所详情页用户可以点击“情况有变”按钮快速选择“已关闭”、“排队很长”、“很干净”等选项。这些经过简单审核的UGC数据可以作为动态因子反馈到智能排序模型中让数据越用越“聪明”。### 5.2 定位漂移与室内场景的挑战即使在户外GPS信号也可能受高楼影响产生漂移导致定位点“飘”到马路对面甚至更远。在室内GPS基本失效依赖Wi-Fi和基站定位误差可能达到几十米甚至上百米。应对策略使用高精度定位模式腾讯定位SDK提供多种定位模式。在户外优先使用TencentLocationRequest.PRIORITY_HIGH_ACCURACY模式结合GPS、网络和传感器数据。结果纠偏对于搜索到的厕所点位如果其本身是室内设施如商场内的厕所其经纬度坐标可能是建筑入口。当用户定位也在该建筑附近时直接计算直线距离会产生误导。我增加了一个逻辑如果厕所名称中包含“商场”、“大厦”、“机场”等室内场所关键词且用户定位点与该场所的轮廓范围如果有相关数据重叠或非常接近则在显示距离时额外标注“室内”或使用场所内的逻辑距离估算例如默认增加一个固定距离值或提示“位于XX建筑内”。引导用户确认在定位结果偏差可能较大时如首次定位、室内环境在地图上显著标注出系统定位的点并提示用户“您是否在此位置”允许用户手动长按地图来修正起点。这个交互虽然多了一步但能极大避免因定位不准导致的导航错误提升用户信任感。### 5.3 导航路径的“最后一米”问题腾讯路线规划API给出的路径终点是厕所POI的经纬度坐标。但这个坐标可能对应的是建筑的中心点而非厕所的实际入口。导致用户跟着导航走到一栋楼前却不知道厕所在楼的哪一侧、哪个入口进。解决办法数据补充在第二层“优质厕所”数据中我会尽可能记录入口的详细描述如“从星巴克旁边的侧门进入直走左转”。在导航结束时在界面底部显示这段文字提示。利用街景图像如果可用腾讯地图部分点位提供街景Street View服务。在厕所详情页可以尝试加载其街景图像需确认API支持与配额让用户在出发前就能“看到”厕所入口的大致样貌心里更有底。用户互助鼓励用户上传厕所入口的照片需经过审核作为导航终点的视觉参考。一张实拍照片比任何文字描述都直观。### 5.4 功耗与流量优化持续定位和地图渲染是比较耗电的操作。作为一款工具型App不能成为“电量杀手”。按需定位除非用户主动进入导航模式否则在普通浏览状态下采用低功耗的定位策略如PRIORITY_BALANCED_POWER_ACCURACY并适当降低定位频率。当用户停止移动一段时间后可以暂停定位更新。地图瓦片缓存腾讯地图SDK本身会对地图瓦片进行缓存。我们可以确保在Wi-Fi环境下预加载常用区域的地图数据。API调用节制避免不必要的重复搜索。例如在用户位置未发生显著变化如移动超过50米或地图视野未发生大幅变化时不自动触发新的附近搜索。对用户的操作进行防抖Debounce处理。6. 未来可期的功能扩展目前“AI厕急达”还是一个基础版本解决了“找到并抵达”的核心问题。但围绕这个场景还有很大的想象空间。AR实景导航结合ARKit/ARCore在相机实时画面中叠加虚拟箭头和指示牌引导用户走向厕所入口。这对于在复杂室内环境如大型商场、医院中寻找厕所尤其有用。腾讯位置服务是否有相关的AR导航或室内地图能力值得探索。无障碍导航为轮椅使用者、视障人士等群体提供专属路径规划。这需要更精细的地图数据如是否有台阶、坡道、电梯以及更详细的厕所设施信息如厕位尺寸、扶手位置。可以与无障碍设施数据平台进行合作。个性化偏好学习通过用户的历史选择例如用户总是优先选择有母婴室的商场厕所利用简单的协同过滤或基于内容的推荐算法在未来的搜索结果中个性化加权让推荐越来越贴合个人习惯。与智能硬件联动想象一下如果未来某些“智慧公厕”能提供实时空位数据接口我们的App就可以显示“当前空闲厕位3个”这将把体验提升到前所未有的高度。这需要推动行业数据的开放与标准化。开发“AI厕急达”的过程是一次将具体的生活痛点、成熟的地图能力与巧妙的AI思路相结合的有趣实践。腾讯位置服务提供了稳定可靠的基础设施让开发者可以专注于业务创新。而所谓的“AI”未必总是高大上的深度学习模型很多时候像智能排序、意图理解这样结合了规则与轻量模型的“小聪明”就能实实在在地提升用户体验。这个项目让我深刻体会到好的技术应用始于对真实需求的细微洞察并终于对每个体验细节的执着打磨。如果你也有类似的想法不妨拿起工具从解决身边的一个小麻烦开始。
返回列表