Android類似微信詳細地址選擇(高德地圖)
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

利用高德地圖的API做了一個類似微信傳送位置介面地址選擇,介面就3個,一個選擇地址(周邊搜尋),一個搜尋介面(關鍵字搜尋),最後將選擇的地址資訊返回主介面,效果圖如下:

   

對於詳細地址選擇,在專案中難免會遇到,比如電商app,旅遊app等等,下面簡單講解如何實現:

註冊高德開發者賬號,建立應用,獲取AppId

1.建立應用過


紅色※為必填項,其中 SHA1獲取方式

確認隨後得到appid

2.下載高德SDK:

高德SDK

二、地址位置選擇

1.地址選擇介面首先需要定位

private void InitLocation() {
//初始化client
locationClient = new AMapLocationClient(this.getApplicationContext());
//設定定位引數
locationClient.setLocationOption(getDefaultOption());
// 設定定位監聽
locationClient.setLocationListener(locationListener);
locationClient.startLocation();
}

2.定位結果回撥

/**
* 定位監聽
*/
AMapLocationListener locationListener = new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation loc) {
if (null != loc) {
//解析定位結果
String city = loc.getCity();
Log.e("yufs","當前經度" loc.getLongitude() "當前維度:" loc.getLatitude());
mLoc=loc;
lp.setLongitude(loc.getLongitude());
lp.setLatitude(loc.getLatitude());
//得到定位資訊
Log.e("yufs","定位詳細資訊:" loc.toString());
mLatitude=loc.getLatitude();
mLongitude=loc.getLongitude();
//初始化地圖物件
initMap(loc);
//查詢周邊
doSearchQuery(loc.getCity(),loc.getLatitude(),loc.getLongitude());
} else {
Toast.makeText(LocationSelectActivity.this, "定位失敗,請開啟位置許可權", Toast.LENGTH_SHORT).show();
}
}
};

3.定位成功回撥中進行周邊搜尋


/**
* 開始進行poi搜尋
*/
protected void doSearchQuery(String city,double latitude,double longitude) {
String mType="汽車服務|汽車銷售|汽車維修|摩托車服務|餐飲服務|購物服務|生活服務|體育休閒服務|醫療保健服務|住宿服務|風景名勝|商務住宅|政府機構及社會團體|科教文化服務|交通設施服務|金融保險服務|公司企業|道路附屬設施|地名地址資訊|公共設施";
query = new PoiSearch.Query("", mType, city);// 第一個參數列示搜尋字串,第二個參數列示poi搜尋型別,第三個參數列示poi搜尋區域(空字串代表全國)
query.setPageSize(20);// 設定每頁最多返回多少條poiitem
query.setPageNum(currentPage);// 設定查第一頁
if (lp != null) {
poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(this);
//以當前定位的經緯度為準搜尋周圍5000米範圍
// 設定搜尋區域為以lp點為圓心,其周圍5000米範圍
poiSearch.setBound(new PoiSearch.SearchBound(new LatLonPoint(latitude,longitude), 1000, true));//
poiSearch.searchPOIAsyn();// 非同步搜尋
}
}

PoiSearch.SearchBound物件以某一中心點半徑5000米的圓搜尋結果,PoiSearch.Query()的如果第二個引數未填寫會預設返回“餐飲服務”、“商務住宅”、“生活服務”這三種類別的POI,程式碼中基本上把高德所有的搜尋型別都返回了,你可以根據自己情況而定填寫搜尋型別


4.poi搜尋結果回撥監聽,獲取資料顯示


PoiSearch.OnPoiSearchListener onPoiSearchListener = new PoiSearch.OnPoiSearchListener() {
@Override
public void onPoiSearched(PoiResult result, int rCode) {
if (rCode == 1000) {
if (result != null && result.getQuery() != null) {// 搜尋poi的結果
if (result.getQuery().equals(poiQuery)) {// 是否是同一條
lv_list.onLoadComplete();
List<PoiItem> poiItems = result.getPois();// 取得第一頁的poiitem資料,頁數從數字0開始
List<PoiBean> tem=new ArrayList<>();
if (poiItems != null && poiItems.size() > 0) {
for (int i = 0; i < poiItems.size(); i  ) {
PoiItem poiItem = poiItems.get(i);
PoiBean bean=new PoiBean();
bean.setTitleName(poiItem.getTitle());
bean.setCityName(poiItem.getCityName());
bean.setAd(poiItem.getAdName());
bean.setSnippet(poiItem.getSnippet());
bean.setPoint(poiItem.getLatLonPoint());
Log.e("yufs","" poiItem.getTitle() "," poiItem.getProvinceName() ","
poiItem.getCityName() ","
poiItem.getAdName() ","//區
poiItem.getSnippet() ","
poiItem.getLatLonPoint() "\n");
tem.add(bean);
}
poiData.addAll(tem);
mAdapter.notifyDataSetChanged();
/* if (isSearch){
moveMapCamera(poiItems.get(0).getLatLonPoint().getLatitude(),poiItems.get(0).getLatLonPoint().getLongitude());
}*/
}
}
}
}
}
@Override
public void onPoiItemSearched(PoiItem poiItem, int i) {
}
};

其中PoiItem物件為高德提供的一個poi實體類,可以檢視返回的資料結構如下:


然後你也可以選擇其中有用的資訊封裝自己的bean,比如我的PoiBean,獲取有用的資料之後顯示在列表上,到此第一頁搞定


三、關鍵字搜尋


protected void doSearchQuery(String keyWord) {
if(currentPage==0) {
savePoiItem.clear();
ll_loading.setVisibility(View.VISIBLE);// 顯示進度框
lv_list.setVisibility(View.GONE);
}
query = new PoiSearch.Query(keyWord, "", "");// 第一個參數列示搜尋字串,第二個參數列示poi搜尋型別,第三個參數列示poi搜尋區域(空字串代表全國)
query.setPageSize(10);// 設定每頁最多返回多少條poiitem
query.setPageNum(currentPage);// 設定查第一頁
query.setCityLimit(true);
poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(this);
poiSearch.searchPOIAsyn();
}

同樣呼叫剛才的搜尋介面,只不過加上了關鍵字,去掉了搜尋範圍的限制,搜尋回撥介面同上,將搜尋結果顯示出來,然後搜尋頁面搞定(提醒:demo中使用自己在高德申請的Appkey,然後就可檢視效果了)


最後附上原始碼地址:

下載地址

相關文章

程式語言 最新文章