码迷,mamicode.com
首页 > 其他好文 > 详细

高德地图使用心得,百度地图使用心得

时间:2016-05-07 08:49:04      阅读:483      评论:0      收藏:0      [点我收藏+]

标签:

1.环境配置
高德开发定位,地图,搜索,加覆盖物,这四个功能只需要要做三部
第一,下载三个架包,高德里面不涉及到3d地图没有.so文件,只需要三个架包,对于我们不需要的功能其他架包可以不用下载,比如不涉及到导航我们就不需要下载导航架包,这样可以减少应用的负重,将下载好的架包导入工程,配上截图!技术分享
这是加入项目中截图技术分享
导包完成之后然后就是添加服务,首先,请在application标签中声明service组件,每个app拥有自己单独的定位service。<service android:name="com.amap.api.location.APSService"></service>
然后,<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

最后设置Key,在application标签中加入

<meta-data android:name="com.amap.api.v2.apikey" android:value="key">//开发者申请的key      

</meta-data>

2.功能实现
最后就是代码实现我们想要的功能
第一步初始化Amap这个类,这个类是地图对象,里面有很多地图的操作方法和接口

 private void init() {
        if (aMap == null) {
            aMap = mapView.getMap();
            aMap.moveCamera(CameraUpdateFactory.zoomTo(16));//设置地图的缩放比例
            setUpMap();
        }
    }

得到地图对象后初始化地图对象的一些属性

 private void setUpMap() {
        // 自定义系统定位小蓝点
        MyLocationStyle myLocationStyle = new MyLocationStyle();
        myLocationStyle.myLocationIcon(com.amap.api.maps2d.model.BitmapDescriptorFactory
                .fromResource(R.drawable.biaozhi));// 设置小蓝点的图标
        myLocationStyle.strokeColor(Color.WHITE);// 设置圆形的边框颜色
        myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0));// 设置圆形的填充颜色
        myLocationStyle.strokeWidth(0.0f);// 设置圆形的边框粗细*/
        aMap.setMyLocationStyle(myLocationStyle);
        aMap.setLocationSource(this);// 设置定位监听
        aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
        aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false*/
            }
        });
    }

运行激活定位的接口方法,并且开始定位

/**
     * 激活定位
     */
    @Override
    public void activate(OnLocationChangedListener listener) {
        mListener = listener;
        if (mlocationClient == null) {
            mlocationClient = new AMapLocationClient(this);
            mLocationOption = new AMapLocationClientOption();
            //设置定位监听
            mLocationOption.setNeedAddress(true);
            mLocationOption.setOnceLocation(true);
            mlocationClient.setLocationListener(this);
            //设置为高精度定位模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置定位参数
            mlocationClient.setLocationOption(mLocationOption);
            // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
            // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
            // 在定位结束后,在合适的生命周期调用onDestroy()方法
            // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
            mlocationClient.startLocation();
        }
    }

开启定位之后定位成功就会回调定位成功接口方法,着这里我们可以获取到我们定位后的城市,经纬度,以及很多

 /**
     * 定位成功后回调函数
     */
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
        if (mListener != null && amapLocation != null) {
            if (amapLocation != null
                    && amapLocation.getErrorCode() == 0) {
                mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
                aMap.addMarker(new com.amap.api.maps2d.model.MarkerOptions()
                        .anchor(0.5f, 0.5f)
                        .icon(com.amap.api.maps2d.model.BitmapDescriptorFactory

                                .fromBitmap(BitmapFactory.decodeResource(
                                        getResources(), R.drawable.biaozhi)))
                        .position(new com.amap.api.maps2d.model.LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));
                Log.e("5555",amapLocation.getProvince()+","+amapLocation.getCity()+","+amapLocation.getAddress()+","+amapLocation.getStreet()+","+amapLocation.getAoiName());
                city=amapLocation.getCity();
                lp=new LatLonPoint(amapLocation.getLatitude(),amapLocation.getLongitude());
                poi_Search("");//开始周边搜索
            } else {
                String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();
                Log.e("AmapErr",errText);
            }
        }
    }

租后就是周边搜索代码:

 private void poi_Search(String str) {
        com.amap.api.services.poisearch.PoiSearch.Query mPoiSearchQuery = new com.amap.api.services.poisearch.PoiSearch.Query(str, "",city);

        mPoiSearchQuery.requireSubPois(true);
        mPoiSearchQuery.setPageSize(30);
        mPoiSearchQuery.setPageNum(0);
        com.amap.api.services.poisearch.PoiSearch poiSearch = new com.amap.api.services.poisearch.PoiSearch(BaiDuMapActivity.this, mPoiSearchQuery);
        poiSearch.setBound(new com.amap.api.services.poisearch.PoiSearch.SearchBound(lp, 5000, true));
        poiSearch.setOnPoiSearchListener(this);
        poiSearch.searchPOIAsyn();
    }

搜索成功后调用回调接口方法,获取我们搜索到的结果

 @Override
    public void onPoiSearched(com.amap.api.services.poisearch.PoiResult poiResult, int i) {
        poiItems=poiResult.getPois();
        listView.setAdapter(new BaiDuListAdapter(BaiDuMapActivity.this,poiItems));
    }

最后我们对搜索的结果进行处理。
最后一个功能就是添加覆盖物

 aMap.addMarker(new com.amap.api.maps2d.model.MarkerOptions()
                        .anchor(0.5f, 0.5f)
                        .icon(com.amap.api.maps2d.model.BitmapDescriptorFactory
                                .fromBitmap(BitmapFactory.decodeResource(
                                        getResources(), R.drawable.biaozhi)))
                        .position(new com.amap.api.maps2d.model.LatLng(latitude, longitude)));

根据经纬度将我们的红色标志添加到地图上,以便用户很好的知道自己当前位置。
3.百度跟高德的区别
1百度2d地图需要添加.so文件而高德不需要
2百度不支持关键字为空的兴趣点搜索而高德可以

高德地图使用心得,百度地图使用心得

标签:

原文地址:http://blog.csdn.net/qqxiaozhijiang/article/details/51330124

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!