高德地图,仿微信周边位置poi搜索

Android高德地图poi检索仿微信发送位置 最近项目需求把发送定位模块改成类似微信发送位置给好友的效果,我使用了高德地图实现了一个demo,效果图如下:从主界面中我们可以看到中心标记上面显示的就是我们定位的地址,下面是一个listview列表,第一条item的数据就是我们定位得到的地址,下面其余的都是我们根据定位得到的经纬度通过poi周边搜索得到的地址。我们进行了如下操作: 我们点击列表的item,中心标记会移动到该item对象的地址上面去。 阅读详情

高德地图,仿微信周边位置poi搜索


首先要申请一个高德地图开发者账号,建立你的项目,得到key


高德地图官方文档都有介绍,具体可去配置 

http://lbs.amap.com/api/android-sdk/guide/create-project/dev-attention


在AndroidManifest中添加一些权限,



把你申请的项目的key添加到value中来




在libs文件夹下添加需要的jar包



上代码,参照高德的poi文档进行实现,

http://lbs.amap.com/api/android-sdk/guide/map-data/poi/



主代码,Activity

public class New_LocalActivity extends Activity implements LocationSource,
        AMapLocationListener, AMap.OnCameraChangeListener, PoiSearch.OnPoiSearchListener {

    MapView mapView;
    ListView mapList;

    public static final String KEY_LAT = "lat";
    public static final String KEY_LNG = "lng";
    public static final String KEY_DES = "des";
    public static final String KEY_SNI = "snippet";

    private AMapLocationClient mLocationClient;
    private LocationSource.OnLocationChangedListener mListener;
    private LatLng latlng;
    private String city;
    private AMap aMap;
    private String deepType = "";// poi搜索类型
    private String keyWord = "";// poi搜索字符串
    private PoiSearch.Query query;// Poi查询条件类
    private PoiSearch poiSearch;
    private PoiResult poiResult; // poi返回的结果
    private PoiOverlay poiOverlay;// poi图层
    private List<PoiItem> poiItems;// poi数据


    private PoiSearch_adapter adapter;
    private TextView searchButton;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new__local);
        mapView = (MapView) findViewById(R.id.map_local);
        mapList = (ListView) findViewById(R.id.map_list);

        mapView.onCreate(savedInstanceState);
        init();
    }


    private void init() {
        if (aMap == null) {
            aMap = mapView.getMap();
            aMap.setOnCameraChangeListener(this);
            setUpMap();
        }

        deepType = "餐饮服务";
    }

//汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|
//住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|
//金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施

    //-------- 定位 Start ------

    private void setUpMap() {
        if (mLocationClient == null) {
            mLocationClient = new AMapLocationClient(getApplicationContext());
            AMapLocationClientOption mLocationOption = new AMapLocationClientOption();
            //设置定位监听
            mLocationClient.setLocationListener(this);
            //设置为高精度定位模式
            mLocationOption.setOnceLocation(true);
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置定位参数
            mLocationClient.setLocationOption(mLocationOption);
            mLocationClient.startLocation();
        }
        aMap.setLocationSource(this);// 设置定位监听
        aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
        aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
    }

    /**
     * 开始进行poi搜索
     */
    protected void doSearchQuery() {
        aMap.setOnMapClickListener(null);// 进行poi搜索时清除掉地图点击事件
        int currentPage = 0;
// 第一个参数表示搜索字符串keyWord,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
query = new PoiSearch.Query("", deepType, "广州"); query.setPageSize(20);// 设置每页最多返回多少条poiitem query.setPageNum(currentPage);// 设置查第一页 LatLonPoint lp = new LatLonPoint(latlng.latitude, latlng.longitude); poiSearch = new PoiSearch(this, query); poiSearch.setOnPoiSearchListener(this); poiSearch.setBound(new PoiSearch.SearchBound(lp, 5000, true)); // 设置搜索区域为以lp点为圆心,其周围2000米范围 poiSearch.searchPOIAsyn();// 异步搜索 } @Override public void onLocationChanged(AMapLocation aMapLocation) { if (mListener != null && aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { // 显示我的位置 mListener.onLocationChanged(aMapLocation); //设置第一次焦点中心 latlng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude()); aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latlng, 14), 1000, null); city = aMapLocation.getProvince(); doSearchQuery(); } else { String errText = "定位失败," + aMapLocation.getErrorCode() + ": " + aMapLocation.getErrorInfo(); Log.e("AmapErr", errText); } } } @Override public void activate(OnLocationChangedListener listener) { mListener = listener; mLocationClient.startLocation(); } @Override public void deactivate() { mListener = null; if (mLocationClient != null) { mLocationClient.stopLocation(); mLocationClient.onDestroy(); } mLocationClient = null; } @Override public void onCameraChange(CameraPosition cameraPosition) { } @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { latlng = cameraPosition.target; aMap.clear(); aMap.addMarker(new MarkerOptions().position(latlng)); doSearchQuery(); } ArrayList<LocationBean> data = new ArrayList<LocationBean>(); @Override public void onPoiSearched(PoiResult result, int rCode) { if (rCode == 1000) { if (result != null && result.getQuery() != null) {// 搜索poi的结果 if (result.getQuery().equals(query)) {// 是否是同一条 poiResult = result; poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始 data.clear(); for (PoiItem item : poiItems) { //获取经纬度对象 LatLonPoint llp = item.getLatLonPoint(); double lon = llp.getLongitude(); double lat = llp.getLatitude(); //获取标题 String title = item.getTitle(); //获取内容 String text = item.getSnippet(); data.add(new LocationBean(lon, lat, title, text)); } List<SuggestionCity> suggestionCities = poiResult .getSearchSuggestionCitys(); if (data != null && data.size() > 0) { adapter = new PoiSearch_adapter(this, data); mapList.setAdapter(adapter); mapList.setOnItemClickListener(new mOnItemClickListener()); } } } } } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { }//-------- 定位 End ------ @Override protected void onResume() { super.onResume(); mLocationClient.startLocation(); } @Override protected void onPause() { super.onPause(); mLocationClient.stopLocation(); } @Override protected void onDestroy() { mLocationClient.onDestroy(); super.onDestroy(); } private class mOnItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(); intent.putExtra(KEY_LAT, poiItems.get(position).getLatLonPoint().getLatitude()); intent.putExtra(KEY_LNG, poiItems.get(position).getLatLonPoint().getLongitude()); intent.putExtra(KEY_DES, poiItems.get(position).getTitle()); intent.putExtra(KEY_SNI, poiItems.get(position).getSnippet()); setResult(RESULT_OK, intent); finish(); } }}


布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <com.amap.api.maps2d.MapView
        android:id="@+id/map_local"
        android:layout_width="match_parent"
        android:layout_height="200dp"/>


    <ListView
        android:id="@+id/map_list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:divider="#000"
        android:dividerHeight="1dp"
        android:scrollbars="none"/>

</LinearLayout>

Bean类

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;
    }
}

Adapter


public class PoiSearch_adapter extends BaseAdapter {
    private Context ctx;
    private List<LocationBean> list;

    public PoiSearch_adapter(Context context, List<LocationBean> poiList) {
        this.ctx = context;
        this.list = poiList;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = View.inflate(ctx, R.layout.poisearch_item, null);
            holder.poititle = (TextView) convertView.findViewById(R.id.poititle);
            holder.poititle2 = (TextView) convertView.findViewById(R.id.poititle2);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        LocationBean item = (LocationBean) getItem(position);
        holder.poititle.setText(item.getTitle());
        holder.poititle2.setText(item.getContent());
        return convertView;
    }

    private class ViewHolder {
        TextView poititle;
        TextView poititle2;
    }
}

item布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="#d1cece"
              android:orientation="vertical"
              android:padding="8dp"

    >

    <TextView
        android:id="@+id/poititle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:layout_marginLeft="5dp"
        android:gravity="center_vertical"
        android:singleLine="true"
        android:textColor="#000"
        android:text=""
        android:textSize="16sp"/>

    <TextView
        android:id="@+id/poititle2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:layout_marginLeft="5dp"
        android:gravity="center_vertical"
        android:text=""
        android:singleLine="true"
        android:textColor="#000"
        android:textSize="16sp"/>

</LinearLayout>



Android基于高德地图poi仿微信获取位置 Android基于高德地图poi仿微信获取位置 理性选择,适度copy GitHub地址: AMapDemo in GitHub 1.打开页面自动定位,同时搜索周边所有poi 2.点击搜索按钮,输入关键子,获取关键字搜索结果 3。选取listview中的一项即可定位到该位置,或者获取任何消息 4.代码有点乱,这两天把代码整理完就上传上来 ... 阅读详情

相关推荐

Android最新版高德地图poi检索仿微信发送位置

好久一段时间没有写博客了,陆续会补上最近项目中用到的。由于项目需要一个定位的功能,参考下市面上现有的地图SDK,觉得高德地图不错,本项目中用的是高德地图定位。首先演示下效果: 需求分析: 从gif当中,我们看到,大概可以分为这么几个行为: 1. 进入页面,产生两个标记点,周围地点列表。 两个标记点:一个是 固定不变 的 当前位置的定位圆形标记;一个是 可移动 的 红色标记,并且,会根据

老子灬仗贱走天涯的博客 2774

Android仿微信调用第三方地图应用导航(高德、百度、腾讯)

主要介绍了Android仿微信调用第三方地图应用导航,包括高德、百度、腾讯地图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

【uniapp】 微信小程序--高德地图选取位置

高德api制作地图选点功能

m0_74094484的博客 1773

Android-WeChatLoction基于高德地图仿微信位置搜索

WeChatLoction基于高德地图仿微信位置搜索

Android 仿微信发送坐标,Android最新版高德地圖poi檢索仿微信發送位置

好久一段時間沒有寫博客了,陸續會補上最近項目中用到的。由於項目需要一個定位的功能,參考下市面上現有的地圖SDK,覺得高德地圖不錯,本項目中用的是高德地圖定位。首先演示下效果: 需求分析:從gif當中,我們看到,大概可以分為這么幾個行為:1. 進入頁面,產生兩個標記點,周圍地點列表。兩個標記點:一個是 固定不變 的 當前位置的定位圓形標記;一個是 可移動 的 紅色標記,並且,會根據當前經緯度改變位置...

weixin_42388716的博客 506

android仿微信地图,GitHub - bigStuart/MapAdrSelect-Android: 模仿微信地图地址选择器...

地图地址选择器支持地图:高德、腾讯、百度界面支持自定义修改效果图如下:基本用法Intent intent = new Intent(MainActivity.this, ActivityMapMainIndex.class);startActivityForResult(intent, ActivityMapMainIndex.KEY_REQUEST_CODE);修改ui界面Intent inte...

weixin_35793067的博客 224

利用高德地图关键字检索POI-实现仿微信发朋友圈搜索附近位置

前言由于项目中需要实现搜索附近位置作为收获地址,所以采用了高德地图的关键字检索POI来实现。官方Demo看了很复杂,估计很多人都不想看。但是看了我写的Demo你就会觉得So Easy啦!先上效果图高德提供了千万级别的 POIPoint of Interest,兴趣点)。在地图表达中,一个 POI 可代表一栋大厦、一家商铺、一处景点等等。通过POI搜索,完成找餐馆、找景点、找厕所等等的功能。地图 S

wildma的博客 9906

uniapp [全端兼容] - 实现接入集成高德地图搜索地址及选择位置功能,搜索框检索选择地点并返回经纬度及详细省市区县街道地址,用户搜索历史及清空历史记录,选择地址自动获取周边位置列表/地图移动选点

uni-app,高德地图,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,Uniapp高德地图,在地图上选择或搜索指定地点,打开地图选择位置,关联地址搜索,输入地址返回附近地址列表,uniApp高德地图地址搜索搜索框历史记录,关键字搜索周边查询,搜索位置,uniapp对接高德实现搜索出现地址以及保存搜索记录,集成高德地图,实现精准位置选点功能,获取当前定位城市,如何实现搜索功能,获取省份城市区街道详细地址经纬度,移动选点标记位置,在地图上进行选择位置选点、搜索

🏆 前端领域优质创作者 1万+

微信小程序使用高德地图(amap)实现检索定位附近周边POI功能示例

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

2301_76327109的博客 1869

仿微信发送位置、地图选点(高德地图)

Android仿微信发送位置、地图选点(高德地图). 前面上传过一个百度地图的, 这个也一起上传吧(捞点分, 现在下载都强制需要资源分), Key请自行申请, demo包含一个可运行apk和源码.

Android高德地图poi检索仿微信发送位置实例代码

本篇文章主要介绍了Android高德地图poi检索仿微信发送位置实例代码,具有一定的参考价值,有兴趣的可以了解一下。

微信小程序:高德地图搜索周边poi接口实践

近期一直在研究小程序地图组件开发,使用的是高德微信小程序sdk查找周边poi数据,并展示到地图上。 根据getPoiAround接口协议传入对应的参数测试发现目前该接口最多只能返回20条数据,不支持分页,重要的是他的第一条数据默认是选中态,如果想要保证所有的图标一致性还得在传入iconPathSelected属性。而这些都在官方上得到了证实: 测试实例代码如下: js代码: c

草灯的专栏 8726

微信小程序使用高德地图实现检索定位附近周边POI功能示例

解压下载的文件得到 amap-wx.js ,在创建的项目中,新建一个名为 libs 目录,将 amap-wx.js 文件拷贝到 libs 的本地目录下。,在 "设置" → "开发设置" 中设置 request 合法域名,将。

weixin_46753476的博客 9535

高德+关键字搜索+java_利用高德地图关键字检索POI-实现仿微信发朋友圈搜索附近位置...

前言由于项目中需要实现搜索附近位置作为收获地址,所以采用了高德地图的关键字检索POI来实现。官方Demo看了很复杂,估计很多人都不想看。但是看了我写的Demo你就会觉得So Easy啦!先上效果图高德提供了千万级别的 POI(Point of Interest,兴趣点)。在地图表达中,一个 POI 可代表一栋大厦、一家商铺、一处景点等等。通过POI搜索,完成找餐馆、找景点、找厕所等等的功能。地图 ...

weixin_33269198的博客 1192

仿微信发送位置(高德地图版)

采用高德地图API还原微信定位。

郭霖 3750

别再只显示地图了!用高德地图SDK给你的微信小程序加点‘料’:实时定位与周边搜索实战

本文详细介绍了如何利用高德地图SDK在微信小程序中实现动态定位与智能周边搜索功能。通过环境配置优化、实时定位技术、POI搜索API应用及性能优化策略,帮助开发者打造交互性更强的LBS应用。特别强调了微信小程序与高德地图SDK的协同使用技巧。

weixin_30352645的博客 391

高德地图POI搜索实战:如何快速实现朋友圈附近位置功能(附完整代码)

本文详细解析了如何利用高德地图POI搜索功能实现社交应用中的附近位置推荐。从基础权限管理到核心参数配置,再到搜索结果智能处理与展示优化,提供了完整的代码示例和性能优化建议,帮助开发者快速实现高效的位置搜索功能。

weixin_33701251的博客 413
上一篇: viewStub使用
下一篇: 安卓模拟器Genymotion unable to start the virtual device的解决方案。
fpf1993
博客等级 码龄10年 1粉丝 6原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值