为您推荐:
精华内容
最热下载
问答
  • 5星
    1.89MB u013883025 2021-06-29 13:32:19
  • 5星
    46.47MB qq_15568321 2021-05-06 13:33:39
  • 5星
    3.24MB weixin_40228600 2021-04-01 09:26:05
  • 高德地图多边形的透明度 官方文档:https://lbs.amap.com/api/javascript-api/summary 不知道是不是版本太低还是我没有找到地方,反正我就是没有看到关于设置多边形透明度的地方 官方文档:...

    高德地图多边形的透明度

    官方文档:https://lbs.amap.com/api/javascript-api/summary
    不知道是不是版本太低还是我没有找到地方,反正我就是没有看到关于设置多边形透明度的地方
    官方文档:https://lbs.amap.com/api/javascript-api/example/overlayers/polygon-draw-and-edit
    在这里找到了我需要的东西
    let polygon = new AMap.Polygon({
    path: path,
    opacity: 0.3,
    fillColor: ‘#4c0099ff’, // 多边形填充颜色
    borderWeight: 1, // 线条宽度,默认为 1
    strokeColor: ‘#4c0099ff’, // 线条颜色
    fillOpacity:0.3,
    });

    总之就是:fillOpacity: 0.4,这个属性

    初次使用高德地图开发,这个弯我认了。

    展开全文
    qq_40165432 2020-10-29 15:36:59
  • 描述:这里我只显示中国地图地图的背景是透明色,这样就可以根据的你的父级元素背景,或者图片显示。 1.https://lbs.amap.com/ 退出之后,发布,选择使用与分享 2.接下来代码。我先说几个关键点,然后贴全部...

    效果图
    在这里插入图片描述

    在这里插入图片描述

    需求描述:高德地图,我只需要显示中国地图,背景颜色根据父级元素显示,
    可以调整。

    1.https://lbs.amap.com/
    在这里插入图片描述
    在这里插入图片描述
    退出之后,发布,选择使用与分享
    在这里插入图片描述
    2.接下来代码。我先说几个关键点,然后贴全部代码

    在这里插入图片描述
    在这里插入图片描述
    代码
    css部分
    html,
    body,
    #container {
    margin:0;
    height: 100%;
    background-color: #e8e8;;
    }
    body部分

    <div>id="container"></div>
    <script src="https://webapi.amap.com/maps?v=1.4.15&key=你的key&plugin=Map3D,AMap.DistrictLayer,AMap.Scale,AMap.ToolBar"></script>
    <script type="text/javascript" src="https://a.amap.com/jsapi_demos/static/demo-center/data/china-pp.js"></script>
    

    js部分

    var SOC = ‘CHN’ var colors = {}; var GDPSpeed = {
    ‘520000’:10,//贵州
    ‘540000’:10,//西藏
    ‘530000’:8.5,//云南
    ‘500000’:8.5,//重庆
    ‘360000’:8.5,//江西
    ‘340000’:8.0,//安徽
    ‘510000’:7.5,//四川
    ‘350000’:8.5,//福建
    ‘430000’:8.0,//湖南
    ‘420000’:7.5, //湖北
    ‘410000’:7.5,//河南
    ‘330000’:7.0,//浙江
    ‘640000’:7.5,//宁夏
    ‘650000’:7.0,//新疆
    ‘440000’:7.0,//广东
    ‘370000’:7.0,//山东
    ‘450000’:7.3,//广西
    ‘630000’:7.0,//青海
    ‘320000’:7.0,//江苏
    ‘140000’:6.5,//山西
    ‘460000’:7,// 海南
    ‘310000’:6.5,//上海
    ‘110000’:6.5, // 北京
    ‘130000’:6.5, // 河北
    ‘230000’:6, // 黑龙江
    ‘220000’:6,// 吉林
    ‘210000’:6.5, //辽宁
    ‘150000’:6.5,//内蒙古
    ‘120000’:5,// 天津
    ‘620000’:6,// 甘肃
    ‘610000’:8.5,// 甘肃
    ‘710000’:2.64, //台湾
    ‘810000’:3.0, //香港
    ‘820000’:4.7 //澳门

    } var getColorByDGP = function(adcode){
    if(!colors[adcode]){
    var gdp = GDPSpeed[adcode];
    if(!gdp){
    colors[adcode] = ‘rgb(227,227,227)’
    }else{
    var r = 3;
    var g = 140;
    var b = 230;
    var a = gdp/10;
    colors[adcode] = ‘rgba(’+ r +’,’+ g +’,’+b+’,’+a+’)’;
    }
    }
    return colors[adcode] }

    var disCountry = new AMap.DistrictLayer.Country({
    zIndex:10,
    SOC:‘CHN’,
    depth:1,
    styles:{
    ‘nation-stroke’:’#ff0000’,
    ‘coastline-stroke’:’#0088ff’,
    ‘province-stroke’:’#888888’,
    ‘fill’:function(props){
    return getColorByDGP(props.adcode_pro)
    }
    } })

    var map = new AMap.Map(‘container’, {
    resizeEnable: true, //是否监控地图容器尺寸变化
    layers:[disCountry],
    zooms: [4, 10],
    center:[106.122082,33.719192],
    zoom: 4,
    isHotspot:false,
    defaultCursor:‘pointer’,
    viewMode:‘2D’,
    resizeEnable: true,
    mapStyle:‘你的样式’,
    });

    map.addControl(new AMap.Scale());
    map.addControl(new AMap.ToolBar({liteStyle:true}));
    map.on(‘complete’,function(){
    var layer = new AMap.LabelsLayer({
    // 开启标注避让,默认为开启,v1.4.15 新增属性
    collision: false,
    // 开启标注淡入动画,默认为开启,v1.4.15 新增属性
    animation: true,
    });
    for (var i = 0; i < LabelsData.length; i++) {
    var labelsMarker = new AMap.LabelMarker(LabelsData[i]);
    layer.add(labelsMarker);
    }
    map.add(layer);
    })

    展开全文
    tangxiaobao2016 2021-02-23 10:56:07
  • 无论是高德地图、百度地图还是其它基于地图服务的互联网Web地图,是无法获取服务器端的矢量数据的。web地图只提供了有限的地图模版。好在百度、高德陆续推出了在线自定义地图,用户可以通过设置不同图层的色彩配置...

    无论是高德地图、百度地图还是其它基于地图服务的互联网Web地图,是无法获取服务器端的矢量数据的。web地图只提供了有限的地图模版。好在百度、高德陆续推出了在线自定义地图,用户可以通过设置不同图层的色彩配置个性地图。尽管如此,仍然不能满足专业地图的制作需求。比如下面效果的二维三维地图。在线地图的自定义操作比较简单。下面介绍一下,如果将小范围的在线切片数据转换为GIS矢量数据。

    1、这里以高德地图为例。首先进入到高德自定义地图站点。方法是在百度搜索【高德地图api】,进入后页面如下所示:

    ec93730cad477e3bb011fb000c34875c.png

    2、如果没有帐号,先注册帐号,注册完成后登录进入自定义地图页面。默认提供了几种默认模版。如下图所示:

    41f89825d78e9e0ef232d7a509952576.png

    3、这里选择【标准】地图模版,即上面的第一个模版。点击【使用该模版】进入页面。效果如下图所示:

    863b1aea06502d88b4378ad4c2e0f713.png

    4、此时,你应该已经明白该如何操作了。左侧的一级面板里列出了各种类型的标签、线状和面状图层,你可以自定义每个图层的颜色、透明度和可见性。这些便是高德自定义地图提供的所有能够自定义的功能,也是最大限度的功能了。例如,你可以把水系设置为红色,高速公路设置为紫色。

    407ec84a14f01357f67e3c2be2b4b116.png

    5、掌握了基本的设置方法。接下来开始配置我们需要的自定义地图,为数据的矢量化做准备。这里以广州的【流花湖o公园为例】。首先导航至此公园,并调整你想要的地图比例尺。

    973df6360cbde2e51d0fea613a8e0617.png

    6、我们的思路是,提取所需要的每一个图层。需要做的事情是:讲所有图层都设置为不可见,则背景为白色。然后将每个所需的图层逐个设置为黑色,并截图保存。这样做得目的是可在GIS软件里实现自动矢量化。这里以建筑物和道路为例。截图效果如下图所示:

    建筑物图层:

    5c417327cf9294ce051a410de431c2d6.png

    道路图层:

    a999bfbc82c466c4922d10a6539d4cc3.png

    7、依次提取其它图层:

    99db75365312e2b93d88a170dccc1866.png

    8、提取完成后,在ArcGIS中建模进行自动矢量化。思路是:选择每个图层的任何一个波段,然后使用【重分类】将底色(白色)和要素(黑色)进行二值化。然后使用【栅格转面】将栅格转换为矢量。最后使用【筛选】提取目标要素。模型如下图所示:

    3efe0d42471e0f05d443c6c773f373b6.png

    9、提取完成后,部分结果图层如下图所示:

    cfb0c0e26af7c66e8dab4ac35f74297b.png

    10、基于以上数据可以制作二维或者三维地图。如下图为ArcGIS制作的简单二维图。

    4e345c7eab36cb6215b9a95137f77315.png

    本站声明

    本文仅代表作者观点,不代表城市数据派立场;

    本文系作者授权城市数据派发表,未经许可,不得转载;

    本网站上的所有内容均为虚拟服务,一经购买成功概不退款,请您理解。

    展开全文
    weixin_42388485 2021-01-27 14:39:01
  • 一、概述上一节中我们了解到地图的定位,图层切换,离线地图等基础操作,接下来学习地图的基本操作。二、本章内容--- 地图交互设置--- ...主要用到的就是高德地图API中的 UiSettings 类。通过AMap实例可以获取到UiSe...

    一、概述

    上一节中我们了解到地图的定位,图层切换,离线地图等基础操作,接下来学习地图的基本操作。

    二、本章内容

    --- 地图交互设置

    --- 地图绘制

    1.地图交互设置

    在使用地图的时候,不可避免的会涉及到与地图交互问题,如滑动手势,地图缩放,地图旋转,地图logo位置等。我们可以根据需要来决定是否开启某些交互功能。主要用到的就是高德地图API中的 UiSettings 类。通过AMap实例可以获取到UiSettings的实例 uiSettings = aMap.getUiSettings();

    ①手势设置

    //开启放缩手势

    uiSettings.setZoomGesturesEnabled(true);

    //开启滑动手势

    uiSettings.setScrollGesturesEnabled(true);

    //开启旋转手势

    uiSettings.setRotateGesturesEnabled(true);

    //开启双指倾斜手势

    uiSettings.setTiltGesturesEnabled(true);

    //开启全部手势

    uiSettings.setAllGesturesEnabled(true);

    //指定手势中心点

    //aMap.setPointToCenter(100,100);

    //开启中心为手势中心

    uiSettings.setGestureScaleByMapCenter(true);

    上面这些功能在一般情况下,默认是开启的。当我们有特殊的需求时可以适当的关闭某些手势。

    ②地图缩放

    //是否允许显示地图缩放按钮

    uiSettings.setZoomControlsEnabled(true);

    //是否允许收拾手势缩放地图

    uiSettings.setZoomGesturesEnabled(true);

    //设置双击地图放大在地图中心位置放大,false则是在点击位置放大

    uiSettings.setZoomInByScreenCenter(true);

    //地图缩放按钮的位置

    uiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM);

    //AMapOptions.ZOOM_POSITION_RIGHT_CENTER

    //AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM

    //获取地图缩放按钮位置

    Log.e(TAG, "settingZoom: " + uiSettings.getZoomPosition());

    ③将屏幕中心移动到指定经纬度

    //这个类就是设置地图移动的参数,CameraPosition,参数1---要移动到的经纬度,

    //参数2---地图的放缩级别zoom,参数3---地图倾斜度,参数4---地图的旋转角度

    CameraUpdate mCameraUpdate = CameraUpdateFactory.newCameraPosition(

    new CameraPosition(new LatLng(30.67, 104.07), 10, 0, 0));

    //带动画的移动,aMap添加动画监听时,会有动画效果。不添加不会开启动画

    aMap.animateCamera(mCameraUpdate, 5000, new AMap.CancelableCallback() {

    @Override

    public void onFinish() {

    }

    @Override

    public void onCancel() {

    }

    });

    //不带动画的移动

    aMap.moveCamera(mCameraUpdate);

    ④其他设置

    //是否显示指南针

    uiSettings.setCompassEnabled(true);

    //开启比例尺

    uiSettings.setScaleControlsEnabled(true);

    // 设置logo位置

    uiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_CENTER);

    //AMapOptions.LOGO_POSITION_BOTTOM_LEFTLOGO(左边)

    //AMapOptions.LOGO_MARGIN_BOTTOMLOGO(底部)

    //AMapOptions.LOGO_MARGIN_RIGHTLOGO(右边)

    //AMapOptions.LOGO_POSITION_BOTTOM_CENTER(地图底部居中)

    //AMapOptions.LOGO_POSITION_BOTTOM_LEFT(地图左下角)

    //AMapOptions.LOGO_POSITION_BOTTOM_RIGHT (地图右下角)

    //显示默认的定位按钮

    uiSettings.setMyLocationButtonEnabled(true);

    // 可触发定位并显示当前位置

    aMap.setMyLocationEnabled(true);

    //这里设置定位为了在点击定位按钮后,显示地图定位的位置方便查看

    //注意这里有个坑,在点击定位后发现定位到了默认的位置(海里面),造成这种情况并不是权限和代码的问题,

    //遇到这种情况时,需要手动将GPS定位打开就OK了

    MyLocationStyle mls = new MyLocationStyle();

    mls.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);

    aMap.setMyLocationEnabled(true);

    aMap.setMyLocationStyle(mls);

    代码

    public class InteractiveMapActivity extends BaseActivity {

    @BindView(R.id.a_map_view)

    MapView aMapView;

    @BindView(R.id.button)

    Button button;

    @BindView(R.id.button2)

    Button button2;

    @BindView(R.id.button3)

    Button button3;

    @BindView(R.id.button4)

    Button button4;

    private Unbinder binder;

    private UiSettings uiSettings;

    private AMap aMap;

    private static final String TAG = "CF";

    @Override

    public void setContentView(@Nullable Bundle savedInstanceState) {

    setContentView(R.layout.acticity_interactive);

    binder = ButterKnife.bind(this);

    aMapView.onCreate(savedInstanceState);

    }

    @Override

    public void initData() {

    aMap = aMapView.getMap();

    uiSettings = aMap.getUiSettings();

    //设置地图缩放

    settingZoom();

    //是否显示指南针

    uiSettings.setCompassEnabled(true);

    //开启比例尺

    uiSettings.setScaleControlsEnabled(true);

    // 设置logo位置

    uiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_CENTER);

    //AMapOptions.LOGO_POSITION_BOTTOM_LEFTLOGO(左边)

    //AMapOptions.LOGO_MARGIN_BOTTOMLOGO(底部)

    //AMapOptions.LOGO_MARGIN_RIGHTLOGO(右边)

    //AMapOptions.LOGO_POSITION_BOTTOM_CENTER(地图底部居中)

    //AMapOptions.LOGO_POSITION_BOTTOM_LEFT(地图左下角)

    //AMapOptions.LOGO_POSITION_BOTTOM_RIGHT (地图右下角)

    //显示默认的定位按钮

    uiSettings.setMyLocationButtonEnabled(true);

    // 可触发定位并显示当前位置

    aMap.setMyLocationEnabled(true);

    //这里设置定位为了在点击定位按钮后,显示地图定位的位置方便查看

    //注意这里有个坑,在点击定位后发现定位到了默认的位置(海里面),造成这种情况并不是权限和代码的问题,

    //遇到这种情况时,需要手动将GPS定位打开就OK了

    MyLocationStyle mls = new MyLocationStyle();

    mls.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);

    aMap.setMyLocationEnabled(true);

    aMap.setMyLocationStyle(mls);

    setGestures();

    }

    private void setGestures() {

    //开启放缩手势

    uiSettings.setZoomGesturesEnabled(true);

    //开启滑动手势

    uiSettings.setScrollGesturesEnabled(true);

    //开启旋转手势

    uiSettings.setRotateGesturesEnabled(true);

    //开启双指倾斜手势

    uiSettings.setTiltGesturesEnabled(true);

    //开启全部手势

    uiSettings.setAllGesturesEnabled(true);

    //指定手势中心点

    // aMap.setPointToCenter(100,100);

    //开启中心为手势中心

    uiSettings.setGestureScaleByMapCenter(true);

    }

    private void settingZoom() {

    //是否允许显示地图缩放按钮

    uiSettings.setZoomControlsEnabled(true);

    //是否允许收拾手势缩放地图

    uiSettings.setZoomGesturesEnabled(true);

    //设置双击地图放大在地图中心位置放大,false则是在点击位置放大

    uiSettings.setZoomInByScreenCenter(true);

    //地图缩放按钮的位置

    uiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM);

    // AMapOptions.ZOOM_POSITION_RIGHT_CENTER

    // AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM

    //获取地图缩放按钮位置

    Log.e(TAG, "settingZoom: " + uiSettings.getZoomPosition());

    }

    @Override

    protected void onStart() {

    super.onStart();

    }

    @Override

    protected void onResume() {

    super.onResume();

    aMapView.onResume();

    }

    @Override

    protected void onPause() {

    super.onPause();

    aMapView.onPause();

    }

    @Override

    protected void onStop() {

    super.onStop();

    }

    @Override

    protected void onDestroy() {

    aMapView.onDestroy();

    binder.unbind();

    super.onDestroy();

    }

    @Override

    protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    aMapView.onSaveInstanceState(outState);

    }

    private void moveToTargetPosition() {

    //这个类就是设置地图移动的参数,CameraPosition,参数1---要移动到的经纬度,参数2---地图的放缩级别zoom,参数3---地图倾斜度,参数4---地图的旋转角度

    CameraUpdate mCameraUpdate = CameraUpdateFactory.newCameraPosition(

    new CameraPosition(new LatLng(30.67, 104.07), 10, 0, 0));

    //带动画的移动

    aMap.animateCamera(mCameraUpdate, 5000, new AMap.CancelableCallback() {

    @Override

    public void onFinish() {

    }

    @Override

    public void onCancel() {

    }

    });

    //不带动画的移动

    aMap.moveCamera(mCameraUpdate);

    }

    @OnClick({R.id.button, R.id.button2, R.id.button3, R.id.button4})

    public void onViewClicked(View view) {

    switch (view.getId()) {

    case R.id.button:

    moveToTargetPosition();

    break;

    case R.id.button2:

    showCustomMapBounds(true);

    break;

    case R.id.button3:

    showCustomMapBounds(false);

    break;

    case R.id.button4:

    screenCapture();

    break;

    }

    }

    private void showCustomMapBounds(boolean enable) {

    if (enable) {

    LatLng southwestLatLng = new LatLng(30.67, 104.07);

    LatLng northeastLatLng = new LatLng(30.77, 104.17);

    LatLngBounds latLngBounds = new LatLngBounds(southwestLatLng, northeastLatLng);

    aMap.setMapStatusLimits(latLngBounds);

    } else {

    aMap.setMapStatusLimits(null);

    }

    }

    /** 地图截屏 */

    private void screenCapture() {

    aMap.getMapScreenShot(new AMap.OnMapScreenShotListener() {

    @Override

    public void onMapScreenShot(Bitmap bitmap) {

    }

    @Override

    public void onMapScreenShot(Bitmap bitmap, int i) {

    if (null == bitmap) {

    return;

    }

    try {

    FileOutputStream fos = new FileOutputStream(

    Environment.getExternalStorageDirectory() + "/MyMap/"

    + "test" + ".png");

    boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);

    try {

    fos.flush();

    } catch (IOException e) {

    e.printStackTrace();

    }

    try {

    fos.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    StringBuffer buffer = new StringBuffer();

    if (b)

    buffer.append("截屏成功 ");

    else {

    buffer.append("截屏失败 ");

    }

    if (i != 0)

    buffer.append("地图渲染完成,截屏无网格");

    else {

    buffer.append("地图未渲染完成,截屏有网格");

    }

    Toast.makeText(InteractiveMapActivity.this, buffer.toString(), Toast.LENGTH_SHORT).show();

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    }

    }

    });

    }

    }

    2.地图绘制

    ①绘制marker

    //添加一个默认的marker

    LatLng latLng = new LatLng(30.67, 104.07);

    MarkerOptions markerOptions = new MarkerOptions()

    //必须,设置经纬度

    .position(latLng)

    //设置title

    .title("成都")

    //设置内容

    .snippet("marker内容");

    aMap.addMarker(markerOptions);

    //添加一个自定义的marker

    LatLng latLng1 = new LatLng(30.67, 104.07);

    MarkerOptions mo = new MarkerOptions();

    mo.position(latLng1)

    //设置透明度

    .alpha(0.6f)

    //设置title

    .title("自定义标题")

    //设置内容

    .snippet("自定义内容")

    //设置锚点,锚点是marker图标的位置,(0,0)-(1,1)

    .anchor(0.5f, 1.0f)

    //是否可见

    .visible(true)

    //是否可拖动,注意这里需要长按marker后,才可以拖动

    .draggable(true)

    //添加自定义marker图标

    .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(

    getResources(), R.drawable.location)))

    //是否平贴地图,倾斜地图,感觉marker不是竖直而是粘贴在地面上

    .setFlat(false)

    //是否允许显示infoWindow

    .infoWindowEnable(true)

    //z轴方向的值,重叠

    .zIndex(10)

    //设置marker图片旋转角度,正北开始逆时针方向计算

    .rotateAngle(30.0f)

    //设置infoWindow的偏移位置

    .setInfoWindowOffset(0, 0);

    aMap.addMarker(mo);

    //添加一个动画marker

    LatLng latLng2 = new LatLng(30.68, 104.07);

    MarkerOptions mo1 = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(

    BitmapFactory.decodeResource(getResources(), R.drawable.location)))

    .title("动画").snippet("生长动画").position(latLng2);

    Marker m = aMap.addMarker(mo1);

    final Animation animation = new ScaleAnimation(0, 1, 0, 1);

    animation.setDuration(2000);

    animation.setInterpolator(new AccelerateInterpolator());

    m.setAnimation(animation);

    m.startAnimation();

    //添加一个marker的点击事件

    aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {

    @Override

    public boolean onMarkerClick(Marker marker) {

    //当点击的时候添加生长动画

    marker.setAnimation(animation);

    marker.startAnimation();

    //这里在添加点击监听事件后,原来的InfoWindow被取消了,可以在回调方法中手动实现

    if (marker.isInfoWindowShown()) {

    marker.hideInfoWindow();

    } else {

    marker.showInfoWindow();

    }

    return true;

    }

    });

    //添加拖拽事件,注意此回调方法只对设置了可拖拽的marker生效

    aMap.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {

    @Override

    public void onMarkerDragStart(Marker marker) {

    Log.e(TAG, "onMarkerDragStart: 被拖拽的Marker标题为->" + marker.getTitle());

    }

    @Override

    public void onMarkerDrag(Marker marker) {

    }

    @Override

    public void onMarkerDragEnd(Marker marker) {

    Log.e(TAG, "onMarkerDragEnd: 拖拽完后Maker的经纬度-> lat="

    +marker.getPosition().latitude + " lng=" + marker.getPosition().longitude);

    }

    });

    //自定义infoWindow

    aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() {

    View view;

    @Override

    public View getInfoWindow(Marker marker) {

    if (view == null) {

    view = LayoutInflater.from(DrawActivity.this).inflate(R.layout.custom_info_window, null);

    }

    findViews(marker, view);

    return view;

    }

    @Override

    public View getInfoContents(Marker marker) {

    return null;

    }

    });

    aMap.setOnInfoWindowClickListener(new AMap.OnInfoWindowClickListener() {

    @Override

    public void onInfoWindowClick(Marker marker) {

    Log.e(TAG, "onInfoWindowClick: 标题为:" + marker.getTitle() + " 的InfoWindow被点击了");

    }

    });

    /**

    * 在点击marker显示infoWindow是,找到相应的控件,修改显示

    */

    private void findViews(Marker marker, View view) {

    TextView name = view.findViewById(R.id.name);

    TextView address = view.findViewById(R.id.address);

    name.setText(marker.getTitle());

    address.setText(marker.getSnippet());

    }

    ②绘制线

    ArrayList points = new ArrayList<>();

    points.add(new LatLng(30.66, 104.06));

    points.add(new LatLng(30.66, 104.07));

    points.add(new LatLng(30.67, 104.07));

    points.add(new LatLng(30.67, 104.06));

    points.add(new LatLng(30.66, 104.06));

    aMap.addPolyline(new PolylineOptions().addAll(points).width(10).color(Color.argb(255, 1, 1, 1)));

    ArrayList latlngs = new ArrayList<>();

    latlngs.add(new LatLng(30.6595, 104.0595));

    latlngs.add(new LatLng(30.6595, 104.0705));

    latlngs.add(new LatLng(30.6705, 104.0705));

    latlngs.add(new LatLng(30.6705, 104.0595));

    latlngs.add(new LatLng(30.6595, 104.0595));

    ArrayList a = new ArrayList<>();

    a.add(0);

    a.add(1);

    a.add(2);

    a.add(3);

    //为每条线段添加纹理

    ArrayList b = new ArrayList<>();

    b.add(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.bb)));

    b.add(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.aa)));

    b.add(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.bb)));

    b.add(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.aa)));

    aMap.addPolyline(new PolylineOptions()

    //添加多有的经纬度点

    .addAll(latlngs)

    //绘制线宽

    .width(20)

    //是否开启纹理贴图

    .setUseTexture(true)

    //纹理贴图段的index数组

    .setCustomTextureIndex(a)

    //纹理贴图每段对应的纹理资源图

    .setCustomTextureList(b)

    //是否虚线,纹理贴图时无效

    .setDottedLine(false)

    //绘制成大地线

    .geodesic(false)

    //设置纹理样式

    .setCustomTexture(BitmapDescriptorFactory.fromBitmap(

    BitmapFactory.decodeResource(getResources(), R.drawable.aa)))

    //设置画线的颜色

    .color(Color.argb(255, 1, 1, 1))

    );

    ③绘制面

    LatLng latLng = new LatLng(30.665, 104.065);

    //绘制一个圆

    Circle circle = aMap.addCircle(new CircleOptions()

    .center(latLng)

    .radius(500)

    .fillColor(Color.argb(30, 1, 1, 1))

    .strokeColor(Color.argb(255, 1, 1, 1))

    .strokeWidth(10)

    );

    circle.setStrokeDottedLineType(0);

    // //绘制一个矩形,多边形跟这个一样的

    // aMap.addPolygon(new PolygonOptions()

    // .addAll(createRectangle(new LatLng(30.665, 104.065), 0.01, 0.01))

    // .fillColor(Color.LTGRAY).strokeColor(Color.RED).strokeWidth(5));

    //

    // // 绘制一个椭圆

    // PolygonOptions options = new PolygonOptions();

    // int numPoints = 400;

    // float semiHorizontalAxis = 2f;

    // float semiVerticalAxis = 0.5f;

    // double phase = 2 * Math.PI / numPoints;

    // for (int i = 0; i <= numPoints; i++) {

    // options.add(new LatLng(

    // 30.665 + semiVerticalAxis * Math.sin(i * phase),

    // 104.065 + semiHorizontalAxis * Math.cos(i * phase)

    // ));

    // }

    //

    // Polygon polygon = aMap.addPolygon(options

    // .strokeWidth(25)

    // .strokeColor(Color.argb(50, 1, 1, 1))

    // .fillColor(Color.argb(50, 1, 1, 1))

    // );

    /**

    * 生成一个长方形的四个坐标点

    */

    private List createRectangle(LatLng center, double halfWidth,

    double halfHeight) {

    List latLngs = new ArrayList();

    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;

    }

    ④绘制热力图

    LatLng center = new LatLng(30.665, 104.065);

    //第一步准备数据

    LatLng[] data = new LatLng[100];

    for (int i = 0; i < data.length; i++) {

    double offsetLat = Math.random();

    offsetLat /= 10;

    double offsetLng = Math.random();

    offsetLng /= 10;

    LatLng one = new LatLng(center.latitude + offsetLat, center.longitude + offsetLng);

    data[i] = one;

    }

    int[] colors = {Color.rgb(0, 255, 0), Color.rgb(255, 0, 0)};

    float[] startPoints = {0.0f, 1.0f};

    Gradient gradient = new Gradient(colors, startPoints);

    //初始化热力图

    HeatmapTileProvider.Builder builder = new HeatmapTileProvider.Builder();

    builder.data(Arrays.asList(data))

    // .gradient(gradient)

    ;

    HeatmapTileProvider provider = builder.build();

    // 初始化 TileOverlayOptions

    TileOverlayOptions tileOverlayOptions = new TileOverlayOptions();

    // 设置瓦片图层的提供者

    tileOverlayOptions.tileProvider(provider);

    // 向地图上添加 TileOverlayOptions 类对象

    aMap.addTileOverlay(tileOverlayOptions);

    ⑤绘制长方体

    /**------------------------------------地图上绘制3D图形------------------------------*/

    aMap.showMapText(false);

    aMap.showBuildings(false);

    aMap.setCustomRenderer(new CubeMapRender(aMap));

    /**------------------------------------地图上绘制3D图形-----------------------------*/

    public class CubeMapRender implements CustomRenderer {

    private float[] translate_vector = new float[4];

    public static float SCALE = 0.005F;// 缩放暂时使用这个

    private LatLng center = new LatLng(30.665, 104.065);// 北京市经纬度

    private Cube cube ;

    private AMap aMap;

    float width, height;

    public CubeMapRender(AMap aMap) {

    this.aMap = aMap;

    aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(center,15));

    }

    float[] mvp = new float[16];

    @Override

    public void onDrawFrame(GL10 gl) {

    if(cube != null) {

    Matrix.setIdentityM(mvp, 0);

    //偏移

    PointF pointF = aMap.getProjection().toOpenGLLocation(center);

    Matrix.multiplyMM(mvp,0, aMap.getProjectionMatrix(),0,aMap.getViewMatrix(),0);

    Matrix.translateM(mvp, 0 , pointF.x , pointF.y , 0);

    int scale = 1;

    Matrix.scaleM(mvp, 0 , scale, scale, scale);

    cube.drawES20(mvp);

    }

    }

    @Override

    public void onSurfaceChanged(GL10 gl, int width, int height) {

    this.width = width;

    this.height = height;

    }

    @Override

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {

    //创建cube

    cube = new Cube(0.2f,0.2f,0.2f);

    cube.initShader();

    }

    @Override

    public void OnMapReferencechanged() {

    }

    }

    class Cube {

    ArrayList verticesList = new ArrayList();

    short indices[] = {

    0, 4, 5,

    0, 5, 1,

    1, 5, 6,

    1, 6, 2,

    2, 6, 7,

    2, 7, 3,

    3, 7, 4,

    3, 4, 0,

    4, 7, 6,

    4, 6, 5,

    3, 0, 1,

    3, 1, 2,

    };

    //

    float[] colors = {

    1f, 0f, 0f, 1f, // vertex 0 red

    0f, 1f, 0f, 1f, // vertex 1 green

    0f, 0f, 1f, 1f, // vertex 2 blue

    1f, 1f, 0f, 1f, // vertex 3

    0f, 1f, 1f, 1f, // vertex 4

    1f, 0f, 1f, 1f, // vertex 5

    0f, 0f, 0f, 1f, // vertex 6

    1f, 1f, 1f, 1f, // vertex 7

    };

    public Cube(float width, float height, float depth) {

    // 地图坐标系比较大,将值放大以免太小看不见

    width *= 10000;

    height *= 10000;

    depth *= 10000;

    width /= 2;

    height /= 2;

    depth /= 2;

    //尽量不要让z轴有负数出现

    float vertices1[] = {

    -width, -height, -0,

    width, -height, -0,

    width, height, -0,

    -width, height, -0,

    -width, -height, depth,

    width, -height, depth,

    width, height, depth,

    -width, height, depth,

    };

    for (int i = 0; i < vertices1.length; i++) {

    verticesList.add(vertices1[i]);

    }

    //index

    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(indices.length * 4);

    byteBuffer.order(ByteOrder.nativeOrder());

    indexBuffer = byteBuffer.asShortBuffer();

    indexBuffer.put(indices);

    indexBuffer.position(0);

    //color

    ByteBuffer byteBuffer1 = ByteBuffer.allocateDirect(colors.length * 4);

    byteBuffer1.order(ByteOrder.nativeOrder());

    colorBuffer = byteBuffer1.asFloatBuffer();

    colorBuffer.put(colors);

    colorBuffer.position(0);

    init();

    }

    private FloatBuffer vertextBuffer;

    private ShortBuffer indexBuffer;

    private FloatBuffer colorBuffer;

    private void init() {

    if (vertextBuffer == null) {

    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(verticesList.size() * 4);

    byteBuffer.order(ByteOrder.nativeOrder());

    vertextBuffer = byteBuffer.asFloatBuffer();

    }

    vertextBuffer.clear();

    for (Float f : verticesList) {

    vertextBuffer.put(f);

    }

    vertextBuffer.position(0);

    }

    class MyShader {

    String vertexShader = "precision highp float;\n" +

    " attribute vec3 aVertex;//顶点数组,三维坐标\n" +

    " attribute vec4 aColor;//颜色数组,三维坐标\n" +

    " uniform mat4 aMVPMatrix;//mvp矩阵\n" +

    " varying vec4 color;//\n" +

    " void main(){\n" +

    " gl_Position = aMVPMatrix * vec4(aVertex, 1.0);\n" +

    " color = aColor;\n" +

    " }";

    String fragmentShader = "//有颜色 没有纹理\n" +

    " precision highp float;\n" +

    " varying vec4 color;//\n" +

    " void main(){\n" +

    " gl_FragColor = color;\n" +

    " }";

    int aVertex,aMVPMatrix,aColor;

    int program;

    public void create() {

    int vertexLocation = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);

    int fragmentLocation = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);

    GLES20.glShaderSource(vertexLocation,vertexShader);

    GLES20.glCompileShader(vertexLocation);

    GLES20.glShaderSource(fragmentLocation,fragmentShader);

    GLES20.glCompileShader(fragmentLocation);

    program = GLES20.glCreateProgram();

    GLES20.glAttachShader(program,vertexLocation);

    GLES20.glAttachShader(program,fragmentLocation);

    GLES20.glLinkProgram(program);

    aVertex = GLES20.glGetAttribLocation(program, "aVertex");

    aMVPMatrix = GLES20.glGetUniformLocation(program,"aMVPMatrix");

    aColor = GLES20.glGetAttribLocation(program,"aColor");

    }

    }

    MyShader shader;

    public void initShader() {

    shader = new MyShader();

    shader.create();

    }

    public void drawES20(float[] mvp) {

    GLES20.glUseProgram(shader.program);

    GLES20.glEnable(GLES20.GL_DEPTH_TEST);

    GLES20.glEnableVertexAttribArray(shader.aVertex);

    //顶点指针

    GLES20.glVertexAttribPointer(shader.aVertex, 3, GLES20.GL_FLOAT, false, 0, vertextBuffer);

    //颜色指针

    GLES20.glEnableVertexAttribArray(shader.aColor);

    GLES20.glVertexAttribPointer(shader.aColor,4, GLES20.GL_FLOAT,false,0,colorBuffer);

    GLES20.glUniformMatrix4fv(shader.aMVPMatrix,1,false,mvp,0);

    //开始画

    GLES20.glDrawElements(GLES20.GL_TRIANGLES, indices.length, GLES20.GL_UNSIGNED_SHORT, indexBuffer);

    GLES20.glDisableVertexAttribArray(shader.aVertex);

    GLES20.glDisable(GLES20.GL_DEPTH_TEST);

    }

    }

    ⑥绘制平滑移动的物体

    //这里选择一个公交站,获取经过改公交站的一路公交车的路线

    //让小车再这个路线上移动

    BusStationQuery bsq;

    BusStationSearch bss;

    bsq = new BusStationQuery("天华一路", "成都");

    bss = new BusStationSearch(this, bsq);

    bss.setOnBusStationSearchListener(new BusStationSearch.OnBusStationSearchListener() {

    @Override

    public void onBusStationSearched(BusStationResult busStationResult, int i) {

    List data = busStationResult.getBusStations();

    if (data != null && data.size() > 0) {

    final LatLonPoint busStationPoint = data.get(0).getLatLonPoint();

    List dataBus = data.get(0).getBusLineItems();

    if (dataBus != null && dataBus.size() > 0) {

    BusLineItem bli = dataBus.get(0);

    BusLineQuery blq = new BusLineQuery(

    bli.getBusLineId(), BusLineQuery.SearchType.BY_LINE_ID, bli.getCityCode());

    blq.setPageSize(10);

    blq.setPageNumber(1);

    BusLineSearch busLineSearch = new BusLineSearch(getApplicationContext(), blq);

    busLineSearch.setOnBusLineSearchListener(new BusLineSearch.OnBusLineSearchListener() {

    @Override

    public void onBusLineSearched(BusLineResult busLineResult, int i) {

    List d = busLineResult.getBusLines().get(0).getDirectionsCoordinates();

    List driverPath = new ArrayList<>();

    for (LatLonPoint one : d) {

    driverPath.add(new LatLng(one.getLatitude(), one.getLongitude()));

    }

    moveToPosition(busStationPoint.getLatitude(), busStationPoint.getLongitude());

    aMap.addPolyline(new PolylineOptions()

    .addAll(driverPath)

    .width(20)

    //是否开启纹理贴图

    .setUseTexture(true)

    //绘制成大地线

    .geodesic(false)

    //设置纹理样式

    .setCustomTexture(BitmapDescriptorFactory.fromBitmap(

    BitmapFactory.decodeResource(getResources(),

    R.drawable.custtexture)))

    //设置画线的颜色

    .color(Color.argb(200, 0, 0, 0)));

    final SmoothMoveMarker smoothMarker = new SmoothMoveMarker(aMap);

    // 设置滑动的图标

    smoothMarker.setDescriptor(BitmapDescriptorFactory.fromResource(

    R.mipmap.icon_car));

    // 设置滑动的轨迹左边点

    smoothMarker.setPoints(driverPath);

    // 设置滑动的总时间

    smoothMarker.setTotalDuration(30);

    // 开始滑动

    smoothMarker.startSmoothMove();

    }

    });

    busLineSearch.searchBusLineAsyn();

    }

    } else {

    Log.e(TAG, "onBusStationSearched: no data");

    }

    Log.e(TAG, "onBusStationSearched: " + i);

    }

    });

    bss.searchBusStationAsyn();

    绘制的代码

    public class DrawActivity extends BaseActivity {

    private static final String TAG = "CF";

    @BindView(R.id.draw_map_view)

    MapView drawMapView;

    private Unbinder binder;

    private AMap aMap;

    @Override

    public void setContentView(@Nullable Bundle savedInstanceState) {

    setContentView(R.layout.activity_draw_map);

    binder = ButterKnife.bind(this);

    drawMapView.onCreate(savedInstanceState);

    aMap = drawMapView.getMap();

    }

    @Override

    public void initData() {

    //绘制Marker

    // drawMarker();

    //绘制线段

    // drawLine();

    //绘制面

    // drawSurface();

    //绘制热力图

    drawThermodynamic();

    //绘制3D模型

    draw3DModel();

    // drawSmoothMove();

    }

    //绘制平滑移动

    private void drawSmoothMove() {

    //这里选择一个公交站,获取经过改公交站的一路公交车的路线

    //让小车再这个路线上移动

    BusStationQuery bsq;

    BusStationSearch bss;

    bsq = new BusStationQuery("天华一路", "成都");

    bss = new BusStationSearch(this, bsq);

    bss.setOnBusStationSearchListener(new BusStationSearch.OnBusStationSearchListener() {

    @Override

    public void onBusStationSearched(BusStationResult busStationResult, int i) {

    List data = busStationResult.getBusStations();

    if (data != null && data.size() > 0) {

    final LatLonPoint busStationPoint = data.get(0).getLatLonPoint();

    List dataBus = data.get(0).getBusLineItems();

    if (dataBus != null && dataBus.size() > 0) {

    BusLineItem bli = dataBus.get(0);

    BusLineQuery blq = new BusLineQuery(bli.getBusLineId(), BusLineQuery.SearchType.BY_LINE_ID, bli.getCityCode());

    blq.setPageSize(10);

    blq.setPageNumber(1);

    BusLineSearch busLineSearch = new BusLineSearch(getApplicationContext(), blq);

    busLineSearch.setOnBusLineSearchListener(new BusLineSearch.OnBusLineSearchListener() {

    @Override

    public void onBusLineSearched(BusLineResult busLineResult, int i) {

    List d = busLineResult.getBusLines().get(0).getDirectionsCoordinates();

    List driverPath = new ArrayList<>();

    for (LatLonPoint one : d) {

    driverPath.add(new LatLng(one.getLatitude(), one.getLongitude()));

    }

    moveToPosition(busStationPoint.getLatitude(), busStationPoint.getLongitude());

    aMap.addPolyline(new PolylineOptions()

    .addAll(driverPath)

    .width(20)

    //是否开启纹理贴图

    .setUseTexture(true)

    //绘制成大地线

    .geodesic(false)

    //设置纹理样式

    .setCustomTexture(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.custtexture)))

    //设置画线的颜色

    .color(Color.argb(200, 0, 0, 0)));

    final SmoothMoveMarker smoothMarker = new SmoothMoveMarker(aMap);

    // 设置滑动的图标

    smoothMarker.setDescriptor(BitmapDescriptorFactory.fromResource(R.mipmap.icon_car));

    // 设置滑动的轨迹左边点

    smoothMarker.setPoints(driverPath);

    // 设置滑动的总时间

    smoothMarker.setTotalDuration(30);

    // 开始滑动

    smoothMarker.startSmoothMove();

    }

    });

    busLineSearch.searchBusLineAsyn();

    }

    } else {

    Log.e(TAG, "onBusStationSearched: no data");

    }

    Log.e(TAG, "onBusStationSearched: " + i);

    }

    });

    bss.searchBusStationAsyn();

    }

    private void draw3DModel() {

    moveToDefaultPosition();

    aMap.showMapText(false);

    aMap.showBuildings(false);

    aMap.setCustomRenderer(new CubeMapRender(aMap));

    }

    /**

    * ----------------------------------------热力图---------------------------------------------------------

    */

    private void drawThermodynamic() {

    moveToDefaultPosition();

    LatLng center = new LatLng(30.665, 104.065);

    //第一步准备数据

    LatLng[] data = new LatLng[100];

    for (int i = 0; i < data.length; i++) {

    double offsetLat = Math.random();

    offsetLat /= 10;

    double offsetLng = Math.random();

    offsetLng /= 10;

    LatLng one = new LatLng(center.latitude + offsetLat, center.longitude + offsetLng);

    data[i] = one;

    }

    int[] colors = {Color.rgb(0, 255, 0), Color.rgb(255, 0, 0)};

    float[] startPoints = {0.0f, 1.0f};

    Gradient gradient = new Gradient(colors, startPoints);

    //初始化热力图

    HeatmapTileProvider.Builder builder = new HeatmapTileProvider.Builder();

    builder.data(Arrays.asList(data))

    // .gradient(gradient)

    ;

    HeatmapTileProvider provider = builder.build();

    // 初始化 TileOverlayOptions

    TileOverlayOptions tileOverlayOptions = new TileOverlayOptions();

    // 设置瓦片图层的提供者

    tileOverlayOptions.tileProvider(provider);

    // 向地图上添加 TileOverlayOptions 类对象

    aMap.addTileOverlay(tileOverlayOptions);

    }

    /**

    * ----------------------------------------热力图---------------------------------------------------------

    * */

    /**

    * -----------------------------------------Marker相关----------------------------------------------------

    * */

    /**

    * 地图上marker相关

    */

    private void drawMarker() {

    //添加一个默认的marker

    LatLng latLng = new LatLng(30.67, 104.07);

    MarkerOptions markerOptions = new MarkerOptions()

    //必须,设置经纬度

    .position(latLng)

    //设置title

    .title("成都")

    //设置内容

    .snippet("marker内容");

    aMap.addMarker(markerOptions);

    //添加一个自定义的marker

    LatLng latLng1 = new LatLng(30.67, 104.07);

    MarkerOptions mo = new MarkerOptions();

    mo.position(latLng1)

    //设置透明度

    .alpha(0.6f)

    //设置title

    .title("自定义标题")

    //设置内容

    .snippet("自定义内容")

    //设置锚点,锚点是marker图标的位置,(0,0)-(1,1)

    .anchor(0.5f, 1.0f)

    //是否可见

    .visible(true)

    //是否可拖动,注意这里需要长按marker后,才可以拖动

    .draggable(true)

    //添加自定义marker图标

    .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location)))

    //是否平贴地图,倾斜地图,感觉marker不是竖直而是粘贴在地面上

    .setFlat(false)

    //是否允许显示infoWindow

    .infoWindowEnable(true)

    //z轴方向的值,重叠

    .zIndex(10)

    //设置marker图片旋转角度,正北开始逆时针方向计算

    .rotateAngle(30.0f)

    //设置infoWindow的偏移位置

    .setInfoWindowOffset(0, 0);

    aMap.addMarker(mo);

    //添加一个动画marker

    LatLng latLng2 = new LatLng(30.68, 104.07);

    MarkerOptions mo1 = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location)))

    .title("动画").snippet("生长动画").position(latLng2);

    Marker m = aMap.addMarker(mo1);

    final Animation animation = new ScaleAnimation(0, 1, 0, 1);

    animation.setDuration(2000);

    animation.setInterpolator(new AccelerateInterpolator());

    m.setAnimation(animation);

    m.startAnimation();

    //添加一个marker的点击事件

    aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {

    @Override

    public boolean onMarkerClick(Marker marker) {

    //当点击的时候添加生长动画

    marker.setAnimation(animation);

    marker.startAnimation();

    //这里在添加点击监听事件后,原来的InfoWindow被取消了,可以在回调方法中手动实现

    if (marker.isInfoWindowShown()) {

    marker.hideInfoWindow();

    } else {

    marker.showInfoWindow();

    }

    return true;

    }

    });

    //添加拖拽事件,注意此回调方法只对设置了可拖拽的marker生效

    aMap.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {

    @Override

    public void onMarkerDragStart(Marker marker) {

    Log.e(TAG, "onMarkerDragStart: 被拖拽的Marker标题为->" + marker.getTitle());

    }

    @Override

    public void onMarkerDrag(Marker marker) {

    }

    @Override

    public void onMarkerDragEnd(Marker marker) {

    Log.e(TAG, "onMarkerDragEnd: 拖拽完后Maker的经纬度-> lat=" + marker.getPosition().latitude + " lng=" + marker.getPosition().longitude);

    }

    });

    //自定义infoWindow

    aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() {

    View view;

    @Override

    public View getInfoWindow(Marker marker) {

    if (view == null) {

    view = LayoutInflater.from(DrawActivity.this).inflate(R.layout.custom_info_window, null);

    }

    findViews(marker, view);

    return view;

    }

    @Override

    public View getInfoContents(Marker marker) {

    return null;

    }

    });

    aMap.setOnInfoWindowClickListener(new AMap.OnInfoWindowClickListener() {

    @Override

    public void onInfoWindowClick(Marker marker) {

    Log.e(TAG, "onInfoWindowClick: 标题为:" + marker.getTitle() + " 的InfoWindow被点击了");

    }

    });

    moveToDefaultPosition();

    }

    private void moveToDefaultPosition() {

    //移动到marker位置

    CameraUpdate mCameraUpdate = CameraUpdateFactory.newCameraPosition(

    new CameraPosition(

    new LatLng(30.665, 104.065),

    15,

    0,

    0

    )

    );

    aMap.moveCamera(mCameraUpdate);

    }

    private void moveToPosition(double lat, double lng) {

    //移动到marker位置

    CameraUpdate mCameraUpdate = CameraUpdateFactory.newCameraPosition(

    new CameraPosition(

    new LatLng(lat, lng),

    13,

    0,

    0

    )

    );

    aMap.moveCamera(mCameraUpdate);

    }

    /**

    * 在点击marker显示infoWindow是,找到相应的控件,修改显示

    */

    private void findViews(Marker marker, View view) {

    TextView name = view.findViewById(R.id.name);

    TextView address = view.findViewById(R.id.address);

    name.setText(marker.getTitle());

    address.setText(marker.getSnippet());

    }

    /**

    * -----------------------------------------Marker相关----------------------------------------------------

    */

    /**

    * -----------------------------------------Line相关------------------------------------------------------

    */

    private void drawLine() {

    moveToDefaultPosition();

    ArrayList points = new ArrayList<>();

    points.add(new LatLng(30.66, 104.06));

    points.add(new LatLng(30.66, 104.07));

    points.add(new LatLng(30.67, 104.07));

    points.add(new LatLng(30.67, 104.06));

    points.add(new LatLng(30.66, 104.06));

    aMap.addPolyline(new PolylineOptions().addAll(points).width(10).color(Color.argb(255, 1, 1, 1)));

    ArrayList latlngs = new ArrayList<>();

    latlngs.add(new LatLng(30.6595, 104.0595));

    latlngs.add(new LatLng(30.6595, 104.0705));

    latlngs.add(new LatLng(30.6705, 104.0705));

    latlngs.add(new LatLng(30.6705, 104.0595));

    latlngs.add(new LatLng(30.6595, 104.0595));

    ArrayList a = new ArrayList<>();

    a.add(0);

    a.add(1);

    a.add(2);

    a.add(3);

    ArrayList b = new ArrayList<>();

    b.add(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.bb)));

    b.add(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.aa)));

    b.add(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.bb)));

    b.add(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.aa)));

    aMap.addPolyline(new PolylineOptions()

    //添加多有的经纬度点

    .addAll(latlngs)

    //绘制线宽

    .width(20)

    //是否开启纹理贴图

    .setUseTexture(true)

    //纹理贴图段的index数组

    .setCustomTextureIndex(a)

    //纹理贴图每段对应的纹理资源图

    .setCustomTextureList(b)

    //是否虚线,纹理贴图时无效

    .setDottedLine(false)

    //绘制成大地线

    .geodesic(false)

    //设置纹理样式

    .setCustomTexture(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.aa)))

    //设置画线的颜色

    .color(Color.argb(255, 1, 1, 1))

    );

    }

    /**

    * -----------------------------------------Line相关------------------------------------------------------

    */

    /**

    * -----------------------------------------绘制几何图形相关------------------------------------------------------

    */

    private void drawSurface() {

    moveToDefaultPosition();

    LatLng latLng = new LatLng(30.665, 104.065);

    //绘制一个圆

    Circle circle = aMap.addCircle(new CircleOptions()

    .center(latLng)

    .radius(500)

    .fillColor(Color.argb(30, 1, 1, 1))

    .strokeColor(Color.argb(255, 1, 1, 1))

    .strokeWidth(10)

    );

    circle.setStrokeDottedLineType(0);

    // //绘制一个矩形,多边形跟这个一样的

    // aMap.addPolygon(new PolygonOptions()

    // .addAll(createRectangle(new LatLng(30.665, 104.065), 0.01, 0.01))

    // .fillColor(Color.LTGRAY).strokeColor(Color.RED).strokeWidth(5));

    //

    // // 绘制一个椭圆

    // PolygonOptions options = new PolygonOptions();

    // int numPoints = 400;

    // float semiHorizontalAxis = 2f;

    // float semiVerticalAxis = 0.5f;

    // double phase = 2 * Math.PI / numPoints;

    // for (int i = 0; i <= numPoints; i++) {

    // options.add(new LatLng(

    // 30.665 + semiVerticalAxis * Math.sin(i * phase),

    // 104.065 + semiHorizontalAxis * Math.cos(i * phase)

    // ));

    // }

    //

    // Polygon polygon = aMap.addPolygon(options

    // .strokeWidth(25)

    // .strokeColor(Color.argb(50, 1, 1, 1))

    // .fillColor(Color.argb(50, 1, 1, 1))

    // );

    }

    /**

    * 生成一个长方形的四个坐标点

    */

    private List createRectangle(LatLng center, double halfWidth,

    double halfHeight) {

    List latLngs = new ArrayList();

    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;

    }

    /**

    * -----------------------------------------绘制几何图形相关------------------------------------------------------

    */

    @Override

    protected void onResume() {

    super.onResume();

    drawMapView.onResume();

    }

    @Override

    protected void onPause() {

    super.onPause();

    drawMapView.onPause();

    }

    @Override

    protected void onStop() {

    super.onStop();

    }

    @Override

    protected void onDestroy() {

    List list = aMap.getMapScreenMarkers();

    if (list != null && list.size() > 0) {

    for (Marker one : list) {

    one.destroy();

    }

    }

    drawMapView.onDestroy();

    //这里注意,butterknife注销一定要在所有销毁的最后,否则会出现空指针异常

    binder.unbind();

    super.onDestroy();

    }

    @Override

    protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    drawMapView.onSaveInstanceState(outState);

    }

    }

    展开全文
    weixin_31485835 2021-06-03 07:00:01
  • lorogy 2020-02-15 19:14:04
  • weixin_42495556 2021-06-03 06:58:22
  • qq_39702506 2020-05-16 14:05:44
  • qq_16151185 2021-08-11 15:34:45
  • weixin_30884455 2021-05-26 13:02:15
  • weixin_39989215 2020-12-20 08:21:33
  • weixin_35793573 2021-06-04 04:46:53
  • weixin_43997143 2019-12-05 15:34:41
  • weixin_29611573 2021-01-14 01:07:06
  • weixin_36204727 2021-06-06 05:50:41
  • weixin_29097457 2021-02-05 19:03:51
  • weixin_41767649 2019-08-20 13:53:40
  • qq_43634982 2020-09-15 13:19:40
  • weixin_42133680 2021-06-04 09:17:53
  • afufufufu 2021-08-06 14:52:54
  • weixin_32600979 2021-01-26 06:46:58
  • u012761229 2019-10-24 09:38:45
  • weixin_43131046 2021-08-19 14:18:26
  • memoryI 2019-10-12 14:53:48
  • luzhangyi 2019-03-06 10:24:05
  • weixin_39900830 2021-01-15 18:35:47
  • weixin_43838488 2021-08-16 11:35:51
  • Beam007 2020-05-22 16:29:23
  • lcdxlh 2017-01-18 06:54:04
  • bq_cui 2018-08-02 21:23:22

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,987
精华内容 794
关键字:

高德透明地图