地图SDK提供了一系列的接口来方便用户获取高德LBS数据,目前主要支持的检索有:
? 兴趣点搜索:
1. 关键字搜索。
2. 周边搜索。
3. 指定区域搜索。
4. 团购/优惠搜索。
5. POI深度信息。
? 输入提示搜索。
? 路径规划
? 公交线路查询。
? 坐标/地址查询。
int currentPage = 0;
// 第一个参数表示搜索字符串,第二个参数表示POI搜索类型,二选其一
// 第三个参数表示POI搜索区域的编码,必设
query = new PoiSearch.Query("kfc", "餐饮", "北京");
// 设置每页最多返回多少条poiitem
query.setPageSize(10);
// 设置查第一页
query.setPageNum(currentPage);
PoiSearch poiSearch = new PoiSearch(this, query);
//设置搜索完成后的回调
poiSearch.setOnPoiSearchListener(this);
//进行异步查询
poiSearch.searchPOIAsyn();
@Override
public void onPoiItemSearched(PoiItem arg0, int arg1) {
}
public void onPoiSearched(PoiResult result, int rCode) {
if (result != null && result.getQuery() != null) {
if (result.getQuery().equals(query)) {
poiResult = result;
List<PoiItem> poiItems = poiResult.getPois();
if (poiItems != null && poiItems.size() > 0) {
// 清理之前的图标,将查询结果显示在地图上
aMap.clear();
PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems);
poiOverlay.removeFromMap();
poiOverlay.addToMap();
poiOverlay.zoomToSpan();
}else{
// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
List<SuggestionCity> suggestionCities = poiResult
.getSearchSuggestionCitys();
}
}
}
完整代码如下:
package com.hang.helloamap;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.overlay.PoiOverlay;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.core.SuggestionCity;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.amap.api.services.poisearch.PoiSearch.Query;
public class BasePoiSearchActivity extends Activity implements
PoiSearch.OnPoiSearchListener {
MapView mapView;
AMap aMap;
Query query = null;
PoiResult poiResult = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mapView=new MapView(this);
setContentView(mapView);
mapView.onCreate(savedInstanceState);
aMap = mapView.getMap();
int currentPage = 0;
// 第一个参数表示搜索字符串,第二个参数表示POI搜索类型,二选其一
// 第三个参数表示POI搜索区域的编码,必设
query = new PoiSearch.Query("kfc", "餐饮", "北京");
query.setPageSize(10);// 设置每页最多返回多少条poiitem
query.setPageNum(currentPage);// 设置查第一页
PoiSearch poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(this);
poiSearch.searchPOIAsyn();
}
@Override
public void onPoiItemSearched(PoiItem arg0, int arg1) {
}
public void onPoiSearched(PoiResult result, int rCode) {
if (result != null && result.getQuery() != null) {
if (result.getQuery().equals(query)) {
poiResult = result;
List<PoiItem> poiItems = poiResult.getPois();
if (poiItems != null && poiItems.size() > 0) {
aMap.clear();// 清理之前的图标
PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems);
poiOverlay.removeFromMap();
poiOverlay.addToMap();
poiOverlay.zoomToSpan();
}else{
// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
List<SuggestionCity> suggestionCities = poiResult
.getSearchSuggestionCitys();
}
}
}
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
在关键字基础上通过PoiSearch.SearchBound(LatLonPoint center, int
radiusInMeters) 设置周边圆形搜索范围。参数 “ center” 为搜索的中心点
坐标,“ radiusInMeters” 为周边搜索的范围。
为了更好的演示效果,这里多添加一些部分
package com.hang.helloamap;
import java.util.List;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CircleOptions;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.overlay.PoiOverlay;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.core.SuggestionCity;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.amap.api.services.poisearch.PoiSearch.Query;
import com.amap.api.services.poisearch.PoiSearch.SearchBound;
import com.pansoft.oilgas.gaodenavigation.R;
public class PoiBoundSearchActivity extends Activity implements
PoiSearch.OnPoiSearchListener {
MapView mapView;
AMap aMap;
Query query = null;
PoiResult poiResult = null;
Marker locationMarker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mapView = new MapView(this);
setContentView(mapView);
mapView.onCreate(savedInstanceState);
aMap = mapView.getMap();
int currentPage = 0;
// 第一个参数表示搜索字符串,第二个参数表示POI搜索类型,二选其一
// 第三个参数表示POI搜索区域的编码,必设
query = new PoiSearch.Query("", "餐厅", "北京");
query.setPageSize(10);// 设置每页最多返回多少条poiitem
query.setPageNum(currentPage);// 设置查第一页
PoiSearch poiSearch = new PoiSearch(this, query);
locationMarker = aMap.addMarker(new MarkerOptions()
//定义marker 图标的锚点。锚点是marker 图标接触地图平面的点。
//图标的左顶点为(0,0)点,右底点为(1,1)点。
//默认为(0.5,1.0)
.anchor(0.5f, 1)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher))
.position(new LatLng(39.908127, 116.375257))
.title("西单为中心点,查其周边"));
//展示一下搜索中心位置,以及一些文本信息
locationMarker.showInfoWindow();
//在要搜索的范围中添加一个白色背景&&黑色边线,凸显搜索范围
{
CircleOptions circleOptions = new CircleOptions();
circleOptions.center(locationMarker.getPosition());
circleOptions.radius(200);
circleOptions.fillColor(Color.WHITE);
circleOptions.strokeColor(Color.BLACK);
circleOptions.strokeWidth(10);
aMap.addCircle(circleOptions);
}
//设置搜索的范围
poiSearch.setBound(new SearchBound(
new LatLonPoint(locationMarker.getPosition().latitude,
locationMarker.getPosition().longitude), 200));
poiSearch.setOnPoiSearchListener(this);
poiSearch.searchPOIAsyn();
}
@Override
public void onPoiItemSearched(PoiItem arg0, int arg1) {
}
public void onPoiSearched(PoiResult result, int rCode) {
// 搜索POI的结果
if (result != null && result.getQuery() != null) {
// 是否是同一条
if (result.getQuery().equals(query)) {
poiResult = result;
// 取得搜索到的poiitems有多少页
int resultPages = poiResult.getPageCount();
// 取得第一页的poiitem数据,页数从数字0开始
List<PoiItem> poiItems = poiResult.getPois();
if (poiItems != null && poiItems.size() > 0) {
// aMap.clear();// 清理之前的图标
PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems);
poiOverlay.removeFromMap();
poiOverlay.addToMap();
poiOverlay.zoomToSpan();
} else {
// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
List<SuggestionCity> suggestionCities = poiResult
.getSearchSuggestionCitys();
}
}
}
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
使用一个简单的例子来进行说明
使用一个简单的布局,获取一个AutoCompleteTextView的实例
<?xml version="1.0" encoding="utf-8"?>
<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/autocomplete"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
package com.hang.helloamap;
import java.util.ArrayList;
public class PoiInputInfoActivity extends Activity implements TextWatcher {
AutoCompleteTextView autoCompleteTextView;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_poi_input_info);
autoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.autocomplete);
autoCompleteTextView.addTextChangedListener(this);
autoCompleteTextView.setThreshold(1);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!TextUtils.isEmpty(s.toString())) {
Inputtips inputTips = new Inputtips(this,
//搜索结果的处理
new InputtipsListener() {
@Override
public void onGetInputtips(final List<Tip> tipList, int rCode) {
if(tipList!=null&&tipList.size()>0){
List<String> listString = new ArrayList<>();
for (int i = 0; i < tipList.size(); i++) {
listString.add(tipList.get(i).getName());
}
adapter = new ArrayAdapter<String>(
PoiInputInfoActivity.this,
android.R.layout.simple_dropdown_item_1line);
autoCompleteTextView.setAdapter(adapter);
adapter.addAll(listString);
}
}
});
try {
// 发送输入提示请求
// 第一个参数表示提示关键字,第二个参数默认代表全国,也可以为城市区号
inputTips.requestInputtips(s.toString(), "");
} catch (AMapException e) {
e.printStackTrace();
}
}
}
}
未完待续…
原文:http://blog.csdn.net/guchuanhang/article/details/51726034