【问题标题】:Google Map Polygon is not editable through Marker draggingGoogle Map Polygon 无法通过标记拖动进行编辑
【发布时间】:2018-09-09 12:59:44
【问题描述】:

i 通过长按事件创建了 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;
    }

【问题讨论】:

  • 你能显示问题的图片吗,我不明白你要描述的问题是什么
  • 请检查图片..

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


【解决方案1】:

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

  1. 在我的数组列表中更新标记 latlng。
  2. 在创建循环的帮助下 多边形。
  3. 移除之前的多边形

    如果(多边形!= null) 多边形.remove();

    public void onMarkerDrag(Marker marker) {
        AlertUtils.showLog("marker", "onMarkerDrag" + " marker id : " + marker.getTitle());
    
        if (arrayListPolygonData.size() > 1) {
    
            //step 1
            for (int i = 0; i < arrayListPolygonData.size(); i++) {
    
                MapPolygonData mapData = arrayListPolygonData.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();
    
                    arrayListPolygonData.set(i, mapData);
    
                    break;
                }
            }
    
            //step 2
            polygonOptions = new PolygonOptions();
    
            for (int i = 0; i < arrayListPolygonData.size(); i++) {
    
                MapPolygonData mapData = arrayListPolygonData.get(i);
    
                LatLng latLng = mapData.latLng;
    
                arrayListLatLngs.add(mapData.latLng);
    
                if (polygon != null)
                    polygon.remove();
    
                polygonOptions.add(latLng);
                polygonOptions.strokeColor(Color.RED);
                polygonOptions.fillColor(Color.parseColor("#40000000"));
                polygon = map.addPolygon(polygonOptions);
    
            }
        }
    
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2011-03-16
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    相关资源
    最近更新 更多