Appearance
POI 搜索(关键词 / 周边 / 输入提示)
风格:
SearchParams链式构建 +Callback<PlaceTextSearchResponse>。
1 参数构建
java
SearchParams params = SearchParams.create()
.setKeywords("关键词") // 必填
.setCity("城市名") // 可选但推荐
.setLocation("经度,纬度") // 例:"116.43,39.95"
.setMaxDistance(1000) // 米
.setSortrule("distance") // 如:"distance"
.setPoiTypes("类型编码") // 可选
.setCityLimit(true); // 可选,true=仅在指定 city 内搜索不同 API 关注点
| API | 必要参数 | 说明 |
|---|---|---|
| 关键词搜索 | setKeywords() + setCity() | 城市有助于提高匹配精度;可配 setCityLimit(true) 限定 |
| 周边搜索 | setKeywords() | 常与 setLocation() 搭配 |
| 输入提示 | setKeywords() | 更短、更即时联想 |
2 调用示例(回调按现有实现)
java
// 关键词
mapClient.getSearchForPOIServices().keywordSearchApi(
params,
new RpcRequestUtils.Callback<PlaceTextSearchResponse>() { /* 回调同你现有写法 */ }
);
// 周边
mapClient.getSearchForPOIServices().peripheralSearchAPI(
params,
new RpcRequestUtils.Callback<PlaceTextSearchResponse>() { /* 回调同你现有写法 */ }
);
// 输入提示
mapClient.getSearchForPOIServices().inputTipsAPI(
params,
new RpcRequestUtils.Callback<PlaceTextSearchResponse>() { /* 回调同你现有写法 */ }
);3 响应结构(PlaceTextSearchResponse)
| 字段路径 | 类型 | 可空 | 单位/取值 | 说明 | 服务端字段 |
|---|---|---|---|---|---|
| status | int | 否 | — | 业务状态码,10000 成功 | status |
| msg | string | 是 | — | 文本提示 | msg |
| traceId | string | 是 | — | TraceId | trace_id |
| results | array<object> | 是 | — | 结果列表 | results |
| results[].name | string | 是 | — | POI 名称 | name |
| results[].address | string | 是 | — | 地址(不一定完整) | address |
| results[].addressAll | string | 是 | — | 完整地址(展示优先) | address_all |
| results[].province | string | 是 | — | 省 | province |
| results[].city | string | 是 | — | 市 | city |
| results[].district | string | 是 | — | 区/县 | district |
| results[].adcode | string | 是 | — | 行政编码 | adcode |
| results[].distance | int | 是 | 米 | 周边常见;关键词/提示多缺省 | distance |
| results[].location | object | 是 | — | 坐标对象(经度在前) | location |
| results[].location.lng | double | 是 | — | 经度 | lng |
| results[].location.lat | double | 是 | — | 纬度 | lat |
提示:关键词/输入提示通常不返回
distance。
4 读取示例(取Top1)
java
PlaceTextSearchResponse r = data;
if (r != null && r.results != null && !r.results.isEmpty()) {
PlaceTextSearchResponse.PlaceItem p = r.results.get(0);
String addr = (p.addressAll != null && !p.addressAll.isEmpty()) ? p.addressAll : p.address;
Double lng = (p.location != null) ? p.location.lng : null;
Double lat = (p.location != null) ? p.location.lat : null;
Integer dist = p.distance;
String line = "Top1: " + p.name
+ " | 地址=" + stringOrDash(addr)
+ " | 坐标=" + stringOrDash(lng) + "," + stringOrDash(lat)
+ " | 距离=" + (dist == null ? "-" : dist + "米");
// tv.setText(line);
}