Java 谷歌地图用户可编辑多边形与固定数量的点在安卓?
我正在使用Google Map多边形标记,我有预定义的lat/long数组,需要设置多边形区域,这对我来说很好,但是当我拖动标记多边形线时,它不会改变,应该在我拖动标记时改变 这是我的问题,我将放一张图片来说明它更容易 代码如下: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
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();