Android高德地图POI搜索地图
高德地图是一款非常流行的地图应用,它提供了许多功能强大的API,包括POI(兴趣点)搜索功能。在Android应用开发中,我们可以利用高德地图的API来实现POI搜索功能,让用户可以方便地在地图上找到感兴趣的地点。
准备工作
在开始编写代码之前,我们需要先申请高德地图的开发者账号,并获取到开发者密钥。具体的申请过程可以参考高德地图开发者网站上的相关文档。
添加依赖库
首先,我们需要在项目的build.gradle文件中添加高德地图的依赖库。在dependencies中添加以下代码:
implementation 'com.amap.api:3dmap:5.6.0'
implementation 'com.amap.api:search:5.6.0'
这样就可以引入高德地图的SDK和搜索功能的SDK。
POI搜索功能实现
下面我们来实现POI搜索功能。首先,在Activity的布局文件中添加一个MapView组件,用于显示地图:
<com.amap.api.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
然后,在Activity的代码中初始化MapView,并获取到地图对象:
public class MainActivity extends AppCompatActivity {
private MapView mapView;
private AMap aMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap = mapView.getMap();
}
}
接下来,我们可以添加一个搜索框,让用户输入搜索的关键词:
<EditText
android:id="@+id/searchEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入关键词" />
<Button
android:id="@+id/searchButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="搜索" />
在Activity的代码中,我们可以获取到搜索框和搜索按钮的实例,并添加点击事件监听器:
public class MainActivity extends AppCompatActivity {
private MapView mapView;
private AMap aMap;
private EditText searchEditText;
private Button searchButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap = mapView.getMap();
}
searchEditText = findViewById(R.id.searchEditText);
searchButton = findViewById(R.id.searchButton);
searchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchPOI();
}
});
}
接下来,我们需要调用高德地图的POI搜索API来进行搜索。在searchPOI方法中,我们可以根据用户输入的关键词进行搜索,并将搜索结果在地图上显示出来:
public class MainActivity extends AppCompatActivity {
private MapView mapView;
private AMap aMap;
private EditText searchEditText;
private Button searchButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap = mapView.getMap();
}
searchEditText = findViewById(R.id.searchEditText);
searchButton = findViewById(R.id.searchButton);
searchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchPOI();
}
});
}
private void searchPOI() {
String keyword = searchEditText.getText().toString();
PoiSearch.Query query = new PoiSearch.Query(keyword, "", "");
query.setPageSize(20);
query.setPageNum(1);
PoiSearch poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {
@Override
public void onPoiSearched(PoiResult result, int rCode) {
if (rCode == 1000) {
if (result != null && result.getQuery() != null) {
List<PoiItem> poiItems = result.getPois();
// 在地图上显示搜索结果
for (PoiItem poiItem :