# 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}`);
}
```