地图配置

1、打开高德开放平台
2、创建应用
3、添加新key: 38:7C:C0:9F:7A:CF:75:12:D0:96:1D:AC:D5:F3:FF:58:95:B8:C1:83
    sha1值获取:找到系统默认的debug.keystore(C:\Users\Administrator\.android\debug.keystore)
                在cmd窗口或android studio 中的Terminal中执行命令:
地址
------------------------------------------------------
4、添加jar和so库(不要添加v4包)
    so库添加方式:
        第一种:使用默认配置,不需要修改build.gradle。在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。
        第二种:使用自定义配置,将下载文件的 armeabi 文件夹复制到 libs 目录,如果有这个目录,请将下载的 so 库复制到这个目录,然后打开build.gradle,找到 sourceSets 标签:
        sourceSets{
            main{
                jniLibs.srcDirs = ['libs']
            }
        }
------------------------------------------------------
5、在AndroidManifest中完成内容配置
    根据开发文档完成内容
    <meta-data
            android:name="com.amap.api.v2.apikey"
        android:value="您的Key"/>

    --------------------------------------------------------
    //地图包、搜索包需要的基础权限
     
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />  
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />     
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
------------------------------------------------------
6、在Activity的xml文件中添加控件
<com.amap.api.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</com.amap.api.maps.MapView>
------------------------------------------------------

7、在Activity中完成内容展示
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.basicmap_activity);//设置对应的XML布局文件
    
    MapView mapView = (MapView) findViewById(R.id.map);
    mapView.onCreate(savedInstanceState);// 此方法必须重写
    AMap aMap = mapView.getMap();
    
}
//重写方法
@Override
  protected void onDestroy() {
    super.onDestroy();
    //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
    mMapView.onDestroy();
  }
 @Override
 protected void onResume() {
    super.onResume();
    //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
    mMapView.onResume();
    }
------------------------------------------------------
8、设置地图定位蓝点
     MyLocationStyle myLocationStyle;
        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次
        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
        myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
        myLocationStyle.anchor((float) 40.1767200000, (float) 116.1650200000);//设置定位蓝点图标的锚点方法。
        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
        //aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。

     //地图蓝点的绘制
        LatLng latLng = new LatLng(40.1767200000, 116.1650200000);
        final Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title("北京").snippet("吉利大学"));
------------------------------------------------------------------------
10、地图导航
    4种方式:驾车、步行、公交、骑行
    

    准备工作:导入示例工程的overlay、util、res/drawable、values/colors及string资源
    
    以驾车路线规划为例:
     
    ------------------------------------------------------
     //驾车路线规划
        routeSearch = new RouteSearch(this);
        routeSearch.setRouteSearchListener(this);
        // fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
        // 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
        // 吉利大学的坐标       40.1767200000,116.1650200000
        RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(39.9179400000, 116.3971400000));
        RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.BUS_DEFAULT, null, null, "");
        //使用类 RouteSearch 的 calculateRideRouteAsyn(RideRouteQuery query) 方法进行骑行规划路径计算。
        routeSearch.calculateDriveRouteAsyn(query);

    //在驾车路线规划的响应内容中:
    
    @Override
        public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
        //清除所有地图标识点
        aMap.clear();
        if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
            if (result != null && result.getPaths() != null) {
                if (result.getPaths().size() > 0) {
                    mDriveRouteResult = result;
                    final DrivePath drivePath = mDriveRouteResult.getPaths()
                            .get(0);
                    DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
                            MainActivity.this, aMap, drivePath,
                            mDriveRouteResult.getStartPos(),
                            mDriveRouteResult.getTargetPos(), null);
                    drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
                    drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
                    drivingRouteOverlay.removeFromMap();
                    drivingRouteOverlay.addToMap();
                    drivingRouteOverlay.zoomToSpan();
                } else if (result != null && result.getPaths() == null) {
                    ToastUtil.show(MainActivity.this, R.string.no_result);
                }
            } else {
                ToastUtil.show(MainActivity.this, R.string.no_result);
            }
        } else {
            ToastUtil.showerror(this.getApplicationContext(), errorCode);
        }

    }

------------------------------------------------------
//步行路径规划
  routeSearch = new RouteSearch(this);
        routeSearch.setRouteSearchListener(this);
        RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(39.9923000000, 116.2683700000));
        //初始化query对象,fromAndTo是包含起终点信息,walkMode是步行路径规划的模式
        RouteSearch.WalkRouteQuery query = new RouteSearch.WalkRouteQuery(fromAndTo, RouteSearch.WALK_DEFAULT);
        routeSearch.calculateWalkRouteAsyn(query);//开始算路
------------------------------------------------------
//公交
 routeSearch = new RouteSearch(this);
        routeSearch.setRouteSearchListener(this);
        // fromAndTo包含路径规划的起点和终点,RouteSearch.BusLeaseWalk表示公交查询模式
        // 第三个参数表示公交查询城市区号,第四个参数表示是否计算夜班车,0表示不计算,1表示计算
        RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(39.9923000000, 116.2683700000));
        RouteSearch.BusRouteQuery query = new RouteSearch.BusRouteQuery(fromAndTo, RouteSearch.BusLeaseWalk, "010", 0);
        //query.setCityd("027");//终点城市区号
        routeSearch.calculateBusRouteAsyn(query);//开始规划路径
        aMap.clear();// 清理地图上的所有覆盖物
        //TODO 需要获取对应条目的路径显示以及回显信息

------------------------------------------------------
 //骑行路线导航
 routeSearch = new RouteSearch(this);
        routeSearch.setRouteSearchListener(this);
        final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(39.9923000000, 116.2683700000));
        RouteSearch.RideRouteQuery query = new RouteSearch.RideRouteQuery(fromAndTo, RouteSearch.RIDING_FAST);
        routeSearch.calculateRideRouteAsyn(query);

------------------------------------------------------

11、POI查询
      //poi(兴趣点)检索
        query = new PoiSearch.Query("羊蝎子", "", "北京");
        //keyWord表示搜索字符串,
        //第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
        //cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
        query.setPageSize(10);// 设置每页最多返回多少条poiitem
        query.setPageNum(0);//设置查询页码

        PoiSearch poiSearch = new PoiSearch(this, query);
        poiSearch.setOnPoiSearchListener(this);
        poiSearch.searchPOIAsyn();


    ============================================================================
 public void onPoiSearched(PoiResult result, int rCode) {
        if (rCode == AMapException.CODE_AMAP_SUCCESS) {
            if (result != null && result.getQuery() != null) {// 搜索poi的结果
                if (result.getQuery().equals(query)) {// 是否是同一条
                    PoiResult poiResult = result;
                    // 取得搜索到的poiitems有多少页
                    List<PoiItem> poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始
                    List<SuggestionCity> suggestionCities = poiResult
                            .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息

                    if (poiItems != null && poiItems.size() > 0) {
                        aMap.clear();// 清理之前的图标
                        PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems);
                        poiOverlay.removeFromMap();
                        poiOverlay.addToMap();
                        poiOverlay.zoomToSpan();
                    } else {
                        ToastUtil.show(MainActivity.this,
                                R.string.no_result);
                    }
                }
            } else {
                ToastUtil.show(MainActivity.this,
                        R.string.no_result);
            }
        } else {
            ToastUtil.showerror(this, rCode);
        }
    }
 @Override
 protected void onPause() {
    super.onPause();
    //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
    mMapView.onPause();
    }
 @Override
 protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
    mMapView.onSaveInstanceState(outState);
  } 
}

============================================================================
点击按钮
 @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt:
                GeocodeSearch geocodeSearch = new GeocodeSearch(this);
                geocodeSearch.setOnGeocodeSearchListener(this);
                GeocodeQuery query = new GeocodeQuery(zh.getText().toString(), "010");
                geocodeSearch.getFromLocationNameAsyn(query);

                break;
        }
    }

    @Override
    public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {

    }

    @Override
    public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {

        GeocodeAddress geocodeAddress = geocodeResult.getGeocodeAddressList().get(0);

        double latitude = geocodeAddress.getLatLonPoint().getLatitude();
        double longitude = geocodeAddress.getLatLonPoint().getLongitude();
        Log.d("MainActivity", "经纬度为:" + latitude + "..." + longitude);

        initDrivingRouteSearch(latitude,longitude);
    }

    private void initDrivingRouteSearch(double latitude, double longitude) {

        //驾车路线规划
        routeSearch = new RouteSearch(this);
        routeSearch.setRouteSearchListener(this);
        // fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
        // 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
        // 吉利大学的坐标       40.1767200000,116.1650200000
        RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(latitude, longitude));
        RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.BUS_DEFAULT, null, null, "");
        //使用类 RouteSearch 的 calculateRideRouteAsyn(RideRouteQuery query) 方法进行骑行规划路径计算。
        routeSearch.calculateDriveRouteAsyn(query);

    }

转载于:https://my.oschina.net/u/3737161/blog/1581450

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值