Google Maps редактируемый пользователем полигон с фиксированным количеством точек в Android? - PullRequest
2 голосов
/ 30 апреля 2020

Я работаю над маркером полигона Google Map, у меня есть предопределенный массив lat / long, и мне нужно установить площадь многоугольника. Он работает нормально для меня, но когда я перетаскиваю маркер, линия многоугольника не меняется, она должна иметь быть измененным, когда я перетаскиваю маркер.

Вот моя проблема, я поставлю картинку, чтобы проиллюстрировать это проще.

This is my polygon

вот код:

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

}

after dragging marker

как на картинке выше, мой маркер двигается, но не делает многоугольник.

координаты содержат координаты многоугольника из sqlite

1 Ответ

0 голосов
/ 04 мая 2020

Похоже, вы используете тег 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());
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...