高德地图定位+搜索自动提示+poi搜索+移动地图选址
2017-01-12 14:30
761 查看
我们需要完成如图的功能。
分4步:
首先先看布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <View style="@style/separation_line"/> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/banner_bg"> <RelativeLayout android:id="@+id/lay_back" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@drawable/common_selector_default" android:paddingEnd="8dp" android:paddingLeft="14dp" android:paddingRight="8dp" android:paddingStart="14dp"> <ImageView android:id="@+id/iv_back" android:layout_width="18dp" android:layout_height="18dp" android:layout_centerVertical="true" android:background="@drawable/common_ic_back"/> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="8dp" android:background="@drawable/common_shape_search_view_bg" android:gravity="center" android:orientation="vertical"> <AutoCompleteTextView android:id="@+id/et_search" android:layout_width="match_parent" android:layout_height="40dp" android:background="@null" android:drawableLeft="@drawable/common_icon_search" android:drawablePadding="5dp" android:hint="搜索地点" android:imeOptions="actionSearch" android:padding="10dp" android:singleLine="true" android:textColor="@color/gray_66" android:textSize="16sp"/> </LinearLayout> </LinearLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <com.amap.api.maps.MapView android:id="@+id/mapView" android:clickable="true" android:layout_width="match_parent" android:layout_height="match_parent" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@mipmap/app_loc" android:translationY="-10dp" /> </FrameLayout> <RelativeLayout android:background="@color/gray_dd" android:layout_width="match_parent" android:layout_height="50dp" android:paddingLeft="10dp" android:paddingRight="10dp"> <TextView android:id="@+id/address" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignTop="@+id/ensure" android:layout_toLeftOf="@+id/ensure" android:maxLines="1" android:text="" android:textColor="#333333" android:textSize="13dp" android:visibility="gone"/> <TextView android:id="@+id/addressDesc" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toLeftOf="@+id/ensure" android:layout_centerVertical="true" android:maxLines="1" android:textColor="#999999" android:textSize="12dp" /> <Button android:id="@+id/btn_ensure" android:layout_width="50dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginLeft="15dp" android:background="@drawable/common_selector_green_button" android:text="确定" android:textColor="#ffffff" android:textSize="13dp" /> </RelativeLayout> <LinearLayout android:id="@+id/ll_poi" android:visibility="gone" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="vertical"> <ListView android:id="@+id/lv_data" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView> </LinearLayout> </LinearLayout>
首先进来是定位自己的位置。
这里封装了一下地图的定位
ALocationClientFactory类
public class ALocationClientFactory { public static final String DEFAULT_TAG = "Default"; public static AMapLocationClientOption createDefaultOption() { AMapLocationClientOption option = new AMapLocationClientOption(); //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。 option.setInterval(1000); return option; } public static AMapLocationClientOption createOnceOption() { AMapLocationClientOption option = new AMapLocationClientOption(); //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //获取一次定位结果: //该方法默认为false。 // option.setOnceLocation(true); //获取最近3s内精度最高的一次定位结果: //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。 option.setOnceLocationLatest(true); return option; } public static AMapLocationClient createLocationClient(Context context, AMapLocationClientOption option, AMapLocationListener listener) { AMapLocationClient client = new AMapLocationClient(context); client.setLocationOption(option); client.setLocationListener(listener); return client; } public static AMapLocationClient createDefaultLocationClient(Context context) { return createLocationClient(context, createDefaultOption(), new EventBusLocationListener(DEFAULT_TAG)); } }
新建类SearchLocationActivity。
import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AutoCompleteTextView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.LatLng; import com.autonavi.amap.mapcore.ERROR_CODE; import com.xw.changba.bus.R; import com.xw.changba.bus.ui.BaseActivity; import com.xw.changba.bus.ui.demand.entity.LocationBean; import com.xw.vehicle.mgr.common.AppUtil; import com.xw.vehicle.mgr.ext.amap.location.ALocationClientFactory; import com.xw.vehicle.mgr.ext.amap.location.GeoCoderUtil; import com.xw.vehicle.mgr.ext.amap.model.LatLngEntity; import java.util.ArrayList; import java.util.List; public class SearchLocationActivity extends BaseActivity implements View.OnClickListener, AMapLocationListener, AdapterView.OnItemClickListener, TextWatcher, AMap.OnCameraChangeListener { private MapView mMapView = null; private AMap aMap; private AMapLocationClient locationClient; private ImageView iv_back; private TextView tvAddressDesc; private ListView lv_data; private AutoCompleteTextView autotext; private LinearLayout ll_poi; private PoiAdapter poiAdapter; private LocationBean currentLoc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.app_activity_search); initViews(savedInstanceState); showLoadingDialog(); //定位初始化 locationClient = ALocationClientFactory.createLocationClient(this, ALocationClientFactory.createDefaultOption(), this); //开启定位 locationClient.startLocation(); } private void initViews(Bundle savedInstanceState) { mMapView = (MapView) findViewById(R.id.mapView); mMapView.onCreate(savedInstanceState); // 此方法必须重写 aMap = mMapView.getMap(); UiSettings uiSettings = aMap.getUiSettings(); uiSettings.setZoomControlsEnabled(false); //隐藏缩放按钮 aMap.setOnCameraChangeListener(this); // 添加移动地图事件监听器 findViewById(R.id.btn_ensure).setOnClickListener(this); ll_poi = (LinearLayout) findViewById(R.id.ll_poi); iv_back = (ImageView) findViewById(R.id.iv_back); autotext =(AutoCompleteTextView) findViewById(R.id.et_search); autotext.addTextChangedListener(this); autotext.setOnItemClickListener(this); iv_back.setOnClickListener(this); tvAddressDesc = (TextView) findViewById(R.id.addressDesc); lv_data = (ListView) findViewById(R.id.lv_data); poiAdapter = new PoiAdapter(this); lv_data.setOnItemClickListener(this); lv_data.setAdapter(poiAdapter); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.iv_back: finish(); break; case R.id.btn_ensure: if(currentLoc != null){ Intent intent = new Intent(); intent.putExtra(EXTRA_DATA, currentLoc); setResult(RESULT_OK, intent); finish(); } break; } } @Override public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() <= 0) { return; }else { //高德地图的输入的自动提示,代码在后面 InputTipTask.getInstance(this).setAdapter(autotext).searchTips(s.toString().trim(), ""); } } @Override public void afterTextChanged(Editable editable) { } @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { if(adapterView.getId() == R.id.lv_data){ //POI的地址的listview的item的点击 LocationBean bean = (LocationBean) poiAdapter.getItem(i); Intent intent = new Intent(); intent.putExtra(EXTRA_DATA, bean); setResult(RESULT_OK, intent); finish(); }else{ //自动提示的内容的item的点击 //保存自动提示的列表的内容,供后面使用 List<LocationBean> dataLists = InputTipTask.getInstance(SearchLocationActivity.this).getBean(); //点击后地图中心移动 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(dataLists.get(i).getLat(),dataLists.get(i).getLon()), 15)); } } /**定位的回调*/ @Override public void onLocationChanged(AMapLocation aMapLocation) { dismissLoadingDialog(); if (aMapLocation != null && aMapLocation.getErrorCode() == ERROR_CODE.ERROR_NONE) { //移动地图中心到当前的定位位置 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()), 15)); //获取定位信息 double latitude = aMapLocation.getLatitude(); double longitude = aMapLocation.getLongitude(); String addressStr = aMapLocation.getCity() + aMapLocation.getDistrict() + aMapLocation.getStreet(); if (!TextUtils.isEmpty(aMapLocation.getAoiName())) { addressStr += aMapLocation.getAoiName(); }else { addressStr = addressStr + aMapLocation.getPoiName() + "附近"; } resultAddress = addressStr; tvAddressDesc.setText(addressStr); //这里是定位完成之后开始poi的附近搜索,代码在后面 PoiSearchTask.getInstance(this).setAdapter(poiAdapter).onSearch("", "",latitude,longitude); } } /**正在移动地图事件回调*/ @Override public void onCameraChange(CameraPosition cameraPosition) { } /** 移动地图结束事件的回调*/ @Override public void onCameraChangeFinish(final CameraPosition cameraPosition) { LatLngEntity latLngEntity = new LatLngEntity(cameraPosition.target.latitude, cameraPosition.target.longitude); //地理反编码工具类,代码在后面 GeoCoderUtil.getInstance(SearchLocationActivity.this).geoAddress(latLngEntity, new GeoCoderUtil.GeoCoderAddressListener() { @Override public void onAddressResult(String result) { if(!autotext.getText().toString().trim().equals("")){ //输入地址后的点击搜索 tvAddressDesc.setText(autotext.getText().toString().trim()); currentLoc = new LocationBean(cameraPosition.target.longitude,cameraPosition.target.latitude,autotext.getText().toString().trim(),""); }else{ //拖动地图 tvAddressDesc.setText(result); currentLoc = new LocationBean(cameraPosition.target.longitude,cameraPosition.target.latitude,result,""); } //地图的中心点位置改变后都开始poi的附近搜索 PoiSearchTask.getInstance(SearchLocationActivity.this).setAdapter(poiAdapter).onSearch("", "",cameraPosition.target.latitude,cameraPosition.target.longitude); } }); } @Override protected void onResume() { super.onResume(); mMapView.onResume(); } @Override protected void onPause() { super.onPause(); mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override protected void onDestroy() { mMapView.onDestroy(); if (locationClient != null) { locationClient.stopLocation(); locationClient.onDestroy(); } super.onDestroy(); } //POI搜索显示地址adapter class PoiAdapter extends BaseAdapter { private List<LocationBean> datas = new ArrayList<>(); private static final int RESOURCE = R.layout.app_list_item_poi; public PoiAdapter(Context context) {} @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh = null; if(convertView == null){ vh = new ViewHolder(); convertView = getLayoutInflater().inflate(RESOURCE, null); vh.tv_title = (TextView) convertView.findViewById(R.id.address); vh.tv_text = (TextView) convertView.findViewById(R.id.addressDesc); convertView.setTag(vh); }else{ vh = (ViewHolder) convertView.getTag(); } LocationBean bean = (LocationBean) getItem(position); vh.tv_title.setText(bean.getTitle()); vh.tv_text.setText(bean.getContent()); return convertView; } private class ViewHolder{ public TextView tv_title; public TextView tv_text; } public void setData(List<LocationBean> datas){ dismissLoadingDialog(); this.datas = datas; if(datas.size()>0){ ll_poi.setVisibility(View.VISIBLE); }else{ AppUtil.showToast(SearchLocationActivity.this,"没有搜索结果"); ll_poi.setVisibility(View.GONE); } } } }
封装的地图的搜索自动提示类InputTipTask
import android.content.Context; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import com.amap.api.services.help.Inputtips; import com.amap.api.services.help.InputtipsQuery; import com.amap.api.services.help.Tip; import com.xw.changba.bus.ui.demand.entity.LocationBean; import java.util.ArrayList; import java.util.List; public class InputTipTask implements Inputtips.InputtipsListener { private static InputTipTask mInstance; private Inputtips mInputTips; private Context mContext; private AutoCompleteTextView et; private List<LocationBean> dataLists = new ArrayList<>(); private InputTipTask(Context context) { this.mContext = context; } //单例模式 public static InputTipTask getInstance(Context context) { if (mInstance == null) { synchronized (InputTipTask.class) { if (mInstance == null) { mInstance = new InputTipTask(context); } } } return mInstance; } public InputTipTask setAdapter(AutoCompleteTextView et) { this.et = et; return this; } public List<LocationBean> getBean() { return dataLists; } public void searchTips(String keyWord, String city) { //第二个参数默认代表全国,也可以为城市区号 InputtipsQuery inputquery = new InputtipsQuery(keyWord, city); inputquery.setCityLimit(true); mInputTips = new Inputtips(mContext, inputquery); mInputTips.setInputtipsListener(this); mInputTips.requestInputtipsAsyn(); } @Override public void onGetInputtips(final List<Tip> tipList, int rCode) { if (rCode == 1000) { ArrayList<String> datas = new ArrayList<>(); if(tipList != null){ dataLists.clear(); for(Tip tip:tipList){ datas.add(tip.getName()); dataLists.add(new LocationBean(tip.getPoint().getLongitude(),tip.getPoint().getLatitude(),tip.getAddress(),tip.getDistrict())); } } ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(mContext, android.R.layout.simple_list_item_1,datas); et.setAdapter(arrayAdapter); arrayAdapter.notifyDataSetChanged(); } } }
封装的POI搜索类PoiSearchTask
import android.content.Context; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.core.PoiItem; import com.amap.api.services.poisearch.PoiResult; import com.amap.api.services.poisearch.PoiSearch; import com.amap.api.services.poisearch.PoiSearch.SearchBound; import com.xw.changba.bus.ui.demand.entity.LocationBean; import java.util.ArrayList; public class PoiSearchTask implements PoiSearch.OnPoiSearchListener { private static PoiSearchTask mInstance; private SearchLocationActivity.PoiAdapter mAdapter; private PoiSearch mSearch; private Context mContext; private PoiSearchTask(Context context){ this.mContext = context; } public static PoiSearchTask getInstance(Context context){ if(mInstance == null){ synchronized (PoiSearchTask.class) { if(mInstance == null){ mInstance = new PoiSearchTask(context); } } } return mInstance; } public PoiSearchTask setAdapter(SearchLocationActivity.PoiAdapter adapter){ this.mAdapter = adapter; return this; } public void onSearch(String key, String city,double lat,double lng){ // 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) PoiSearch.Query query = new PoiSearch.Query(key, "", city); mSearch = new PoiSearch(mContext, query); mSearch.setBound(new SearchBound(new LatLonPoint(lat, lng), 2000));//设置周边搜索的中心点以及半径 //设置异步监听 mSearch.setOnPoiSearchListener(this); //查询POI异步接口 mSearch.searchPOIAsyn(); } @Override public void onPoiSearched(PoiResult poiResult, int rCode) { if(rCode == 1000) { if (poiResult != null && poiResult.getQuery() != null) { ArrayList<LocationBean> datas = new ArrayList<>(); ArrayList<PoiItem> items = poiResult.getPois(); for (PoiItem item : items) { //获取经纬度对象 LatLonPoint llp = item.getLatLonPoint(); double lon = llp.getLongitude(); double lat = llp.getLatitude(); //获取标题 String title = item.getTitle(); //获取内容 String text = item.getSnippet(); datas.add(new LocationBean(lon, lat, title, text)); } mAdapter.setData(datas); mAdapter.notifyDataSetChanged(); } } } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { } }
封装的POI搜索类LocationBean
public class LocationBean implements Serializable{ private double lon; private double lat; private String title; private String content; public LocationBean(double lon,double lat,String title,String content){ this.lon = lon; this.lat = lat; this.title = title; this.content = content; } public double getLon() { return lon; } public double getLat() { return lat; } public String getTitle() { return title; } public String getContent() { return content; } }
一些工具类
public class LatLngEntity { private final double longitude; // 经度 private final double latitude; // 纬度 /** * @param value e.g "113.4114889842685,23.172753522587282" */ public LatLngEntity(String value) { this.longitude = Double.parseDouble(value.split(",")[0]); this.latitude = Double.parseDouble(value.split(",")[1]); } public LatLngEntity(double latitude, double longitude) { this.longitude = longitude; this.latitude = latitude; } public LatLngEntity(LatLonPoint latLonPoint) { this.longitude = latLonPoint.getLongitude(); this.latitude = latLonPoint.getLatitude(); } public double getLatitude() { return latitude; } public double getLongitude() { return longitude; } }
GeoCoderUtil类
import android.content.Context; import android.text.TextUtils; import com.amap.api.services.core.AMapException; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.geocoder.GeocodeAddress; import com.amap.api.services.geocoder.GeocodeQuery; import com.amap.api.services.geocoder.GeocodeResult; import com.amap.api.services.geocoder.GeocodeSearch; import com.amap.api.services.geocoder.RegeocodeAddress; import com.amap.api.services.geocoder.RegeocodeQuery; import com.amap.api.services.geocoder.RegeocodeResult; import com.xw.vehicle.mgr.ext.amap.model.LatLngEntity; public class GeoCoderUtil implements GeocodeSearch.OnGeocodeSearchListener { private GeocodeSearch geocodeSearch; private GeoCoderAddressListener geoCoderAddressListener; private GeoCoderLatLngListener geoCoderLatLngListener; private static GeoCoderUtil geoCoderUtil; public static GeoCoderUtil getInstance(Context context) { if (null == geoCoderUtil) { geoCoderUtil = new GeoCoderUtil(context); } return geoCoderUtil; } private GeoCoderUtil(Context context) { geocodeSearch = new GeocodeSearch(context); geocodeSearch.setOnGeocodeSearchListener(this); } /** * 经纬度转地址描述 **/ public void geoAddress(String latLng, GeoCoderAddressListener geoCoderAddressListener) { if (TextUtils.isEmpty(latLng)) { geoCoderAddressListener.onAddressResult(""); return; } this.geoAddress(new LatLngEntity(latLng), geoCoderAddressListener); } /** * 经纬度转地址描述 **/ public void geoAddress(LatLngEntity latLngEntity, GeoCoderAddressListener geoCoderAddressListener) { if (latLngEntity == null) { geoCoderAddressListener.onAddressResult(""); return; } this.geoCoderAddressListener = geoCoderAddressListener; LatLonPoint latLonPoint = new LatLonPoint(latLngEntity.getLatitude(), latLngEntity.getLongitude()); // 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200, GeocodeSearch.AMAP); geocodeSearch.getFromLocationAsyn(query);// 设置异步逆地理编码请求 } /** * 经纬度转地址描述,同步方法 **/ public String geoAddress(LatLngEntity latLngEntity) { if (latLngEntity == null) { return ""; } this.geoCoderAddressListener = geoCoderAddressListener; LatLonPoint latLonPoint = new LatLonPoint(latLngEntity.getLatitude(), latLngEntity.getLongitude()); // 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200, GeocodeSearch.AMAP); try { RegeocodeAddress regeocodeAddress = geocodeSearch.getFromLocation(query);// 设置异步逆地理编码请求 String formatAddress = regeocodeAddress.getFormatAddress(); return formatAddress; } catch (AMapException e) { e.printStackTrace(); } return ""; } /** * 地址描述转经纬度 **/ public void geoLatLng(String cityName, String address, GeoCoderLatLngListener geoCoderLatLngListener) { if (TextUtils.isEmpty(cityName) || TextUtils.isEmpty(address)) { geoCoderLatLngListener.onLatLngResult(null); return; } this.geoCoderLatLngListener = geoCoderLatLngListener; GeocodeQuery query = new GeocodeQuery(address, cityName); geocodeSearch.getFromLocationNameAsyn(query); } @Override public void onRegeocodeSearched(RegeocodeResult result, int rCode) { if (rCode != 1000 || result == null || result.getRegeocodeAddress() == null) { geoCoderAddressListener.onAddressResult(""); return; } RegeocodeAddress regeocodeAddress = result.getRegeocodeAddress(); String addressDesc = regeocodeAddress.getCity() + regeocodeAddress.getDistrict() + regeocodeAddress.getTownship() + regeocodeAddress.getStreetNumber().getStreet(); if (regeocodeAddress.getAois().size() > 0) { addressDesc += regeocodeAddress.getAois().get(0).getAoiName(); } geoCoderAddressListener.onAddressResult(addressDesc); } @Override public void onGeocodeSearched(GeocodeResult geocodeResult, int rCode) { if (geocodeResult == null || geocodeResult.getGeocodeAddressList() == null || geocodeResult.getGeocodeAddressList().size() <= 0) { geoCoderLatLngListener.onLatLngResult(null); return; } GeocodeAddress address = geocodeResult.getGeocodeAddressList().get(0); geoCoderLatLngListener.onLatLngResult(new LatLngEntity(address.getLatLonPoint())); } public interface GeoCoderAddressListener { void onAddressResult(String result); } public interface GeoCoderLatLngListener { void onLatLngResult(LatLngEntity latLng); } }
相关文章推荐
- 高德地图定位 poi搜索 移动地图选址显示周边
- 高德js_API开发O2O项目客户端地图定位周边检索 定位选址 POI搜索选址 多边形范围指定城市 不再范围不可服务
- 仿百度外卖3_7_1百度地图拖动定位,显示附近地址poi提示搜索
- 高德地图输入提示,POI搜索并显示经纬度
- 仿百度外卖3_7_1百度地图拖动定位,显示附近地址poi提示搜索
- 高德地图教程_poi搜索和显示
- js地图拖拽功能,定位功能批量分类导入,自动完成搜索
- Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能
- Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能
- Android 高德地图之poi搜索功能的实现代码
- android通过高德地图仿微信发送地址移动地图自动搜索附近店铺及地址(架包和配置参考高德地图官网)
- 高德定位+poi搜索
- 高德地图教程_poi搜索以及显示
- 高德地图引用,搜索定位
- iOS高德地图定位.自定义标注.搜索.分类展示(排版)
- 高德地图之周边搜索及两点间距离计算(Poi的使用)
- Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能
- Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能
- 高德地图之定位篇----->定位、预测天气、围栏、搜索周边、行踪轨迹
- Android--高德地图自动定位