1、前提
由于需求是点击多边形范围展示该范围详情,然而高德api却没有提供此项功能,不得已只能自己想办法,后发现可以换一种思路,利用地图点击事件获得该点击值的经纬度 ,在利用该经纬度去判断是否下图形当中,可以实现此功能,虽然繁琐,但不失为一种能实现的方式,思路清晰了,开始实现!
2、实现
-
首先拿到点击地图的经纬度
aMap.setOnMapClickListener(latLng -> { Log.e("TAG", "setOnMapClickListener: "+latLng ); });
-
把图形经纬度值存在maplist里
Map<Integer, List<LatLng>> map; for (int i = 0; i < xx.size(); i++) { List<LatLng> list = new ArrayList<>(); for (int j = 0; j < xx.size(); j++) { list.add(new LatLng(lat, lng)); } map.put(i, list); }
-
判断某个点是否在区域里,返回true为在,false为不在
public boolean polygonCon(AMap aMap, List<LatLng> latLngList, LatLng latLng) { PolygonOptions options = new PolygonOptions(); for (LatLng i : latLngList) { options.add(i); } options.visible(false); //设置区域是否显示 Polygon polygon = aMap.addPolygon(options); boolean contains = polygon.contains(latLng); polygon.remove(); return contains; }
-
position为点击的哪个
aMap.setOnMapClickListener(new AMap.OnMapClickListener() { @Override public void onMapClick(LatLng latLng) { int position = -1; for (int i = 0; i < map.size(); i++) { if (polygonCon(aMap, Objects.requireNonNull(map.get(i)), latLng)) { position = i; } } //点击的哪个 Log.e("TAG", "onMapClick: "+position ); } });