美文网首页
高德地图的使用

高德地图的使用

作者: 3c2cf1f7612e | 来源:发表于2019-03-05 14:34 被阅读0次

    地图的显示

    添加依赖:

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.amap.api:3dmap:5.0.0'
        compile 'com.amap.api:location:3.3.0'
        compile 'com.amap.api:search:5.0.0'
    }
    

    1.在布局文件中添加如下代码,并在onCreate() 中findViewById()

     <com.amap.api.maps.MapView
            android:id="@+id/map"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" />
    

    2.在onCreate() ,onRume(),onPause(),onSaveInstanceState(Bundle outState),onDestroy() 分别添加如下代码:

          mapView.onCreate(savedInstanceState);// 此方法必须重写
          mapView.onResume();
          mapView.onPause();
          mapView.onSaveInstanceState(outState);
          mapView.onDestroy();
    

    3.在onCreate()中初始化 并设置格式
    (1)初始化Amap

    if(aMap==null){
    aMap=mapView.getMap();
    }    
    

    (2)设置自定义样式,这个是在开发平台设置的,然后把文件导入项目而已

    private void setMapCustomStyleFile(Context context) {
            String styleName = "style_new.data";
            InputStream inputStream = null;
            try {
                inputStream = context.getAssets().open(styleName);
                byte[] b = new byte[inputStream.available()];
                inputStream.read(b);
    
                if(mapStyleOptions != null) {
                    // 设置自定义样式
                    mapStyleOptions.setStyleData(b);
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (inputStream != null) {
                        inputStream.close();
                    }
    
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    

    设置地图模式:

    标准模式:

    aMap.setMapType(AMap.MAP_TYPE_NORMAL);
    

    卫星地图模式:

    aMap.setMapType(AMap.MAP_TYPE_SATELLITE);
    

    夜景地图模式:

    aMap.setMapType(AMap.MAP_TYPE_NIGHT);
    

    导航地图模式:

    aMap.setMapType(AMap.MAP_TYPE_NAVI);
    

    列表显示地图

    (1)布局使用的是

    <com.amap.api.maps.TextureMapView/>
    

    也建议大家使用这个而不是MapView。
    (2)初始化
    getView() 中findViewById()并执行

    mapHolder.mapView.onCreate(null);
    mapView.onCreate(null);
    没有添加marker前得清除掉
    aAap.clear();
    
    用集合存储地图对象,在某一时刻清除掉
    列表里面缓存了很多地图对象,所以一定要调用销毁方法
    public void onDestroy() {
        for (TextureMapView mapView : mapViews) {
           mapView.onDestroy();
      }
    }
    

    (3)添加标记Marker

    Marker marker1 = aMap.addMarker(new MarkerOptions().position(new LatLng(LatLng.latitude + 0.00015, 
    LatLng.longitude)).icon(BitmapDescriptorFactory.fromResource(R.drawable.car)));
    
    aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng, 18));
    将地图移动到定位点,18 是缩放程度
    
    
    aMap.addMarker这是关键
    
    

    (4)添加线条

    线由一组经纬度(LatLng对象)点连接而成
    aMap.addPolyline((new PolylineOptions())
                  .addAll(new List<LatLng> polylinePoints)
                  .width(10));
    

    (5)设置成室内地图
    amap.showIndoorMap(true);

    (6)移动地图 最后一个数字为缩放级别
    aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(36,56.565),19);

    (7)关闭SDK自带的室内地图控件
    aMap.getUiSettings().setIndoorSwitchEnabled(false);

    (8) logo位置的设置 :左下,底部居中,右下
    mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM);

    设置地图默认的比例尺是否显示
    mUiSettings.setScaleControlsEnabled(true)

    设置地图默认的缩放按钮是否显示
    mUiSettings.setZoomControlsEnabled(false)

    设置地图默认的指南针是否显示
    mUiSettings.setCompassEnabled(false)

    设置地图默认的定位按钮是否显示
    mUiSettings.setMyLocationButtonEnabled(false);

    是否可触发定位并显示定位层
    aMap.setMyLocationEnabled(false);

    设置logo位置

    mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);

    显示实时交通状况
    aMap.setTrafficEnabled(false)

    显示3D 楼块
    aMap.showBuildings(false)

    显示底图文字
    aMap.showMapText()

    自定义实时交通信息的颜色样式
    MyTrafficStyle myTrafficStyle = new MyTrafficStyle();
    myTrafficStyle.setSeriousCongestedColor(0xff92000a);
    myTrafficStyle.setCongestedColor(0xffea0312);
    myTrafficStyle.setSlowColor(0xffff7508);
    myTrafficStyle.setSmoothColor(0xff00a209);
    aMap.setMyTrafficStyle(myTrafficStyle);

    设置地图是否可以手势滑动
    mUiSettings.setScrollGesturesEnabled(true)

    设置地图是否可以手势缩放大小
    mUiSettings.setZoomGesturesEnabled(true)

    设置地图是否可以倾斜
    mUiSettings.setTiltGesturesEnabled(true)

    设置地图是否可以旋转
    mUiSettings.setRotateGesturesEnabled(true)

    对amap添加单击地图事件监听器
    aMap.setOnMapClickListener(this)

    对amap添加长按地图事件监听器
    aMap.setOnMapLongClickListener(this)

    对amap添加移动地图事件监听器
    aMap.setOnCameraChangeListener(this)

    对amap添加触摸地图事件监听器
    aMap.setOnMapTouchListener(this)

    获取可视区域
    VisibleRegion visibleRegion = aMap.getProjection().getVisibleRegion(); // 获取可视区域
    LatLngBounds latLngBounds = visibleRegion.latLngBounds;// 获取可视区域的Bounds
    boolean isContain = latLngBounds.contains(Constants.SHANGHAI);// 判断上海经纬度是否包括在当前地图可见区域

    (9)底图poi点击事件
    底图poi点击回调
    mAMap.setOnPOIClickListener(this);
    回调方法
    public void onPOIClick(Poi poi)

    Marker 点击回调
    mAMap.setOnMarkerClickListener(this);
    回调方法
    public boolean onMarkerClick(Marker marker)

    构造导航参数
    NaviPara naviPara = new NaviPara();
    设置终点位置
    naviPara.setTargetPoint(marker.getPosition());

    缩放移动地图,保证所有自定义marker在可视范围中 50为四周留空宽度 aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50));

    aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(), 18, 30, 30))))

    带动画效果
    aMap.animateCamera()

    移动地图
    aMap.moveCamera(CameraUpdateFactory.scrollBy(0, SCROLL_BY_PX))

    缩小地图
    aMap.moveCamera(CameraUpdateFactory.zoomOut(), null);
    放大地图
    CameraUpdateFactory.zoomIn()

    对地图进行截图
    aMap.getMapScreenShot(this)

    设置最大最小缩放级别
    aMap.setMinZoomLevel(Float.valueOf(minZoomLevel));
    aMap.setMaxZoomLevel(Float.valueOf(maxZoomLevel));
    aMap.moveCamera(CameraUpdateFactory.zoomTo(Float.valueOf(minZoomLevel)));

    重置最大最小缩放级别
    aMap.resetMinMaxZoomPreference();

    在地图上添加marker
    markerOption = new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_car))
    .position(latlng)
    .draggable(true);
    marker = aMap.addMarker(markerOption);

    加一个箭头对象(NavigateArrow)对象在地图上
    aMap.addNavigateArrow(new NavigateArrowOptions().add(latlng1,
    latlng2, latlng3, latlng4).width(20));

    多边形的构造

    
    Constants.SHANGHAI=new LatLng(31.238068, 121.501654);
    /**
         * 生成一个长方形的四个坐标点
         */
        private List<LatLng> createRectangle(LatLng center, double halfWidth,
                                             double halfHeight) {
            List<LatLng> latLngs = new ArrayList<LatLng>();
            latLngs.add(new LatLng(center.latitude - halfHeight, center.longitude - halfWidth));
            latLngs.add(new LatLng(center.latitude - halfHeight, center.longitude + halfWidth));
            latLngs.add(new LatLng(center.latitude + halfHeight, center.longitude + halfWidth));
            latLngs.add(new LatLng(center.latitude + halfHeight, center.longitude - halfWidth));
            return latLngs;
        }
    //第二步    多边形的绘制
    注意了  这个得三个点以上才能绘制的
    
            PolygonOptions polygonOptions = new PolygonOptions()
                    .addAll(createRectangle(Constants.SHANGHAI, 1, 1))
                    .fillColor(Color.LTGRAY).strokeColor(Color.RED).strokeWidth(10);
    
            polygon = aMap.addPolygon(polygonOptions);
    
    //第三步  空洞
     
    aMap.moveCamera(CameraUpdateFactory.changeLatLng(Constants.SHANGHAI));
            // 清除多边形的空心洞
            if (polygon!=null)
            polygon.setHoleOptions(null);
            // 构建多边形空心配置项
    
    注意了,这个也是三个点以上才能构建的
    
            PolygonHoleOptions polygonOptions = new PolygonHoleOptions();
            polygonOptions.addAll(createRectangle(new LatLng(31.238068, 121.501654), 0.25, 0.25));
            // 构建圆形空心配置项
            LatLng latLng = new LatLng(30.746626, 120.756966);
            CircleHoleOptions circleOptions = new CircleHoleOptions();
            circleOptions.center(latLng).radius(15000f);
            List<BaseHoleOptions> list = new ArrayList<>();
            list.add(polygonOptions);
            list.add(circleOptions);
            // 添加空心洞
            polygon.setHoleOptions(list);
    
    

    显示定位

    /**
     * 获取定位坐标
     */
    public void initLocation() {
        mlocationClient = new AMapLocationClient(this);
        //初始化定位参数
        mLocationOption = new AMapLocationClientOption();
        //设置定位监听
        mlocationClient.setLocationListener(this);
        //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
        mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
        //设置定位间隔,单位毫秒,默认为2000ms
        mLocationOption.setInterval(2000);
        //设置是否只定位一次,默认为false
        mLocationOption.setOnceLocation(true);
        //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。
    //如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会。
        mLocationOption.setOnceLocationLatest(true);
        //设置定位参数
        mlocationClient.setLocationOption(mLocationOption);
        // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
        // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
        // 在定位结束后,在合适的生命周期调用onDestroy()方法
        // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
        //启动定位
        mlocationClient.startLocation();
    }
    /**
     * 高德定位回调
     */
    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
    if (amapLocation != null) {
            Double latitude = amapLocation.getLatitude();
            Double longitude = amapLocation.getLongitude();
        }
    

    相关文章

      网友评论

          本文标题:高德地图的使用

          本文链接:https://www.haomeiwen.com/subject/bjanuqtx.html