我使用google_maps_flutter在googleMap上显示多边形。每次用户点击Map时,一个点就会被添加到一个点列表中,然后输入到我创建多边形的方法中。我也有一个删除按钮,清除我的点列表,因此我的多边形的基础上,这些点清除以及(只有在ANDROID)。
下面是我认为与问题相关的代码片段:
List<LatLng> polygonCoords = [LatLng(0, 0), LatLng(0, 0)]; // this list holds the points that // form my polygon
void _setCoords(latlong) { // latlong are the coordinats received from the user tap on the map
setState(() {
LatLng coords = latlong;
if (polygonCoords.lastIndexOf(zero) == 1) { // where zero = LatLng(0,0)
polygonCoords.removeWhere((element) => element == zero);
polygonCoords.add(coords);
polygonCoords.add(coords); // first coordinate is added twice because the polygon needs // to loop back to the first point to close
} else {
polygonCoords.removeLast();
polygonCoords.add(coords);
}
});
}
Set<Polygon> myPolygon() {
Set<Polygon> polygonSet = new Set();
polygonSet.add(Polygon(
fillColor: Colors.white,
polygonId: PolygonId('polygonId'),
points: polygonCoords,
strokeWidth: 3,
strokeColor: Colors.white,
));
return polygonSet;
}
GoogleMap(
polygons: myPolygon(), // here I give the polygon set to my map
mapType: MapType.satellite,
initialCameraPosition: CameraPosition(
target: snapshot.data,
zoom: 16.0,
),
onMapCreated: _onMapCreated,
onTap: (latlong) {
_setCoords(latlong); // calling the method above to add the coordinates to my list
},
);
void deleteSelection() {
setState(() {
polygonCoords.clear();
polygonCoords.add(zero);
polygonCoords.add(zero);
});
}
在iOS上发生的情况如下:我在Map上加了四个点。我按下删除按钮,什么也没有发生(我检查了日志,列表确实清除了)。我在Map上放了另一个点,前面的多边形仍然显示,然后我再加一个点,没有任何变化。当我添加第三个点时,旧的多边形消失,新的多边形在我的UI中渲染。
我试着在deleteSelection()方法中调用myPolygon(),我试着在方法外声明集合,我试着清除集合。没有任何变化,在Android上它按预期工作,但在iOS上,即使我检查了多边形确实有新的坐标,它仍然不会显示它,直到有3个点。
我现在有一个解决方案,那就是当我的集合中的点少于3个时,将多边形的可见属性设置为false(visible: polygonCoords.length < 3 ? false : true
),但我想知道为什么上面的方法在iOS上不起作用,为什么在Android上它会显示创建一条线的前2个点。
使用google_maps_flutter:1.1.0版本
1条答案
按热度按时间r8xiu3jd1#
我用一些逻辑来处理它。
如果您的latlng点列表大小小于3,然后使折线,否则添加点列表中的多边形。
在谷歌Map中添加折线和多边形。GoogleMap(多边形:_con!.polygons,polylines:_con!.polylines,)