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

高德地图的使用

作者: 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();
    }

相关文章

  • iOS地图导航功能实现

    最简单快捷的方法使用高德地图uri,高德地图uri的具体使用可在高德地图官方网站看,使用非常简单 简单贴下部分代码...

  • swift原生地图与高德地图

    可以使用原生地图,也可以使用高德地图或者其他,高德开发者网站会教你如何在各个平台使用高德地图。 原生地图 记得im...

  • 高的地图

    分享 高德地图的使用 地图产品有: 谷歌 百度 高德 腾讯 ArcGis 超图 天地图 ...

  • 地图打点

    实现效果如下: 地图打点主要常用的地图分两类: 百度地图 高德地图 高德地图 高德地图可以使用自定义内容标记,通过...

  • 高德地图-始终获取屏幕中心点的地址(或经纬度)

    在使用高德地图之前需要现在高德地图开放平台创建一个APP,会自动生成一个appKey,在工程中使用高德地图sdk时...

  • js实现当前位置定位(获取当前位置地理位置信息)

    1.确定要接入哪家地图平台的api(百度地图,高德地图),本案例中使用的是高德地图2.注册高德地图账号--到个人中...

  • 高德地图导航使用指南

    高德地图是我们常用的导航地图之一,其强大性就不说了,直接开始主题,高德地图导航功能的使用方法。 概览 高德地图导航...

  • iOS 使用高德地图正确姿势(三)

    iOS 使用高德地图正确姿势(一)iOS 使用高德地图正确姿势(二) 实现大头针始终在地图中心,拖动地图实时poi...

  • 关于高德地图的MAMapView踩坑

    关于高德地图的MAMapView踩坑 在使用高德地图的MAMapView地图的时候碰到无法设置size的情况: 地...

  • iOS 高德地图的使用

    iOS:高德地图的使用 本人花了点时间集成了高德地图的几乎所有的功能,包含:地图的显示、地图的绘制、地图的定位、地...

网友评论

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

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