百度地图小案例

来源:互联网 发布:判断字符串像素长度js 编辑:程序博客网 时间:2024/04/25 02:29
提示:转载请说明出处!

前几天照着百度API写了一个地图应用,具备定位、搜索附近、路径查询、更改模式等功能…………
公交路线、实时导航,以及搜索结果的点击事件由于时间关系就没做,代码写的也粗糙,哪位大神不介意的可以帮小弟改改哈,在此谢过!
同时还有一个功能,就是短信监听哦!打开地图,用另一部手机发送“come”,就可以获取到安装地图的那部手机的地理位置,中文的!
还有一些有点小变态的功能就不说了哈,大家看了都懂的
!O(∩_∩)O[mw_shl_code=java,true]// 大概一秒钟定位一次
                @Override
                public void onReceiveLocation(BDLocation location) {
                        if (location == null)
                                return;
                        if (flag_new == true) {
                                pt1 = new GeoPoint((int) (location.getLatitude() * 1E6),(int) (location.getLongitude() * 1E6));
                                locationData.latitude = location.getLatitude();
                                locationData.longitude = location.getLongitude();
                                locationData.direction = 2.0f;
                                locationData.accuracy = location.getRadius();// 获取服务
                                locationData.direction = location.getDerect();
                                // myLocationOverlay.setData(locationData);//异步加载locationData,必须异步加载,否则myLocationOverlay不会显示
                                mMapView.refresh();// 此处刷新必须有
                                // 定位本地位置,此句没有,则无法定位
                                mMapController.animateTo(new GeoPoint(
                                                (int) (locationData.latitude * 1e6),
                                                (int) (locationData.longitude * 1e6)));
                                MyLocationOverlay myLocationOverlay = new MyLocationOverlay(mMapView);
//                                LocationData locData = new LocationData();
                                //手动将位置源置为天安门,在实际应用中,请使用百度定位SDK获取位置信息,要在SDK中显示一个位置,需要
                                //使用百度经纬度坐标(bd09ll)
//                                locData.latitude = location.getLatitude();
//                                locData.longitude = location.getLongitude();
                                locationData.direction = 2.0f;
                                myLocationOverlay.setData(locationData);
                                mMapView.getOverlays().add(myLocationOverlay);
                                mMapView.refresh();
                                mMapView.getController().animateTo(new GeoPoint((int)(locationData.latitude*1e6),
                                                (int)(locationData.longitude* 1e6)));
                                flag_new = false;
                        }

                }[/mw_shl_code][mw_shl_code=java,true]@Override
        public void onClick(View v) {
                // mMapView.setSatellite(true);//设置卫星地图
                // mMapView.setTraffic(true); 设置普通地图
                switch (v.getId()) {
                case R.id.radio_btn_changemode: // 改变模式的点击事件
                        if (isWeiXing) {
                                isWeiXing = false;
                                isSimple = true;
                                mMapView.setSatellite(isWeiXing);
                                mMapView.setTraffic(isSimple);
                        } else if (isSimple) {
                                isSimple = false;
                                isWeiXing = true;
                                mMapView.setSatellite(isWeiXing);
                                mMapView.setTraffic(isSimple);
                        }
                        break;
                case R.id.radio_btn_refresh: // 更新位置的点击事件
                        flag_new = true;
                        break;
                 case R.id.btn_search: //搜索附近的点击事件
                         btn_search.setBackgroundColor(Color.GREEN);
                         content = et_search.getText().toString();
                         mkSearch.poiSearchNearBy(content, pt1, 10000);//附近10000米进行搜索
                 break;
                 case R.id.radio_btn_more: //关于
                         Intent intent = new Intent();
                                intent.setClass(MainActivity.this,DialogActivity.class);
                                startActivity(intent);
                         break;
                 case R.id.radio_btn_fujin: //附近
                        initPopWindow();
//                        mPop.showAsDropDown(v,20,-284);//以这个Button为anchor(可以理解为锚,基准),在下方弹出
                        mPop.showAtLocation(MainActivity.this.findViewById(R.id.rl), 
                                        Gravity.CENTER, 0, 0);//在屏幕居中,无偏移
                         break;
                 case R.id.radio_btn_search_bus: //公交路线(底部导航的)
                         initPopWindow1();
                         mPop1.showAsDropDown(v,20,-284);//以这个Button为anchor(可以理解为锚,基准),在下方弹出
//                         mPop1.showAsDropDown(v,20,-20);//横轴偏移20,纵轴-20,一个状态栏的长度
//                         mPop1.showAtLocation(MainActivity.this.findViewById(R.id.rl), 
//                                                Gravity.CENTER, 0, 0);//在屏幕居中,无偏移
                         break;
                 case R.id.bus_search: //公交路线搜索按钮
                        // 对起点终点的name进行赋值,也可以直接对坐标赋值,赋值坐标则将根据坐标进行搜索
                         MKPlanNode stNode = new MKPlanNode();
                                stNode.name = et_from.getText().toString();
                                MKPlanNode enNode = new MKPlanNode();
                                enNode.name = et_to.getText().toString();
                                mkSearch.transitSearch("北京", stNode, enNode);
                         break;
                }

        }[/mw_shl_code][mw_shl_code=java,true]        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                requestWindowFeature(Window.FEATURE_NO_TITLE);
                mBMapMan = new BMapManager(getApplication());
                mBMapMan.init(key, null);
                // 注意:请在试用setContentView前初始化BMapManager对象,否则会报错
                setContentView(R.layout.activity_main);
                mMapView = (MapView) findViewById(R.id.bmapView);

                mMapView.setBuiltInZoomControls(true);
//                mMapView.setDrawOverlayWhenZooming(true);  
                mMapController = mMapView.getController();
                // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
                GeoPoint point = new GeoPoint((int) (39.915 * 1E6),
                                (int) (116.404 * 1E6));
                // 用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
                mMapController.setCenter(point);// 设置地图中心点
                mMapController.setZoom(12);// 设置地图zoom级别

                initView();

                mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
                mLocationClient.registerLocationListener(myListener); // 注册监听函数

                LocationClientOption option = new LocationClientOption();
                option.setOpenGps(true);
                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);
                mLocationClient.start();
                 
                mkSearch = new MKSearch();
                mkSearch.init(mBMapMan, new MKSearchListener() {

                        @Override
                        public void onGetWalkingRouteResult(MKWalkingRouteResult res,
                                        int error) {
                        }

                        @Override
                        public void onGetTransitRouteResult(MKTransitRouteResult res,
                                        int error) {
                                if (error != 0 || res == null) {
                                        Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
                                        return;
                                }
                                TransitOverlay  routeOverlay = new TransitOverlay (MainActivity.this, mMapView);
                            // 此处仅展示一个方案作为示例
                            routeOverlay.setData(res.getPlan(0));
                            mMapView.getOverlays().clear();
                            mMapView.getOverlays().add(routeOverlay);
                            mMapView.refresh();
                            // 使用zoomToSpan()绽放地图,使路线能完全显示在地图上
                            mMapView.getController().zoomToSpan(routeOverlay.getLatSpanE6(), routeOverlay.getLonSpanE6());
                            mMapView.getController().animateTo(res.getStart().pt);
                        }

                        @Override
                        public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
                        }

                        @Override
                        public void onGetPoiResult(MKPoiResult res, int type, int error) {

                                if (error == MKEvent.ERROR_RESULT_NOT_FOUND) {
                                        Toast.makeText(MainActivity.this, "抱歉,未找到结果",Toast.LENGTH_LONG).show();
                                        et_from.setText("");
                                        et_to.setText("");
                                        return;
                                }
                                else if (error != 0 || res == null) {
                                        Toast.makeText(MainActivity.this, "搜索出错啦..",
                                                        Toast.LENGTH_LONG).show();
                                        return;
                                }
                                 
                                // 将poi结果显示到地图上
                                PoiOverlay poiOverlay = new PoiOverlay(MainActivity.this,mMapView);
                                poiOverlay.setData(res.getAllPoi());
                                mMapView.getOverlays().clear();
                                mMapView.getOverlays().add(poiOverlay);
                                mMapView.refresh();
                                mPop.dismiss();
                                // 当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空
                                for (MKPoiInfo info : res.getAllPoi()) {
                                        if (info.pt != null) {
                                                mMapView.getController().animateTo(info.pt);
                                                break;
                                        }
                                }
                        }

                        @Override
                        public void onGetPoiDetailSearchResult(int arg0, int arg1) {
                        }

                        @Override
                        public void onGetDrivingRouteResult(MKDrivingRouteResult arg0,
                                        int arg1) {
                        }

                        @Override
                        public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
                        }

                        @Override
                        public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
                        }
                });
                 
        }
2 0
原创粉丝点击