简体   繁体   English

如何在谷歌地图 flutter 中动态绘制多边形?

[英]How can I dynamically draw polygons in google maps flutter?

I'm trying to draw polygons on google maps based on user input, but all the tutorials i've seen online have done it inside an init method.我正在尝试根据用户输入在谷歌地图上绘制多边形,但我在网上看到的所有教程都是在 init 方法中完成的。 I tried implementing it outside of the init state, but it doesn't seem to work.我尝试在 init state 之外实现它,但它似乎不起作用。 Please help!请帮忙! Thanks!谢谢!

Here is the method to add the polygons to a set:下面是将多边形添加到集合中的方法:

Set<Polygon> _polygons = HashSet<Polygon>();

Future<void> drawPolygonBoundary(String name, List points) async {
    List<LatLng> boundaryPoints = [];
    for (List point in points) {
      boundaryPoints.add(LatLng(point[0], point[1]));
    }
    Set<Polygon> newPolygons = HashSet<Polygon>();
    newPolygons.add(
      Polygon(
        polygonId: PolygonId(name),
        points: boundaryPoints,
        fillColor: Colors.green.withOpacity(0.3),
        strokeColor: Colors.green,
        geodesic: true,
        strokeWidth: 4,
        onTap: () {},
      ),
    );
    //update polygons
    setState(() {
      _polygons = newPolygons.toSet();
    });
    print(_polygons);
  }

And this is my GoogleMap widget:这是我的 GoogleMap 小部件:

GoogleMap(
        onMapCreated: _onMapCreated,
        polygons: _polygons,
        initialCameraPosition: CameraPosition(
          target: _center,
          zoom: 10.0,
        ),
        myLocationEnabled: true,
        myLocationButtonEnabled: false,
      ),

Any help would be greatly appreciated!任何帮助将不胜感激!

I developed the below methods to draw the polygon:我开发了以下方法来绘制多边形:

void _onMapLongPress(LatLng latLng) {
setState(() {
  // Check if a marker with the same markerId already exists
  final id = (_markers.length + 1).toString();
  final marker = Marker(
    markerId: MarkerId(id),
    position: latLng,
    icon: BitmapDescriptor.defaultMarker,
    draggable: true,
    onDragEnd: (LatLng newPosition) {
      _markers = Set.from(_markers.map((m) => m.markerId.value == id ? m.copyWith(positionParam: newPosition) : m));
      _updatePolygon();
    },
    infoWindow: InfoWindow(
      title: "Marker ${id}",
      snippet: "Tap to delete",
      onTap: () => _onDeletePress(latLng, id),
    ),
  );
  _markers.add(marker);
  _updatePolygon();
});
}

void _onDeletePress(LatLng latLng, String markerId) {
setState(() {
  _markers.removeWhere((m) => m.markerId.value == markerId);
});
_updatePolygon();
}

void _updatePolygon() {
_polygons.clear();
if (_markers.length >= 3) {
  final test = Set.from(_markers.map((m) => m.position));
  final origin = test.reduce((value, element) => LatLng(
      (value.latitude + element.latitude) / 2,
      (value.longitude + element.longitude) / 2));
  final polarCoordinates =
  test.map((c) => _toPolar(c, origin)).toList();
  polarCoordinates.sort((a, b) =>
      a.theta == b.theta ? a.r.compareTo(b.r) : a.theta.compareTo(b.theta));
  final orderedCoordinates =
      polarCoordinates.map((p) => _fromPolar(p, origin)).toList();
  setState(() {
    _polygons.clear();
    _polygons.add(Polygon(
      polygonId: PolygonId(test.length.toString()),
      points: orderedCoordinates,
      fillColor: Colors.green.withOpacity(0.5),
      strokeWidth: 3,
      strokeColor: Colors.green,
    ));
    final waypoints = waypointsAlongPolygon(Polygon(points: orderedCoordinates), 10.0);
    for (var i = 0; i < waypoints.length; i++) {
      _markers.add(
          Marker(
              markerId: MarkerId(i.toString()),
              position: waypoints[i],
            icon: BitmapDescriptor.defaultMarker,
          );
          _waypointMarkers.add(waypointMarker);
    }
  });
} else {
  setState(() {
    _polygons.clear();
  });
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Google 地图 - 具有重叠多边形的融合表 - Google Maps - Fusion Tables with Overlapping Polygons 如何在谷歌地图 flutter 的初始化程序中访问小部件 - How to access widget in an initializer in google maps flutter 在 Flutter Google 地图中,我如何根据实时数据库侦听器添加和删除标记? - In Flutter Google Maps how do I add and remove markers based on a realtime database listener? 如何使用谷歌地图初始化 CameraPosition 类型的变量 For Flutter? - How to initialize a variable of CameraPosition type using google Maps For Flutter? 如何删除 firestore Flutter 中的地图 - how to delete Maps in firestore Flutter 在 Google 地图 JavaScript Api 中单击时,如何根据结果位置动态添加标记信息? - How to add dynamically, based on the result places, information to markers when clicked in Google Maps JavaScript Api? 带有 Firestore 的 Google 地图 Flutter:当用户在 Google Map 上缩小时如何更新地理查询 - Google Maps Flutter with Firestore: How to update geo query when user zooms out on Google Map 如何动态使用 arrayRemove - How Can I Use arrayRemove Dynamically 如何在Flutter中过滤一个stream? - How can I filter a stream in Flutter? 如何将 TextEditingController 转换为 Flutter 中的 String? - How can I cast TextEditingController to String in Flutter?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM