其他
用 Mapbox 搜索做地理编码、POI…
当查询涉及具体地点、品牌、泛类别 POI 或坐标反查地址时,按 Mapbox 搜索模式选择工具并设置 proximity/bbox/country/types/limit/auto_complete 等参数。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 Mapbox 搜索做地理编码、POI特定
解决思路
- 当查询包含具体名称(如 “Starbucks on 5th Avenue”、“Empire State Building”)时,使用 search_and_geocode_tool。
- 当查询包含品牌名(如 “McDonald's”、“Whole Foods”)时,使用 search_and_geocode_tool。
- 当查询包含地址(如 “123 Main Street, Seattle”、“1 Times Square”)时,使用 search_and_geocode_tool。
- 当查询包含连锁店(如 “Target”)时,使用 search_and_geocode_tool。
- 当查询包含城市/地点(如 “San Francisco”、“Portland”)时,使用 search_and_geocode_tool。
- 不要用 search_and_geocode_tool 处理泛类别(如 “coffee shops”、“museums”)。
- 当查询包含泛类型(如 “coffee shops”、“restaurants”、“gas stations”)时,使用 category_search_tool。
- 当查询包含复数形式(如 “museums”、“hotels”、“parks”)时,使用 category_search_tool。
- 当查询包含 is-a 短语(如 “any coffee shop”、“all restaurants”、“nearby pharmacies”)时,使用 category_search_tool。
- 当查询包含行业术语(如 “electric vehicle chargers”、“ATMs”)时,使用 category_search_tool。
- 不要用 category_search_tool 处理具体名称或品牌。
- 当有 GPS 坐标并需要人类可读地址时,使用 reverse_geocode_tool。
- 当需要识别某个具体位置有什么时,使用 reverse_geocode_tool。
- 当需要把用户位置转换为地址时,使用 reverse_geocode_tool。
- 按决策矩阵选择工具:查询 “Find Starbucks on Main Street” 时用 search_and_geocode_tool,因为包含具体品牌名。
- 按决策矩阵选择工具:查询 “Find coffee shops nearby” 时用 category_search_tool,因为包含泛类别和复数。
- 按决策矩阵选择工具:查询 “What's at 37.7749, -122.4194?” 时用 reverse_geocode_tool,因为要把坐标转成地址。
- 按决策矩阵选择工具:查询 “Empire State Building” 时用 search_and_geocode_tool,因为包含具体命名 POI。
- 按决策矩阵选择工具:查询 “hotels in downtown Seattle” 时用 category_search_tool,因为包含泛类型和位置。
- 按决策矩阵选择工具:查询 “Target store locations” 时用 search_and_geocode_tool,因为是品牌名(即使为复数)。
- 按决策矩阵选择工具:查询 “any restaurant near me” 时用 category_search_tool,因为包含泛类型和 “any” 短语。
- 按决策矩阵选择工具:查询 “123 Main St, Boston, MA” 时用 search_and_geocode_tool,因为包含具体地址。
- 按决策矩阵选择工具:查询 “electric vehicle chargers” 时用 category_search_tool,因为是行业类别。
- 按决策矩阵选择工具:查询 “McDonald's” 时用 search_and_geocode_tool,因为是品牌名。
- 使用 proximity 把结果偏置到某位置,但不排除远距离匹配。
- 当用户说 “near me”、“nearby”、“close to” 时设置 proximity。
- 当有参考点但希望保留一定灵活性时设置 proximity。
- 当希望结果按与某点的相关性排序时设置 proximity。
- proximity 示例传 `{ q: 'pizza', proximity: { longitude: -122.4194, latitude: 37.7749 } }`,API 会先返回 SF 的披萨店,但可能仍包含高度相关的纽约披萨店。
- 关键做法:只要有参考位置,始终设置 proximity;否则结果会基于 IP 或变成全局结果。
- 使用 bbox 作为硬约束,只返回边界框内结果。
- 当用户指定区域(如 “in downtown”、“within this neighborhood”)时使用 bbox。
- 当有定义好的服务区域时使用 bbox。
- 当需要保证结果在边界内时使用 bbox。
- bbox 示例传 `{ q: 'hotel', bbox: [-122.51, 37.7, -122.35, 37.83] }`,顺序为 `[minLon, minLat, maxLon, maxLat]`。
- bbox 注意:太小会没有结果;太大会返回不相关结果。
- 使用 country 把结果限制到特定国家。
- 当用户指定国家(如 “restaurants in France”)时使用 country。
- 当构建国家特定功能时使用 country。
- 当需要遵守区域边界时使用 country。
- 当明确希望结果在特定国家内时使用 country。
- country 示例传 `{ q: 'Paris', country: ['FR'] }`,使用 ISO 3166 alpha-2 代码。
- country 可解决 Paris, France 而不是 Paris, Texas 的问题。
- 可组合 proximity + country + bbox,或任意组合三者。
- 空间过滤决策:查询 “Find coffee near me” 时用 proximity,偏置到用户位置。
- 空间过滤决策:查询 “Coffee shops in downtown Seattle” 时用 proximity + bbox,中心在 downtown 并限制到区域。
- 空间过滤决策:查询 “Hotels in France” 时用 country,硬国家边界。
- 空间过滤决策:查询 “Best pizza in San Francisco” 时用 proximity + country ['US'],偏置到 SF 并限制到 US。
- 空间过滤决策:查询 “Gas stations along this route” 时用 bbox 围绕路线,硬约束到路线走廊。
- 空间过滤决策:查询 “Restaurants within 5 miles” 时用 proximity,然后按距离过滤结果,先偏置附近再过滤。
- 仅 category_search_tool 使用 limit,范围 1-25,默认 10。
- Quick suggestions 场景把 limit 设为 5。
- Standard list 场景把 limit 设为 10。
- Comprehensive search 场景把 limit 设为 25。
- Map visualization 场景把 limit 设为 25。
- Dropdown/autocomplete 场景把 limit 设为 5。
- 性能提示:limit 越低响应越快。
- 使用 search_and_geocode_tool 的 types 参数按要素类型过滤。
- types 可用 poi,包含兴趣点(商户、地标);找 POI 而不是地址时用。
- types 可用 address,包含街道地址;需要具体地址时用。
- types 可用 place,包含城市、社区、区域;找区域/地区时用。
- types 可用 street,包含不带门牌号的街道名;需要街道而不是具体地址时用。
- types 可用 postcode,包含邮编;按 ZIP/postal code 搜索时用。
- types 可用 district,包含区、社区;基于区域搜索时用。
- types 可用 locality,包含城镇、村庄;市镇搜索时用。
- types 可用 country,包含国家名称;国家级搜索时用。
- types 组合示例传 `{ q: 'Paris', types: ['poi', 'address'] }`,返回 Paris Hotel、Paris Street,而不是 Paris, France。
- types 组合示例传 `{ q: 'Paris', types: ['place'] }`,返回 Paris, France、Paris, Texas 等。
- types 默认行为:包含所有类型,通常就是想要的。
- 使用 search_and_geocode_tool 的 auto_complete 参数启用部分/模糊匹配。
- auto_complete 设为 true 时匹配部分单词、拼写错误;用于用户实时输入。
- auto_complete 设为 false(默认)时精确匹配;用于最终查询,不用于自动补全。
- auto_complete 示例:用户输入 “starb” 时传 `{ q: 'starb', auto_complete: true }`,返回 Starbucks、Starboard Tavern 等。
- auto_complete 用于 search-as-you-type 界面。
- auto_complete 用于处理拼写错误(“mcdonalds” -> McDonald's)。
- auto_complete 用于不完整查询。
- 不要对最终/已提交查询使用 auto_complete,因为精确性较低。
- 当需要精确匹配时不要使用 auto_complete。
- 不要用 category_search_tool 查品牌;错误示例 `category_search_tool({ category: 'starbucks' })`,正确用 `search_and_geocode_tool({ q: 'Starbucks' })`。
- 不要用 search_and_geocode_tool 查泛类别;错误示例 `search_and_geocode_tool({ q: 'coffee shops' })`,正确用 `category_search_tool({ category: 'coffee_shop' })`。
- 不要忘记为本地搜索设置 proximity;错误示例 `category_search_tool({ category: 'restaurant' })`,正确示例加上 `proximity`。
- 不要在没有 proximity 的情况下对模糊地名做地理编码(REST 也适用);这适用于 Mapbox Geocoding API v5 / 浏览器应用中的 Search Box,不只 MCP 工具。
- 错误示例:`fetch('https://api.mapbox.com/geocoding/v5/mapbox.places/...json?access_token=...&limit=1')` 不带 proximity,可能把 “Lincoln Memorial” 解析到 Illinois。
- 正确示例:`fetch('https://api.mapbox.com/geocoding/v5/mapbox.places/...json?access_token=...&proximity=-77.0369,38.9072&bbox=-77.15,38.79,-76.90,38.99&limit=1')`,偏置到地图中心并可选 bbox。
- 对搜索输入做防抖(`clearTimeout` + `setTimeout`),避免每次按键都触发地理编码。
- 不要在意图是 proximity 时使用 bbox;错误示例用很小 bbox,可能排除附近好结果;正确用 proximity。
- 不要不必要地请求 ETA;错误示例传 `eta_type: 'navigation'` 和 `navigation_profile: 'driving'` 会消耗路由计算 API 配额,而用户未要求旅行时间。
- 仅在需要时添加 ETA;如果用户问 “how long to get there?”,再添加 ETA。
- 不要为 UI 显示设置过高 limit;错误示例为 5 项下拉框传 limit 25;正确按 UI 需要设 limit 5。
- 工具选择流程图:查询含具体名称/品牌时走 search_and_geocode_tool。
- 工具选择流程图:查询含泛类别/复数时走 category_search_tool。
- 工具选择流程图:坐标转地址时走 reverse_geocode_tool。
- 工具选择流程图:地址转坐标时走 search_and_geocode_tool 且 `types: ['address']`。
- 本地搜索必须设置:proximity,或需要严格边界时用 bbox。
- 类别搜索考虑:limit(匹配 UI 需要)、format(在地图上绘制时用 json_string)。
- 消歧使用:country(地理上下文重要时)、types(要素类型重要时)。
- 旅行时间排序使用:eta_type、navigation_profile、origin,这会消耗 API 配额。
- 常见错误 1:忘记 proximity -> 结果是全局/IP 基的,或对模糊的 memorial/park 名称返回错误州。
- 常见错误 2:用错工具 -> 对 “Starbucks” 用 category_search;应使用 search_and_geocode。
- 常见错误 3:无效 category -> 先检查 category_list。
- 常见错误 4:bbox 太小 -> 无结果;改用 proximity。
- 常见错误 5:不必要请求 ETA -> 增加 API 成本。
- 常见错误 6:limit 对 UI 太高 -> 让用户不知所措。
- 常见错误 7:没有过滤 types -> 想要 POI 却得到城市。
- 常见错误 8:typeahead 没有防抖 -> 消耗配额并产生竞态 UI。
- 参考文件:加载 `references/advanced-params.md` 获取 poi_category、ETA、format、language 参数的深入指导。
- 参考文件:加载 `references/workflows.md` 获取常见模式:Near Me、Branded、Geocoding、Category+Area、Reverse、Route-Based、Multilingual。
- 参考文件:加载 `references/optimization-combining.md` 获取性能优化、组合工具、处理无结果、category list 资源。
适用边界 · 注意事项
- 不适用于未接入 Mapbox Search/Geocoding API、Mapbox MCP 工具或等价 Mapbox 搜索能力的项目。
- 不适用于需要完全离线、自托管地理编码,或必须使用其他厂商/开源方案且不能调用 Mapbox 的场景。
- 不适用于只需地图渲染/路线导航,不需要地点搜索、地理编码或反查地址的场景。