Google地图多边形无法通过标记拖动进行编辑

时间:2018-03-30 13:17:09

标签: android google-maps android-maps-v2

enter image description here我通过长按事件创建了3个标记,因此创建了多边形。如果我尝试拖动第一个标记,则需要显示2到3的折线,但是它会创建内部点,并从显示折线的区域显示。

如果我拖动1个标记,我需要2到3的折线。 如果我拖动2个标记我需要1到3的折线。 如果我拖动3个标记,我需要从1到2的折线。

我的代码:

map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
            @Override
            public void onMapLongClick(LatLng latLng) {

                String id = Utils.generateRandomNumber() + "";

                arrayListLatLngs.add(createMapPolygonData(latLng, id));

                map.addMarker(new MarkerOptions()
                        .position(latLng)
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                        .title(arrayListLatLngs.size() + "")
                        .snippet(id)
                        .draggable(true));

                if (arrayListLatLngs.size() > 1) {
                    if (polygon != null) {
                        polygon.remove();
                        polygon = null;
                    }

                    polygonOptions.add(latLng);
                    polygonOptions.strokeColor(Color.RED);
                    polygonOptions.fillColor(Color.parseColor("#40000000"));
                    polygon = map.addPolygon(polygonOptions);
                } else {
                    polygonOptions = new PolygonOptions().add(latLng);
                }

            }
        });


        map.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {

            @Override
            public void onMarkerDragStart(Marker marker) {
                AlertUtils.showLog("marker", "onMarkerDragEnd" + " marker id : " + marker.getTitle());
            }

            @Override
            public void onMarkerDrag(Marker marker) {
                AlertUtils.showLog("marker", "onMarkerDrag" + " marker id : " + marker.getTitle());

                if (arrayListLatLngs.size() > 1) {

                    for (int i = 0; i < arrayListLatLngs.size(); i++) {

                        MapPolygonData mapData = arrayListLatLngs.get(i);
                        AlertUtils.showLog("marker", "mapData" + " marker id : " + mapData.id);

                        if (marker.getSnippet().equals(mapData.id)) {

                            mapData.latitude = marker.getPosition().latitude;
                            mapData.longitude = marker.getPosition().longitude;
                            mapData.latLng = marker.getPosition();

                            arrayListLatLngs.set(i, mapData);

                            if (arrayListLatLngs.size() > 1) {

                                if (polygon != null) {
                                    polygon.remove();
                                    polygon = null;
                                }

                                polygonOptions.add(marker.getPosition());
                                polygonOptions.strokeColor(Color.RED);
                                polygonOptions.fillColor(Color.parseColor("#40000000"));
                                polygon = map.addPolygon(polygonOptions);

                                mapData.polygon=polygon;
                                arrayListLatLngs.set(i, mapData);

                            } /*else {
                                polygonOptions = new PolygonOptions().add(marker.getPosition());
                            }*/

                            break;
                        }
                    }
                }
            }



private MapPolygonData createMapPolygonData(LatLng latLng, String id) {
        MapPolygonData mapData = null;
        try {
            mapData = new MapPolygonData();
            mapData.id = id;
            mapData.latitude = latLng.latitude;
            mapData.longitude = latLng.longitude;
            mapData.latLng = latLng;
            mapData.title = id;
            mapData.snippet = id;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mapData;
    }

1 个答案:

答案 0 :(得分:0)

拖动标记时立即使用以下逻辑更新多边形。

  1. 在我的arraylist中更新标记latlng。
  2. 在创建循环的帮助下     多边形。
  3. 删除早期的多边形

    if(polygon!= null)  polygon.remove();

    {{1}}