【问题标题】:Google Maps user-editable polygon with fixed number of points in Android?在Android中具有固定点数的谷歌地图用户可编辑多边形?
【发布时间】:2020-08-15 01:04:04
【问题描述】:

我正在研究谷歌地图多边形标记,我已经预定义了纬度/长数组,并且需要设置多边形区域,这对我来说工作正常,但是当我拖动标记多边形线时不会改变,它应该有拖动标记时进行更改。

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

这里是代码:

    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);

}

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

坐标包含来自 sqlite 的多边形坐标

【问题讨论】:

  • 请添加完整的错误堆栈跟踪。
  • updateMarkerLocation 中,如果markerlist 不包含latLng,那么position 将为-1。下一行markerlist.set(position, marker.getPosition()); 将抛出一个ArrayIndexOutOfBoundsException。也许添加一个检查position &gt;= 0,或者如果这不应该发生追溯以确定原因。
  • @SirRaffleBuffle ` if (position >= 0) { markerlist.set(position, marker.getPosition()); marker.setTag(marker.getPosition());` 我现在像这样更新我的代码,错误消失了,但是当我拖动我的点时它完美地拖动但我无法制作多边形
  • @BlackCoder 你找到答案了吗?
  • @shivanipatil No

标签: java android-studio google-maps google-maps-markers polygon


【解决方案1】:

您似乎正在使用Marker 标签来存储多边形点的最后显示坐标 (LatLng)。要显示的坐标存储在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());
  }
}

【讨论】:

  • 你是对的。我用坐标替换标记列表,但没有运气,得到同样的错误
【解决方案2】:

我认为您使用的工具效率有点低。我的建议是存储一组标记,并使用 markerTag 来存储你的点的索引,所以在 drawPolygon

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

然后,当你移动标记时,你会像这样替换那个点的坐标:

points[marker.getTag().toInt()] = marker.getTag().getPosition();

对不起,这太含糊了。我使用的是 kotlin,所以我可能也弄错了一些语法。

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2012-04-18
    • 2018-04-11
    • 2014-12-22
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多