安卓—项目中插入百度地图sdk

安卓—项目中插入百度地图sdk

大家好,又见面了,我是全栈君。

百度地图

应用里面 自带地图 搜房网

  1. 下载百度地图的sdk 熟悉api 注冊百度开发人员的账号
  2. 2.12 仅仅要有一个ak就能够 高版本号须要提供应用程序的包名和签名返回开发人员的序列号

使用百度地图步骤

  1. 申请api key
  2. 创建project
  3. 引用函数库 armeabi 仅仅能兼容arme cpu
  4. 联网权限
  5. 初始化地图引擎 (2.13 在代码中初始化, 高版本号在清单文件里配置)
  6. 引用布局

MapView 显示地图 V

继承ViewGroup 自己定义控件 专门用来显示地图

1. MapController    getController()   获取到地图的控制器 
2.  让mapView的生命周期 必须和anctivity绑死在一起  onResume onPause destroy
3.  setBuiltInZoomControls(boolean on)   设置是否启用内置的缩放控件

回调 MKMapViewListener

BMapManager M

能够初始化地图引擎

1. destroy()  当程序退出的时候调用
2. start()  当程序可见的时候调用
3. stop()  当程序不可见的时候调用 
4. init(String strKey, MKGeneralListener listener) 方法校验key信息, 回调

MapController 地图控制器 C

专门控制地图的操作

1. animateTo(GeoPoint point)   移动到指定位置
2. setCenter(GeoPoint point)  在给定的中心点GeoPoint上设置地图视图。
3. setZoom(float zoomLevel)  设置地图的缩放级别
4.  缩放
5.  旋转
6.  改动鸟瞰角度

图层

1. 卫星图层 mapView.setSatellite(true); 
2. 交通图层 mapView.setTraffic(true);

覆盖物

覆盖物包含:
    覆盖物的抽象基类: Overlay(核心类)
    几何图形: GraphicsOverlay
    文字: TextOverlay
    分类条目: ItemizedOverlay
    本地搜索: PoiOverlay
    路线规划: RouteOverlay
    换成路线: TransitOverlay
    我的位置: MyLocationOverlay
步骤:
    * 1.获取到地图上的覆盖物
        List<Overlay> overlays = mapView.getOverlays();

    * 2.创建新的覆盖物   
        几何GraphicsOverlay, 文字TextOverlay, 多条目(以下详细实现)
    * 3.拿到地图上的覆盖物 加入新的覆盖物
        overlays.add(overlay);

    * 4.刷新地图 
        mapView.refresh();


* GraphicsOverlay:

    GraphicsOverlay  overlay = new GraphicsOverlay(mapView);

    // 描写叙述一个集合图形
    Geometry arg0=new Geometry();  // 图形的形状  
    arg0.setCircle(point, 1000);  //參数1,圆心  參数2,半径 单位(米)

    Symbol arg1 = new Symbol();  //图形的样式
    Symbol.Color color = new Symbol().new Color();
    color.alpha=155;
    color.red=100;
    color.blue=200;
    color.green=0;
    //  设置图形的样式
    arg1.setSurface(color, 1, 1);

    Graphic graphic=new Graphic(arg0, arg1);
    // 绘制
    overlay.setData(graphic);


* TextOverlay 

    TextOverlay overlay=new TextOverlay(mapView);
    // 绘制
    TextItem item=new TextItem();
    item.align=TextItem.ALIGN_CENTER;// 居中对齐
    item.pt=point;// 让文字显示在黑马这个位置 
    item.fontSize=14;
    item.fontColor=getColor();
    item.text="黑马程序猿";
    overlay.addText(item);

* ItemizedOverlay

    ItemizedOverlay<OverlayItem> itemizedOverlay = new ItemizedOverlay<OverlayItem>(
                getResources().getDrawable(R.drawable.eat_icon), mapView) {
        //条目的点击事件!!!
        @Override
        protected boolean onTap(int index) {
            OverlayItem item = getItem(index);
            GeoPoint point = item.getPoint();
            //更新view气泡的的位置(之前已经初始化)
            mapView.updateViewLayout(pop, new MapView.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
                    point, MapView.LayoutParams.BOTTOM_CENTER));
            pop.setVisibility(View.VISIBLE);// 让气泡显示出来
            TextView tv=(TextView) pop.findViewById(R.id.title);
            tv.setText(item.getTitle());
                // String snippet = item.getSnippet();//得到描写叙述信息
                // Toast.makeText(getApplicationContext(), snippet, 0).show();

            return true;//表示消费掉了
        }
    };

    OverlayItem item = new OverlayItem(point, "黑马程序猿", "不10000就业不交一分钱学费");// 1坐标点 2 标题 3 描写叙述
    itemizedOverlay.addItem(item);

    item = new OverlayItem(new GeoPoint(latitude + 1000, longitude), "向北",
            "添加纬度");
    itemizedOverlay.addItem(item);

    item = new OverlayItem(new GeoPoint(latitude, longitude + 1000), "向东",
            "添加经度");
    itemizedOverlay.addItem(item);

    item = new OverlayItem(new GeoPoint(latitude - 1000, longitude - 1000),
            "向西南", "降低经纬度");
    itemizedOverlay.addItem(item);

    // 步骤3
    overlays.add(itemizedOverlay);
    // 步骤4
    mapView.refresh();

* PoiOverlay: 搜索后显示本地覆盖物, 例如以下.
* RouteOverlay: 驾车路线搜索后显示路线, 例如以下.
* TransitOverlay: 公交换乘路线显示, 例如以下.
* MyLocationOverlay: 我的位置覆盖物, 例如以下.

搜索

* 核心类: MKSearch和MKSearchListener

    1. MKSearch  搜索的api  用于位置检索/周边检索/公交检索/范围检索/驾乘检索/步行检索
    2. MKSearchListener 搜素结构 会回调到该接口里的方法 

* 矩形/圆形/全城区域内 搜索比較兴趣点
    MKSearch search = new MKSearch();
    search.init(manager,MKSearchListener)//因为此接口的方法特别多, 此处能够使用适配器设计模式


    //第一个參数:keyword(如宾馆)  第二个參数(左上角的点)    第三个參数(右下角的点)
    1. search.poiSearchInbounds(String key, GeoPoint ptLB, GeoPoint ptRT)  矩形区域搜索
    2. search.poiSearchNearBy(String key, GeoPoint pt, int radius)   圆形区域搜素
    3. search.poiSearchInCity("北京", "麦当劳");
        search.goToPoiPage(index);//显示下一页(一页显示10条)

    在MKSearchListener里的onGetPoiResult()中回调.

    public void onGetPoiResult(MKPoiResult result, int type, int iError) {
        if(iError==0){
            // 有结果
            //  把结果绘制到手机屏幕(地图)上
            // 步骤1  获取到全部的覆盖物
            List<Overlay> overlays = mapView.getOverlays();
            //步骤2 创建信的覆盖物
            PoiOverlay overlay=new PoiOverlay(SearchInRectActivity.this, mapView);
            ArrayList<MKPoiInfo> allPoi = result.getAllPoi();
            overlay.setData(allPoi);
            //  步骤3  把覆盖物加入到之前的覆盖物的集合上
            overlays.add(overlay);
            //步骤4  刷新界面 
            mapView.refresh();
        }
    }



* 驾车/公交/步行路线搜索

    // 1 開始的城市  2開始位置  3目的地城市  4目的地坐标
    1.search.drivingSearch(String startCity, MKPlanNode start, String endCity, MKPlanNode end) //驾车
    2.search.transitSearch(String startCity, MKPlanNode start, MKPlanNode end);//公交
    3.search.walkingSearch(String startCity, MKPlanNode start, MKPlanNode end);//步行

    //在MKSearchListener里的onGetDrivingRouteResult中回调.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MKSearch search=new MKSearch();
        search.init(manager, new BusAdapter());

        MKPlanNode start=new MKPlanNode();//地点: 包含位置和名字
        start.pt=point;

        MKPlanNode end=new MKPlanNode();
        end.pt=new GeoPoint(40065796, 116349868);



        search.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);// 设置开车的方案
        search.drivingSearch("北京", start, "北京", end);//驾车(方式1)

        search.setTransitPolicy(MKSearch.EBUS_WALK_FIRST);
        search.transitSearch("北京", start, end);  //公交(方式2)

        search.walkingSearch("北京", start, end); //步行(方式3)
    }

    private class BusAdapter  extends MKSearchAdapter{
        @Override
        public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
            if(iError==0){
                //此处仅仅显示了公交的回调, 驾车和步行没写, 具体见项目.

                // 公交的方案
                MKTransitRoutePlan plan = result.getPlan(0);
                List<Overlay> overlays = mapView.getOverlays();
                TransitOverlay overlay=new TransitOverlay(BusActivity.this, mapView);
                overlay.setData(plan);

                overlays.add(overlay);
                mapView.refresh();
            }
        }
    }

定位:

* 定位的方式  

    1. gps
    2. wifi
    3. 基站 

* 系统原生定位:

    //调用的是谷歌的API, 火星坐标, 不准确.
    LocationManager lm = (LocationManager)getSystemService(LOCATION_SERVICE);

* 百度地图定位:

    须要: liblocSDK.so    locSDK.jar

    核心API: LocationClient(LocationClientOption)    BDLocationListener

    public class MyLocationActivity extends BaseActivity {
        public LocationClient mLocationClient = null;
        // 回调方法
        public BDLocationListener myListener = new MyLocationListener();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
            mLocationClient.registerLocationListener(myListener); // 注冊监听函数

            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true); // 打开GPS
            option.setAddrType("all");// 返回的定位结果包括地址信息
            option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
            option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
            option.disableCache(true);// 禁止启用缓存定位
            option.setPoiNumber(5); // 最多返回POI个数
            option.setPoiDistance(1000); // poi查询距离
            option.setPoiExtraInfo(true); // 是否须要POI的电话和地址等具体信息
            mLocationClient.setLocOption(option);


        }
        @Override
        protected void onStart() {
            super.onStart();
            mLocationClient.start();
            if(mLocationClient!=null &&mLocationClient.isStarted()){
                mLocationClient.requestLocation();// 请求定位的位置
            }
        }
        @Override
        protected void onStop() {
            super.onStop();
            mLocationClient.stop();
        }

        public class MyLocationListener implements BDLocationListener {
            // 接受到了定位的位置
            @Override
            public void onReceiveLocation(BDLocation location) {
                double latitude2 = location.getLatitude();
                double longitude2 = location.getLongitude();
                Toast.makeText(getApplicationContext(), latitude2+"..."+longitude2, 0).show();

                MyLocationOverlay overlay=new MyLocationOverlay(mapView);
                LocationData data=new LocationData();
                data.latitude=latitude2;
                data.longitude=longitude2;
                overlay.setData(data);

                mapView.getOverlays().add(overlay);
                mapView.refresh();
            }

            // 接受到了 周围的兴趣点
            @Override
            public void onReceivePoi(BDLocation arg0) {

            }

        }
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116586.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpproxy建立代理服务器_proxy设计模式

    phpproxy建立代理服务器_proxy设计模式代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务。而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行了,具体红酒工厂在那里,客户不用关心,代理会帮他处理。代理模式,就是给某一对象提供代理对象,并由代理对象控制具体对象的引用。代理模式涉及的角色:抽象主题角色,声明了代理主题和真实主题的公共…

    2025年6月26日
    0
  • 非常好用的上位机软件(功能强大)——匿名四轴上位机「建议收藏」

    非常好用的上位机软件(功能强大)——匿名四轴上位机「建议收藏」提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言随着单片机开发,调试工具就必不可少,本文就介绍匿名四轴上位机的基础知识。提示:以下是本篇文章正文内容,下面案例可供参考一、什么是上位机上位机是指可以直接发出操控命令的计算机,一般是PC/hostcomputer/mastercomputer/uppercomputer,屏幕上显示各种信号变化(.

    2022年5月31日
    88
  • set和list转换_list和set

    set和list转换_list和setset集合元素唯一,无序;list集合元素可以重复,有序。1、set转list:数据保持不变,顺序发生变化,可以使用Collections.sort进行排序(Collections.shuffle随机排序,Collections.reverse反转顺序)。2、list转set:去除重复数据,只保留一个。转成linkedHashSet时,原顺序不变;转成treeSet可以排序

    2022年10月10日
    0
  • tcp洪水攻击_udp编程socket

    tcp洪水攻击_udp编程socket#include/**UDP洪水攻击:不停的向目的主机发送UDP包,让目的主机接收端口拥塞,以达到攻击的目的**/#defineMAXCHILD2#defineK1024#defineDATUML1*KstaticintPROTO_UDP=-1;//UDP协议类型staticunsignedlongdest=0;//目的地址,32位二进制staticintdest_po…

    2022年10月1日
    0
  • visual studio2019的安装以及使用

    visual studio2019的安装以及使用一 下载安装包下载地址选择 visualstudio 的 community 版本二 下载好后运行三 组件的选择如果是用来学 C C 的话 选择以下两个就够了之后如果还需要其他一些功能的话 可以后续在进行添加 打开 visualstudio 进入修改四 进行安装如果不需要修改安装位置的话点击安装就可以了 不过由于 vs2019 占用的空间较大最好不要装在

    2025年7月4日
    1
  • java c++ socket 中文乱码解决「建议收藏」

    java c++ socket 中文乱码解决「建议收藏」java服务器端使用ServerSocket的accept创建Socket,跟普通java之间的通信一致。C++客户端使用makeConnect(server,port,”tcp”),send,recv等函数。 自己在这次编程中,首先遇到的是虽然连接成功了,但java无法接收C++发来的消息。可能是用错函数之类的,后边改为下边的代码接收就没事了。

    2022年7月13日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号