POI搜索
场景介绍
提供多种查询POI信息的能力:
- 关键字搜索:通过用户输入的关键字,返回地点列表。
- 周边搜索:基于用户设备位置进行地点查找。
- 自动补全:根据输入的关键字返回预测的输入关键字和地点查询建议。
- 地点详情:查询某个地点更详细的信息。
接口说明
以下是POI搜索相关接口,主要由site命名空间下的方法提供,更多接口及使用方法请参见接口文档。
| 接口名 | 描述 |
|---|---|
| searchByText(searchByTextParams: SearchByTextParams): Promise<SearchByTextResult> | 关键字搜索。 |
| searchByText(context: common.Context, searchByTextParams: SearchByTextParams): Promise<SearchByTextResult> | 关键字搜索。支持上传Context上下文。 |
| nearbySearch(nearbySearchParams: NearbySearchParams): Promise<NearbySearchResult> | 周边搜索。 |
| nearbySearch(context: common.Context, nearbySearchParams: NearbySearchParams): Promise<NearbySearchResult> | 周边搜索。支持上传Context上下文。 |
| queryAutoComplete(queryAutoCompleteParams: QueryAutoCompleteParams): Promise<QueryAutoCompleteResult> | 自动补全。 |
| queryAutoComplete(context: common.Context, queryAutoCompleteParams: QueryAutoCompleteParams): Promise<QueryAutoCompleteResult> | 自动补全。支持上传Context上下文。 |
| searchById(searchByIdParams: SearchByIdParams): Promise<SearchByIdResult> | 地点详情。 |
| searchById(context: common.Context, searchByIdParams: SearchByIdParams): Promise<SearchByIdResult> | 地点详情。支持上传Context上下文。 |
开发步骤
导入相关模块。
import { site } from '@kit.MapKit';
import { BusinessError } from '@kit.BasicServicesKit';
关键字搜索
通过指定的关键字和可选的地理范围,查询诸如旅游景点、企业和学校之类的地点。
let params: site.SearchByTextParams = {
// 根据自定义关键字进行搜索,例如:“故宫”、“夫子庙”
query: "Piazzale Dante, 41, 55049 Viareggio, Tuscany, Italy",
// 经纬度坐标
location: {
latitude: 31.984,
longitude: 118.76625
},
// 指定地理位置的范围半径
radius: 10000,
// 搜索结果的语言类型
language: "en"
};
// 返回关键字搜索结果
try {
const result = await site.searchByText(params);
console.info(`Succeeded in searching by text. result is ${JSON.stringify(result)}`);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed in searching by text. Code is ${err.code}, message is ${err.message}`);
}
周边搜索
通过用户传入自己的位置,可以返回周边地点列表。您可以通过提供关键字或指定要搜索的地点的类型来优化搜索结果。
let params: site.NearbySearchParams = {
location: {
latitude:51.50811219132287,
longitude:-0.07594896472392065
},
poiTypes: [
"Watch_Store",
"SUBWAY",
"PRIMARY_SCHOOL",
"GENERAL_AUTO_REPAIR_SERVICE_CENTER"
]
}
// 返回周边搜索结果
try {
const result = await site.nearbySearch(params);
console.info(`Succeeded in searching nearby. result is ${JSON.stringify(result)}`);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed in searching nearby. Code is ${err.code}, message is ${err.message}`);
}
自动补全
根据输入的关键字,将最有可能的搜索词呈现给用户,以减少用户输入信息,提升用户体验。如:输入“北京”,提示“北京市”、“北京站”、“北京西站”等。
let params: site.QueryAutoCompleteParams = {
// 自定义关键字
query: "hotel",
// 经纬度坐标
location: {
latitude: 31.984410259206815,
longitude: 118.76625379397866
},
language: "en",
// 返回子节点
isChildren: true
};
// 返回自动补全结果
try {
const result = await site.queryAutoComplete(params);
console.info(`Succeeded in querying. result is ${JSON.stringify(result)}`);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed in querying. Code is ${err.code}, message is ${err.message}`);
}
地点详情
根据地点的唯一主键地点ID(siteId)获取地点详情。地点详细信息请求返回有关指定地点的更全面的信息,如地点名称、地址详细信息、经纬度等。siteId可通过其他接口(关键字搜索、周边搜索、地点详情、自动补全、正地理编码)的返回结果中获取。
let params: site.SearchByIdParams = {
// 指定主键地点ID
siteId: "144129739873977856",
language: "en",
// 返回子节点
isChildren: true
};
// 返回地点详情结果
try {
const result = await site.searchById(params);
console.info(`Succeeded in searching. result is ${JSON.stringify(result)}`);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed in searching. Code is ${err.code}, message is ${err.message}`);
}