由于项目的需求,需要动态的在地图上画出多边形,并且需要判断一个点是否在多边形的范围内,根据官方的demo,结合网上的查的资料,做出的效果如下图所示:
思路就是:
1.点击地图增加marker;
2.拿到marker,根据marker来画线(判断点的个数,大于 1 时);
3.点击marker可以进行删除,长按可以进行拖拽操作;
4.当点击确定时,清除线,把多边形画出来(当点大于 2 时);
5.在地图上点击一点,并判断该点是否在多边形区域内
第一步:初始化地图,并增加监听事件
- 声明和初始化需要用到的变量
//marker 相关
private Marker marker;
List<Marker> markers = new ArrayList<>();
//算是map的索引,通过此id 来按顺序取出坐标点
private List<String> ids = new ArrayList<>();
//用来存储坐标点
private Map<String, LatLng> latlngs = new HashMap<>();
private InfoWindow mInfoWindow;
//线
private Polyline mPolyline;
//多边形
private Polygon polygon;
//private List<Polygon> polygons = new ArrayList<>();
private double latitude;
private double longitude;
//是坐标点的多少,用来判断是画线,还是画多边形
private int size;
//根据别名来存储画好的多边形
private Map<String, Polygon> polygonMap = new HashMap<>();
//多边形的别名
private List<String> aliasname = new ArrayList<>();
//
private boolean polygonContainsPoint;
//用来存储一个点所在的所有的区域
List<String> areas = new ArrayList<>();
map = (MapView) findViewById(R.id.map);
baidumap = map.getMap();
//给marker设置点击事件,用来删除marker
baidumap.setOnMarkerClickListener(this);
//给map设置监听事件,用来拿到点击地图的点的坐标
baidumap.setOnMapClickListener(this);
//给marker设置拖拽监听事件,用来获取拖拽完成后的坐标
baidumap.setOnMarkerDragListener(this);
- 点击地图的监听事件:
/**
* 通过点击地图,来获取坐标
*
* @param latLng
*/
@Overrid