Flutter 使用google_maps_颤振插件的颤振多段线距离

Flutter 使用google_maps_颤振插件的颤振多段线距离,flutter,dart,google-maps-flutter,Flutter,Dart,Google Maps Flutter,您好,我正在使用google_maps_Flatter插件,并在我的地图上显示了一条多段线。我想做的是计算多段线长度的距离。我的代码是,下面有一个片段。我不想使用方向API。如何计算多段线距离并打印到控制台?谢谢你的阅读 class ShowMap extends StatefulWidget { final double lat; final double lng; ShowMap({Key key, this.lat, this.lng}) : super(key: key);

您好,我正在使用google_maps_Flatter插件,并在我的地图上显示了一条多段线。我想做的是计算多段线长度的距离。我的代码是,下面有一个片段。我不想使用方向API。如何计算多段线距离并打印到控制台?谢谢你的阅读

class ShowMap extends StatefulWidget {
  final double lat;
  final double lng;
  ShowMap({Key key, this.lat, this.lng}) : super(key: key);

  @override
  _ShowMapState createState() => _ShowMapState();
}

class _ShowMapState extends State<ShowMap> {
  // Field
  double lat, lng;
  BitmapDescriptor policeIcon;
  List<Marker> list = List();
  List<String> listDocuments = List();
  final Set<Polyline> _polyline = {};
  GoogleMapController controller;
  List<LatLng> latlngSegment1 = List();
  List<LatLng> latlngSegment2 = List();
  static LatLng _lat1 = LatLng(45.19, -121.59);
  static LatLng _lat2 = LatLng(45.30, -122.20);
  static LatLng _lat3 = LatLng(45.11, -122.61);
  static LatLng _lat4 = LatLng(45.42, -122.62);
  static LatLng _lat5 = LatLng(45.34, -122.32);
  static LatLng _lat6 = LatLng(45.21, -122.2);
  bool _myLocationButtonEnabled = true;
  bool _myLocationEnabled = true;
  
// Method
  @override
  void initState() {
    super.initState();
    // findLatLng();

    readDataFromFirebase();

    setState(() {
      lat = widget.lat;
      lng = widget.lng;
      latlngSegment1.add(_lat1);
      latlngSegment1.add(_lat2);
      latlngSegment1.add(_lat3);
      latlngSegment1.add(_lat4);

      //line segment 2
      latlngSegment2.add(_lat4);
      latlngSegment2.add(_lat5);
      latlngSegment2.add(_lat6);
      latlngSegment2.add(_lat1);
    });
  }
类ShowMap扩展StatefulWidget{
最终双lat;
最终双液化天然气;
ShowMap({Key-Key,this.lat,this.lng}):super(Key:Key);
@凌驾
_ShowMapState createState()=>\u ShowMapState();
}
类_ShowMapState扩展状态{
//场
双lat,液化天然气;
位图描述符图标;
List=List();
List-listDocuments=List();
最终集_折线={};
谷歌地图控制器;
List latlngSegment1=List();
List latlngSegment2=List();
静态LatLng _lat1=LatLng(45.19,-121.59);
静态LatLng _lat2=LatLng(45.30,-122.20);
静态LatLng _lat3=LatLng(45.11,-122.61);
静态LatLng _lat4=LatLng(45.42,-122.62);
静态LatLng _lat5=LatLng(45.34,-122.32);
静态LatLng _lat6=LatLng(45.21,-122.2);
bool_myLocationButtonneEnabled=真;
bool_myLocationEnabled=true;
//方法
@凌驾
void initState(){
super.initState();
//findLatLng();
readDataFromFirebase();
设置状态(){
lat=widget.lat;
lng=1.lng;
latlngSegment1.添加(_lat1);
latlngSegment1.添加(_lat2);
latlngSegment1.添加(_lat3);
latlngSegment1.添加(_lat4);
//线段2
latlngSegment2.添加(_lat4);
latlngSegment2.添加(_lat5);
latlngSegment2.添加(_lat6);
latlngSegment2.添加(_lat1);
});
}

假设您要计算由latlngSegment1中的点创建的多段线的距离

为此,您需要计算latlngSegment1中每个连续LatLng点之间的距离

我会用这样的东西

            double calculateDistane(List<LatLng> polyline) {
                double totalDistance = 0;
                for (int i = 0; i < polyline.length; i++) {
                  if (i < polyline.length - 1) { // skip the last index
                    totalDistance += getStraightLineDistance(
                        polyline[i + 1].latitude,
                        polyline[i + 1].longitude,
                        polyline[i].latitude,
                        polyline[i].longitude);
                  }
                }
               return totalDistance;
              }

              double getStraightLineDistance(lat1, lon1, lat2, lon2) {
                var R = 6371; // Radius of the earth in km
                var dLat = deg2rad(lat2 - lat1);
                var dLon = deg2rad(lon2 - lon1);
                var a = math.sin(dLat / 2) * math.sin(dLat / 2) +
                    math.cos(deg2rad(lat1)) *
                        math.cos(deg2rad(lat2)) *
                        math.sin(dLon / 2) *
                        math.sin(dLon / 2);
                var c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a));
                var d = R * c; // Distance in km
                return d * 1000; //in m
              }

              dynamic deg2rad(deg) {
                return deg * (math.pi / 180);
              }
双计算斯坦(列表多段线){
双总距离=0;
对于(int i=0;i

注意:getStraightLineDistance()的函数给出两个latlng点之间的直线距离,这可能不是某人从点A到达点B的方式。

您想显示两个位置之间的距离,对吗?我正在查找一条多段线中多个位置的总距离,因此是直线的总距离。谢谢,这让我走上了正确的方向打开。最终目标是显示用户沿静态路线行驶的距离。因此,我想知道静态高分辨率多段线路线的长度,然后显示用户沿路线行驶的距离。不用于导航,主要用于参考。再次感谢您的回复,非常有帮助。