高德地图的使用

地图的显示

添加依赖:

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();
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 小程序源码开源下载地址:https://github.crmeb.net/u/demo 我们在小程序开发环境中,碰...
    梁仁0918阅读 315评论 0 0
  • 基本操作 1创建项目 2创建新页面 最左侧添加新页面,可添加子页面 3添加组件 把右边组件拖进页面,一般组件都在里...
    亲了你一下宝宝阅读 591评论 0 0
  • 2015-7-27 ”吃饭的时候,他们极力解释自己过去的所作所为,我顿时没有了胃口。做都做了,难听的话说出了口,还...
    张小猫阅读 111评论 0 0
  • 学明行日记第 75篇 恩恩读经111周第1天 读经日期:2018年10月29日 星期一 晴 恩恩读经内容 1.易经...
    点亮喜乐富足的人生阅读 229评论 0 0
  • 妙笔0阅读 345评论 0 0