百度地图

1-获取API Key
SHA1:的获取方法
在 cmd中 输入 cd.android(android小写)
再输入 :keytool -list -v -keystore debug.keystore
口令默认为android (注意是小写)没有界面显示直接写完即可回车
找到SHA1

配置 清单文件
在application节点里添加ak:

<meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="drTVbLu8KFDga4DMv9rTyBBiqz786zz1" /> 

引入布局(地图控件)

<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />



BaseAcitivity.java ## 基类 ##

    package com.huida.baidumap;


import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.UiSettings;
import com.baidu.mapapi.model.LatLng;


import android.app.Activity;
import android.os.Bundle;


public abstract class BaseAcitivity extends Activity {
    public MapView mMapView;
    public BaiduMap map;
    public MapStatusUpdate mapstatus;
    public LatLng HDlocation=new LatLng(?, ?);
    public LatLng KSlocation=new LatLng(?, ?);
    public LatLng YDlocation=new LatLng(?, ?);
    public LatLng HCZlocation=new LatLng(?, ?);

    @Override
    protected final void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化控件
                mMapView = (MapView) findViewById(R.id.bmapView);
                // 1. 隐藏缩放按钮、比例尺
                // mMapView.showScaleControl(false);
                // mMapView.showZoomControls(false);


                // 2. 获取获取最小(3)、最大缩放级别(20)
                map = mMapView.getMap();
                float maxZoomLevel = map.getMaxZoomLevel();
                float minZoomLevel = map.getMinZoomLevel();


                // 3. 设置地图中心点
                //(?, ?)坐标点,自己添加
            MapStatusUpdate statusUpdate = MapStatusUpdateFactory.newLatLng(new LatLng(?, ?));
                map.setMapStatus(statusUpdate);
                // 4. 设置地图缩放为15
                MapStatusUpdate zoomTo = MapStatusUpdateFactory.zoomTo(15);
                map.setMapStatus(zoomTo);
                // 5. 更新地图状态
                // 1) 缩小
                // 2) 放大
                // 3) 旋转(0 ~ 360),每次在原来的基础上再旋转30度
                // 4) 俯仰(0 ~ -45),每次在原来的基础上再俯仰-5度
                // 5) 移动
                // 6. 获取地图Ui控制器:隐藏指南针
                UiSettings uiSettings = map.getUiSettings();
                uiSettings.setCompassEnabled(false);

        init();
    }
    /**
     * 用于子类的初始化
     */
    public abstract void init();

    @Override
    protected void onDestroy() {
        super.onDestroy();  
        mMapView.onDestroy();
    }


    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }


    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }
}

DemoListActivity.java

package com.huida.baidumap;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class DemoListActivity extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        ClassAndName[] items={new ClassAndName(MainActivity.class, "HelleBaidumap")
                            ,new ClassAndName(MapLayerActivity.class, "地图图层")
                            ,new ClassAndName(CircleOverlayAcitivity.class, "圆形覆盖物")
                            ,new ClassAndName(TextOverlayActivity.class, "文字覆盖物")
                            ,new ClassAndName(MarkerActivity.class, "标记覆盖物")
                            ,new ClassAndName(SearchInBound.class, "在范围内搜索")
                            ,new ClassAndName(SearchInCityActivity.class, "在城市内搜索")
                            ,new ClassAndName(SearchNearbyActivtiy.class, "在周边搜索")};

        ArrayAdapter<ClassAndName> adapter 
            = new ArrayAdapter<ClassAndName>(DemoListActivity.this, android.R.layout.simple_list_item_1, items);
        setListAdapter(adapter);

    }  
    /**
     * listview 条目的点击事件
     */
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        //点击条目跳转到对应的activity页面
        ClassAndName item = (ClassAndName) l.getItemAtPosition(position);
        Intent intent = new Intent(DemoListActivity.this,item.clazz);
        startActivity(intent);
        }

    class ClassAndName{
        public Class clazz;
        public String name;

        public ClassAndName(Class clazz,String name){
            this.clazz=clazz;
            this.name=name;
        }

        @Override
        public String toString() {
            return name;
        }

    }
}

PoiSearchBaseActivity.java## 基类 ##

package com.huida.baidumap;

import android.widget.Toast;

import com.baidu.mapapi.overlayutil.PoiOverlay;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;

public class PoiSearchBaseActivity extends BaseAcitivity {

    public PoiSearch poiSearch;
    private PoiOverlay poiOverlay;

    @Override
    public void init() {
        // 兴趣点搜索对象
        poiSearch = PoiSearch.newInstance();

        // 设置搜索的监听
        poiSearch.setOnGetPoiSearchResultListener(new MyListener());

    }
    class MyListener implements OnGetPoiSearchResultListener{


        /**
         * 详情的搜索结果
         */
        @Override
        public void onGetPoiDetailResult(PoiDetailResult result) {
            if (result==null & result.error != SearchResult.ERRORNO.NO_ERROR ) {
                Toast.makeText(getApplicationContext(), "没有搜索到结果", 0).show();
                return;
            }
            String telephone = result.getTelephone();
            Toast.makeText(getApplicationContext(), telephone, 0).show();
        }

        @Override
        public void onGetPoiIndoorResult(PoiIndoorResult arg0) {

        }

        /**
         * 兴趣点搜索的结果的回调
         */
        @Override
        public void onGetPoiResult(PoiResult result) {
            if (result==null & result.error != SearchResult.ERRORNO.NO_ERROR ) {
                Toast.makeText(getApplicationContext(), "没有搜索到结果", 0).show();
                return;
            }
        //创建兴趣点覆盖物对象
        if (poiOverlay==null) {
            poiOverlay = new PoiOverlay(map){
                @Override
                public boolean onPoiClick(int i) {
                    PoiResult poiResult = this.getPoiResult();
                    PoiInfo info = poiResult.getAllPoi().get(i);
                    Toast.makeText(getApplicationContext(), info.name+","+info.address, 0).show();
                    //搜索详情信息
                    PoiDetailSearchOption option = new PoiDetailSearchOption();
                    option.poiUid(info.uid);
                    poiSearch.searchPoiDetail(option);

                    return true;
                }
            };
        }   

        //将搜索到的数据设置给兴趣点对象
        poiOverlay.setData(result);
        //添加到地图上
        poiOverlay.addToMap();
        poiOverlay.zoomToSpan();

        //设置覆盖物点击事件
        map.setOnMarkerClickListener(poiOverlay);

        }
    }
}

MyApplication.java

package com.huida.baidumap;

import com.baidu.mapapi.SDKInitializer;

import android.app.Application;

public class MyApplication extends Application {

    @Override
    public void onCreate() {

        //初始化百度地图的sdk
         SDKInitializer.initialize(getApplicationContext());
    }
}

下面是图层及覆盖物的demo


MainActivity.java
对应–HelleBaidumap


package com.huida.baidumap;

import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatus.Builder;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.model.LatLng;

import android.view.KeyEvent;

public class MainActivity extends BaseAcitivity {

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_1:// 缩小

            mapstatus = MapStatusUpdateFactory.zoomOut();


            break;
        case KeyEvent.KEYCODE_2:// 放大

            mapstatus = MapStatusUpdateFactory.zoomIn();


            break;
        case KeyEvent.KEYCODE_3:// 旋转(0 ~ 360),每次在原来的基础上再旋转30度
            Builder builder = new MapStatus.Builder();
            //设置状态的参数
            float rotate = map.getMapStatus().rotate;//当前的角度
            builder.rotate(rotate+30);
            MapStatus status = builder.build();

            mapstatus= MapStatusUpdateFactory.newMapStatus(status);

            break;
        case KeyEvent.KEYCODE_4:// 俯仰(0 ~ -45),每次在原来的基础上再俯仰-5度
             builder = new MapStatus.Builder();
            //设置状态的参数
            float overlook = map.getMapStatus().overlook;//当前的俯仰的角度
            builder.overlook(overlook-5);
             status = builder.build();

            mapstatus= MapStatusUpdateFactory.newMapStatus(status);


            break;
        case KeyEvent.KEYCODE_5:// 移动(从中心点移动到别的坐标)
            mapstatus = MapStatusUpdateFactory
            .newLatLng(new LatLng(39.913711,119.546324));

            map.animateMapStatus(mapstatus, 500);
            return super.onKeyDown(keyCode, event);


        default:
            break;
        }
        map.setMapStatus(mapstatus);
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void init() {


    }



}


----------

MapLayerActivity.java
对应– “地图图层” 地图图层 普通图层 卫星图 交通图





package com.huida.baidumap;

import com.baidu.mapapi.map.BaiduMap;

import android.view.KeyEvent;

/**
 * 地图图层 普通图层 卫星图 交通图
 * 
 * @author Administrator
 * 
 */
public class MapLayerActivity extends BaseAcitivity {

    @Override
    public void init() {

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_1:// 普通图层
            map.setMapType(BaiduMap.MAP_TYPE_NORMAL);
            map.setTrafficEnabled(false);//不显示交通图

            break;
        case KeyEvent.KEYCODE_2:// 卫星图
            map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
            map.setTrafficEnabled(false);

            break;
        case KeyEvent.KEYCODE_3:// 交通图

            map.setTrafficEnabled(true);

            break;

        default:
            break;
        }
        return super.onKeyDown(keyCode, event);
    }

}

CircleOverlayAcitivity.java
对应—”圆形覆盖物”


package com.huida.baidumap;

import android.graphics.Color;

import com.baidu.mapapi.map.CircleOptions;
import com.baidu.mapapi.map.Stroke;

/**
 * 圆形覆盖物
 *
 */
public class CircleOverlayAcitivity extends BaseAcitivity {

    @Override
    public void init() {
        //创建圆形覆盖物对象
        CircleOptions options = new CircleOptions();
        //设置参数(圆心位置、半径 、圆形线条的粗细和颜色、圆形的填充颜色)
        options.center(HDlocation);
        options.radius(20);
        options.stroke(new Stroke(5, Color.RED));//第一参数是线条的粗细,第二个参数是颜色
        options.fillColor(Color.GREEN);
        //将覆盖物添加到地图上
        map.addOverlay(options);
    }

}

TextOverlayActivity.java
对应—”文字覆盖物”


package com.huida.baidumap;

import android.graphics.Color;

import com.baidu.mapapi.map.TextOptions;

public class TextOverlayActivity extends BaseAcitivity {

    @Override
    public void init() {
        // 创建覆盖物对象
        TextOptions options = new TextOptions();
        //设置参数,位置、内容、文字颜色大小、文字背景
        options.position(HDlocation);
        options.text("宾馆");
        options.fontColor(Color.BLUE);
        options.fontSize(30);
        options.bgColor(Color.GRAY);
        options.rotate(30);
        //将覆盖物添加到地图上
        map.addOverlay(options);


    }

}

MarkerActivity.java, “标记覆盖物”


package com.huida.baidumap;

import android.view.View;
import android.widget.TextView;

import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BaiduMap.OnMarkerDragListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapViewLayoutParams;
import com.baidu.mapapi.map.MapViewLayoutParams.Builder;
import com.baidu.mapapi.map.MapViewLayoutParams.ELayoutMode;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;

public class MarkerActivity extends BaseAcitivity {

    private View view;
    private TextView tv;
    @Override
    public void init() {
        // 创建覆盖物对象
        MarkerOptions options = new MarkerOptions();
        // 参数(位置、标题、图标、是否可拖拽)
        options.position(HDlocation);// 位置
        BitmapDescriptor icon = new BitmapDescriptorFactory()
                .fromResource(R.drawable.icon_eat);
        options.icon(icon);// 图标
        options.title("地点");// 标题
        options.draggable(true);// 可以拖拽

        // 添加到地图上
        map.addOverlay(options);

        // 创建覆盖物对象
        options = new MarkerOptions();
        // 参数(位置、标题、图标、是否可拖拽)
        options.position(new LatLng(HDlocation.latitude + 0.001,
                HDlocation.longitude));// 位置
        icon = new BitmapDescriptorFactory().fromResource(R.drawable.icon_eat);
        options.icon(icon);// 图标
        options.title("北");// 标题
        options.draggable(true);// 可以拖拽

        // 添加到地图上
        map.addOverlay(options);

        // 创建覆盖物对象
        options = new MarkerOptions();
        // 参数(位置、标题、图标、是否可拖拽)
        options.position(new LatLng(HDlocation.latitude,
                HDlocation.longitude+0.001));// 位置
        icon = new BitmapDescriptorFactory().fromResource(R.drawable.icon_eat);
        options.icon(icon);// 图标
        options.title("东");// 标题
        options.draggable(true);// 可以拖拽

        // 添加到地图上
        map.addOverlay(options);

        //设置覆盖物的点击事件
        map.setOnMarkerClickListener(new OnMarkerClickListener() {

            @Override
            public boolean onMarkerClick(Marker marker) {
                //悬浮窗的参数信息
                MapViewLayoutParams params = getParams(marker);

                if (view==null) {
                    // 弹出一个悬浮窗,显示当前覆盖物的信息等
                    view = View.inflate(MarkerActivity.this, R.layout.pop, null);
                    tv = (TextView) view.findViewById(R.id.tv);
                    mMapView.addView(view, params);
                }else {
                    //复用
                    mMapView.updateViewLayout(view, params);
                }
                tv.setText(marker.getTitle());
                return true;
            }
        });

        //设置标记物的拖拽的监听
        map.setOnMarkerDragListener(new OnMarkerDragListener() {

            @Override
            public void onMarkerDragStart(Marker marker) {
                //获取最新的参数,更新
                MapViewLayoutParams params = getParams(marker);
                mMapView.updateViewLayout(view, params);
            }

            @Override
            public void onMarkerDragEnd(Marker marker) {
                //获取最新的参数,更新
                MapViewLayoutParams params = getParams(marker);
                mMapView.updateViewLayout(view, params);

            }

            @Override
            public void onMarkerDrag(Marker marker) {
                //获取最新的参数,更新
                MapViewLayoutParams params = getParams(marker);
                mMapView.updateViewLayout(view, params);

            }
        });

    }
    /**
     * 获取参数
     * @param marker
     */
    public MapViewLayoutParams getParams(Marker marker){
        Builder builder = new MapViewLayoutParams.Builder();
        builder.layoutMode(ELayoutMode.mapMode);//设置坐标模式为地图经纬度模式
        builder.position(marker.getPosition());//位置
        builder.yOffset(-30);
        MapViewLayoutParams params = builder.build();

        return params;
    }

}

SearchInBound.java, “在范围内搜索”


package com.huida.baidumap;

import android.widget.Toast;

import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
import com.baidu.mapapi.model.LatLngBounds.Builder;
import com.baidu.mapapi.overlayutil.PoiOverlay;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiBoundSearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;

/**
 * 在范围内搜索
 * @author Administrator
 *
 */
public class SearchInBound extends PoiSearchBaseActivity {

    @Override
    public void init() {
        super.init();

        poiSearch.searchInBound(getSearchOption());

    }


    /**
     * 获取搜索参数的方法
     */
    private PoiBoundSearchOption getSearchOption() {

        PoiBoundSearchOption option = new PoiBoundSearchOption();
        Builder builder = new LatLngBounds.Builder();
        builder.include(new LatLng(40.048459,116.302072));//西南
        builder.include(new LatLng(40.050675,116.304317));//东北
        LatLngBounds bounds = builder.build();
        //搜索范围
        option.bound(bounds);
        //搜索关键字
        option.keyword("加油站");

        return option;
    }
    }

SearchInCityActivity.java, “在城市内搜索”


package com.huida.baidumap;

import android.R.integer;
import android.view.KeyEvent;

import com.baidu.mapapi.search.poi.PoiCitySearchOption;

public class SearchInCityActivity extends PoiSearchBaseActivity {

    private int pageNum=0;//页数
    @Override
    public void init() {
        super.init();

        poiSearch.searchInCity(getSearchOption());

    }

    private PoiCitySearchOption getSearchOption() {
        PoiCitySearchOption option = new PoiCitySearchOption();
        option.city("北京");
        option.keyword("加油站");
        option.pageCapacity(5);//一页显示的数据量
        option.pageNum(pageNum);
        return option;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode==KeyEvent.KEYCODE_1) {
            //切换下一页
            pageNum++;
            poiSearch.searchInCity(getSearchOption());
        }
        return super.onKeyDown(keyCode, event);
    }
}

SearchNearbyActivtiy.java, “在周边搜索”


package com.huida.baidumap;

import com.baidu.mapapi.search.poi.PoiNearbySearchOption;

public class SearchNearbyActivtiy extends PoiSearchBaseActivity {

    @Override
    public void init() {
        super.init();
        poiSearch.searchNearby(getSearchOption());
    }

    private PoiNearbySearchOption getSearchOption() {
        PoiNearbySearchOption option = new PoiNearbySearchOption();
        option.location(HDlocation);//搜索中心点
        option.radius(500);//搜索半径 单位是米
        option.keyword("银行");
        return option;
    }
}


配置清单文件


<activity

            android:name="com.huida.baidumap.MainActivity"

            android:label="@string/app_name" >



        </activity>
        <activity android:name="com.huida.baidumap.BaseAcitivity"></activity>

        <activity android:name="com.huida.baidumap.DemoListActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>
        <activity android:name="com.huida.baidumap.MapLayerActivity"></activity>
        <activity android:name="com.huida.baidumap.CircleOverlayAcitivity"></activity>
       <activity android:name="com.huida.baidumap.TextOverlayActivity"></activity>
       <activity android:name="com.huida.baidumap.MarkerActivity"></activity>
       <activity android:name="com.huida.baidumap.SearchInBound"></activity>
       <activity android:name="com.huida.baidumap.SearchInCityActivity"></activity>
       <activity android:name="com.huida.baidumap.SearchNearbyActivtiy"></activity>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值