Java 谷歌地图用户可编辑多边形与固定数量的点在安卓?

Java 谷歌地图用户可编辑多边形与固定数量的点在安卓?,java,android-studio,google-maps,google-maps-markers,polygon,Java,Android Studio,Google Maps,Google Maps Markers,Polygon,我正在使用Google Map多边形标记,我有预定义的lat/long数组,需要设置多边形区域,这对我来说很好,但是当我拖动标记多边形线时,它不会改变,应该在我拖动标记时改变 这是我的问题,我将放一张图片来说明它更容易 代码如下: myMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() { @Override public void onMarkerDragStart(Mark

我正在使用Google Map多边形标记,我有预定义的lat/long数组,需要设置多边形区域,这对我来说很好,但是当我拖动标记多边形线时,它不会改变,应该在我拖动标记时改变

这是我的问题,我将放一张图片来说明它更容易

代码如下:

    myMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
        @Override
        public void onMarkerDragStart(Marker marker) {
        }

        @Override
        public void onMarkerDrag(Marker marker) {
            updateMarkerLocation(marker);
            drawPolygon(coordinates);

        }

        private void updateMarkerLocation(Marker marker) {

            LatLng latLng = (LatLng) marker.getTag();
            int position = coordinates.indexOf(latLng);
            if (position >= 0) {
                coordinates.set(position, marker.getPosition());
                marker.setTag(marker.getPosition());
            }
        }

        @Override
        public void onMarkerDragEnd(Marker marker) {

        }
    });
}

private void drawPolygon(List<LatLng> coordinates) {

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

    PolygonOptions polygonOptions = new PolygonOptions();
    polygonOptions.fillColor(Color.GREEN);
    polygonOptions.strokeColor(Color.GREEN);
    polygonOptions.strokeWidth(3);
    polygonOptions.addAll(coordinates);
    polygon = myMap.addPolygon(polygonOptions);

}
myMap.setOnMarkerDragListener(新的GoogleMap.OnMarkerDragListener(){
@凌驾
MarkerDragStart上的公共空白(标记){
}
@凌驾
MarkerDrag上的公共空白(标记){
更新标记位置(标记);
绘制多边形(坐标);
}
专用void更新标记位置(标记){
LatLng LatLng=(LatLng)marker.getTag();
int位置=坐标indexOf(latLng);
如果(位置>=0){
坐标.set(position,marker.getPosition());
marker.setTag(marker.getPosition());
}
}
@凌驾
MarkerDragend上的公共空白(标记){
}
});
}
私有空心多边形(列表坐标){
如果(多边形!=null){
polygon.remove();
}
PolygonOptions PolygonOptions=新PolygonOptions();
多边形选项。填充颜色(颜色。绿色);
多功能选择。strokeColor(颜色。绿色);
脉冲宽度(3);
polygonooptions.addAll(坐标);
多边形=myMap.addPolygon(多边形选项);
}

如上图所示,我的标记移动但不生成多边形


坐标包含sqlite中的多边形坐标

看起来您正在使用
标记
标记来存储多边形点最后显示的坐标(
LatLng
)。要显示的坐标存储在
坐标中
是吗

如果是这样,那么我猜您的代码应该是:

private void updateMarkerLocation(Marker marker) {
  LatLng latLng = (LatLng) marker.getTag();
  int position = coordinates.indexOf(latLng);
  if (position >= 0) {
    coordinates.set(position, marker.getPosition());
    marker.setTag(marker.getPosition());
  }
}

我认为你使用的工具效率有点低。我的建议是存储一个标记数组,并使用markerTag存储点的索引,因此在drawPolygon中

for (int i = 0; i < coordinates.size(); i++) {
   markers[i].setTag(i); //Associate a marker with a point
}

对不起,这太模糊了。我使用kotlin,所以我可能也有一些语法错误。

请添加完整的错误堆栈跟踪。在
updateMarkerLocation
中,如果
markerlist
不包含
latLng
,则
位置将为-1。下一行
markerlist.set(position,marker.getPosition())
然后将抛出一个
ArrayIndexOutOfBoundsException
。可以添加对
位置>=0
的检查,或者如果不应该出现这种情况,请回溯以确定原因。@sirrafblebuffle`if(position>=0){markerlist.set(position,marker.getPosition());marker.setTag(marker.getPosition())polygon@BlackCoder你找到答案了吗?@shivanipatil Noyou是对的。我用坐标替换了markerlist,但运气不好,得到了同样的错误
points[marker.getTag().toInt()] = marker.getTag().getPosition();