关于高德地图问题总结 (六)通过拖拽选择某个坐标点

上篇我们讲到了动态路线规划,我们给定固定的起始坐标,我们这片再延伸一点,我们通过在屏幕中实时获取某个坐标点来获取目的地坐标。效果图如下
在这里插入图片描述
我们在上面的图片中可以看到通过拖拽地图可以选择指定的位置,实时的位置信息会在下方绿色字体显示出来。下面我们就来看具体的显示过程。

1、初始化地图,并且为地图添加setOnCameraChangeListener 监听,还获取Camera变化的监听。

if (aMap == null) {
	aMap = rallyMap.getMap();
}
//设置地图缩放
aMap.moveCamera(CameraUpdateFactory.zoomTo(16));
//设置缩放按钮不显示
aMap.getUiSettings().setZoomControlsEnabled(false);
//设置自定义信息窗口
aMap.setInfoWindowAdapter(this);
aMap.setOnCameraChangeListener(mapChangedListener);

2、我们来实现mapChangedListener 监听的方法,通过方法来获取Camera变化过程中和变化结束的事件。

private AMap.OnCameraChangeListener mapChangedListener = new AMap.OnCameraChangeListener() {
		//Camera实时变化的方法
        @Override
        public void onCameraChange(CameraPosition cameraPosition) {
            rallyLatLng = cameraPosition.target;
            //添加蓝色大头针marker
            addRallyPoint();
        }
		
		//Camera 变化结束的方法
        @Override
        public void onCameraChangeFinish(CameraPosition cameraPosition) {
            LatLonPoint point = new LatLonPoint(cameraPosition.target.latitude,cameraPosition.target.longitude);
            rallyPoint = point;
            doSearch();
        }
    };

我们在Camera实时变化的时候,动态的进行大头针的设置。就是动态添加marker,不动的可以看我之前对应自定义marker的讲述,这里不多说,直接代码。

private MarkerOptions mMarkerOption;

/**
     * 设置集合点marker
     */
    private void addRallyPoint(){
        // 添加当前坐标覆盖物
        if (mMarkerOption == null) {
            mMarkerOption = new MarkerOptions()
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.collection_site_positioning))
                    .position(userLatLng)
                    .draggable(true);
            marker = aMap.addMarker(mMarkerOption);
        } else {
        	//如果marker存在,我们就直接更新位置
            marker.setPosition(rallyLatLng);
        }
    }

在Camera移动结果之后,我们调用doSearch()的方法,来通过坐标点调取周边poi搜索,如果是进行路线规划,我们可以直接拿到onCameraChangeFinish()方法里面的坐标点进行路线查询,这里我们进行周边的poi查询。

public void doSearch(){
        query = new PoiSearch.Query("", "", "");
        //keyWord表示搜索字符串,
        //第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
        //cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
        // 设置每页最多返回多少条poiItem
        query.setPageSize(20);
        //设置查询页码
        query.setPageNum(1);
        poiSearch = new PoiSearch(this, query);
        poiSearch.setOnPoiSearchListener(this);
        //设置周边搜索的中心点以及半径
        poiSearch.setBound(new PoiSearch.SearchBound(rallyPoint, 1000));
        poiSearch.searchPOIAsyn();
    }

这里我们调用一步查询需要添加PoiSearch.OnPoiSearchListener的监听。实现方法

@Override
    public void onPoiSearched(PoiResult poiResult, int i) {
        List<PoiItem> poiLists = poiResult.getPois();
        if(poiLists.size() > 0){
            tvRallyPoint.setText(Html.fromHtml("<u>"+poiLists.get(0).getTitle()+"</u>"));
            rallyLatLng = new LatLng(poiLists.get(0).getLatLonPoint().getLatitude(),poiLists.get(0).getLatLonPoint().getLongitude());
            addRallyPoint();
        }
    }

    @Override
    public void onPoiItemSearched(PoiItem poiItem, int i) {

    }

我们将获取的列表的第一个点作为周边poi选择后的点,再次调用addRallyPoint()更改大头针的位置。设置准确的位置,确定选中的位置点一定有实际意义。

学艺不精,如有问题,欢迎留言,谢谢

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值