高德地图 SDK 的应用 01:绘制多边形区域图

遇到一需求:在高德地图上绘制多边形区域

还能咋样,翻一翻 高德地图sdk参考手册,发现了这样一个方法:【addPolygon(PolygonOptions options)

public final Polygon addPolygon(PolygonOptions options)
在地图上添加一个多边形(polygon)对象。

对主要类进行了解:【PolygonOptions

com.amap.api.maps.model
类 PolygonOptions

java.lang.Object
com.amap.api.maps.model.PolygonOptions
所有已实现的接口:
android.os.Parcelable

public final class PolygonOptions
extends java.lang.Object
implements android.os.Parcelable
多边形覆盖物选项类
	// 模拟数据
	private void initLatLngData() {
        mLatLnglist = new ArrayList<>();
        mLatLnglist.add(new LatLng(23.103171, 113.232999));
        mLatLnglist.add(new LatLng(23.095631, 113.224331));
        mLatLnglist.add(new LatLng(23.091131, 113.240166));
        mLatLnglist.add(new LatLng(23.099539, 113.241797));
    }

	// 绘制区域
	private void addArea(int strokeColor, int fillColor, List<LatLng> latLnglist) {
        // 定义多边形的属性信息
        PolygonOptions polygonOptions = new PolygonOptions();
        // 添加多个多边形边框的顶点
        for (LatLng latLng : latLnglist) {
            polygonOptions.add(latLng);
        }
        // 设置多边形的边框颜色,32位 ARGB格式,默认为黑色
        polygonOptions.strokeColor(strokeColor);
        // 设置多边形的边框宽度,单位:像素
        polygonOptions.strokeWidth(10);
        // 设置多边形的填充颜色,32位ARGB格式
        polygonOptions.fillColor(fillColor); // 注意要加前两位的透明度
        // 在地图上添加一个多边形(polygon)对象
        mAmap.addPolygon(polygonOptions);
    }

期间遇到一个问题:默认定位为紫禁城,加上如果定位到区域的某一地点,又不能完全显示整块区域,所以找到了这么一个方法【addMarkers(java.util.ArrayList options, boolean moveToCenter

public final java.util.ArrayList<Marker> addMarkers
			(java.util.ArrayList<MarkerOptions> options, boolean moveToCenter)
在地图上添一组图片标记(marker)对象,
并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示。
参数:
options - 多个markerOptions对象,它们分别定义了对应marker的属性信息。
moveToCenter - 是否改变地图状态,默认为false。

对主要类进行了解:【MarkerOptions

com.amap.api.maps.model
类 MarkerOptions

java.lang.Object
com.amap.api.maps.model.MarkerOptions
所有已实现的接口:
android.os.Parcelable
private void addMarker(boolean visible, List<LatLng> latLnglist) {
        ArrayList<MarkerOptions> options = new ArrayList<>();
        for (LatLng latLng : latLnglist) {
            // 在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示
            MarkerOptions markerOptions = new MarkerOptions();
            // 设置Marker覆盖物的位置坐标。Marker经纬度坐标不能为Null,坐标无默认值
            markerOptions.position(latLng);
            // 设置Marker覆盖物是否可见
            markerOptions.visible(visible);
            // 设置Marker覆盖物是否可拖拽
            markerOptions.draggable(visible);
            options.add(markerOptions);
        }
        // 在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示
        mAmap.addMarkers(options, true);
    }

最终代码:

/**
 * @author 小侨
 * @time 2018/1/31  16:17
 * @desc 区域绘制图
 */

public class RegionalDrawingActivity extends AppCompatActivity {

    private MapView mMapView;
    private AMap mAmap;

    private List<LatLng> mLatLnglist1;
    private List<LatLng> mLatLnglist2;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_regionaldrawing);

        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.regional_drawing_map);
        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        mMapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。
        //初始化地图控制器对象
        if (mAmap == null) {
            mAmap = mMapView.getMap();
        }

        initLatLngData1();
        initLatLngData2();
        addArea(Color.parseColor("#050505"), Color.parseColor("#55FBEFDD"), mLatLnglist1);
        addArea(Color.parseColor("#00ff00"), Color.parseColor("#5500EFDD"), mLatLnglist2);
        addMarker(false,mLatLnglist1);
    }

    private void initLatLngData1() {
        mLatLnglist1 = new ArrayList<>();
        mLatLnglist1.add(new LatLng(23.103171, 113.232999));
        mLatLnglist1.add(new LatLng(23.095631, 113.224331));
        mLatLnglist1.add(new LatLng(23.091131, 113.240166));
        mLatLnglist1.add(new LatLng(23.099539, 113.241797));
    }

    private void initLatLngData2() {
        mLatLnglist2 = new ArrayList<>();
        mLatLnglist2.add(new LatLng(23.104197, 113.223386));
        mLatLnglist2.add(new LatLng(23.091526, 113.220854));
        mLatLnglist2.add(new LatLng(23.094013, 113.251195));
        mLatLnglist2.add(new LatLng(23.105066, 113.247762));
    }

    private void addArea(int strokeColor, int fillColor, List<LatLng> latLnglist) {
        // 定义多边形的属性信息
        PolygonOptions polygonOptions = new PolygonOptions();
        // 添加多个多边形边框的顶点
        for (LatLng latLng : latLnglist) {
            polygonOptions.add(latLng);
        }
        // 设置多边形的边框颜色,32位 ARGB格式,默认为黑色
        polygonOptions.strokeColor(strokeColor);
        // 设置多边形的边框宽度,单位:像素
        polygonOptions.strokeWidth(10);
        // 设置多边形的填充颜色,32位ARGB格式
        polygonOptions.fillColor(fillColor); // 注意要加前两位的透明度
        // 在地图上添加一个多边形(polygon)对象
        mAmap.addPolygon(polygonOptions);
    }

    private void addMarker(boolean visible, List<LatLng> latLnglist) {
        ArrayList<MarkerOptions> options = new ArrayList<>();
        for (LatLng latLng : latLnglist) {
            // 在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示
            MarkerOptions markerOptions = new MarkerOptions();
            // 设置Marker覆盖物的位置坐标。Marker经纬度坐标不能为Null,坐标无默认值
            markerOptions.position(latLng);
            // 设置Marker覆盖物是否可见
            markerOptions.visible(visible);
            // 设置Marker覆盖物是否可拖拽
            markerOptions.draggable(visible);
            options.add(markerOptions);
        }
        // 在地图上添一组图片标记(marker)对象,并设置是否改变地图状态以至于所有的marker对象都在当前地图可视区域范围内显示
        mAmap.addMarkers(options, true);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mMapView.onResume();
    }

    @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);
    }
}


概览 http://a.amap.com/lbs/static/unzip/Android_Map_Doc/index.html
ZhangZeQiao/DemoApp · GitHub

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值