Flutter 使用google_maps_颤振插件的颤振多段线距离
您好,我正在使用google_maps_Flatter插件,并在我的地图上显示了一条多段线。我想做的是计算多段线长度的距离。我的代码是,下面有一个片段。我不想使用方向API。如何计算多段线距离并打印到控制台?谢谢你的阅读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);
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的方式。您想显示两个位置之间的距离,对吗?我正在查找一条多段线中多个位置的总距离,因此是直线的总距离。谢谢,这让我走上了正确的方向打开。最终目标是显示用户沿静态路线行驶的距离。因此,我想知道静态高分辨率多段线路线的长度,然后显示用户沿路线行驶的距离。不用于导航,主要用于参考。再次感谢您的回复,非常有帮助。