【发布时间】:2022-01-21 10:38:33
【问题描述】:
我正在做我最后一年的项目,但我被困在距离矩阵中。我正在制作一个使用谷歌地图的应用程序,但我不知道如何找到两个地方之间的时间和距离。我读了一些文章,但不明白我是 Flutter 的初学者。
【问题讨论】:
标签: flutter google-maps google-places-api google-distancematrix-api
我正在做我最后一年的项目,但我被困在距离矩阵中。我正在制作一个使用谷歌地图的应用程序,但我不知道如何找到两个地方之间的时间和距离。我读了一些文章,但不明白我是 Flutter 的初学者。
【问题讨论】:
标签: flutter google-maps google-places-api google-distancematrix-api
您可以通过 HaverSine 公式找到距离,在 dart 中实现为:
import'dart:math' as Math;
void main()=>print(getDistanceFromLatLonInKm(73.4545,73.4545,83.5454,83.5454));
double getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2-lat1); // deg2rad below
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;
}
double deg2rad(deg) {
return deg * (Math.pi/180);
}
Output: 1139.9231530436646
来源 Calculate distance between two latitude-longitude points? (Haversine formula) 归功于 Chuck 和 @cmd_prompter。
选项 2
如果您正在寻找两个位置之间的最短距离,也就是 LatLng,您可以使用 https://pub.dev/packages/geolocator 插件。
double distanceInMeters = await Geolocator().distanceBetween(52.2165157, 6.9437819, 52.3546274, 4.8285838);
【讨论】:
首先,您需要一个 Google Maps API 密钥,然后您需要一个 Google 云帐户,可以免费创建一个,并且您还可以免费试用,这对于一个研究项目来说应该足够了。 此链接可能有助于设置帐户和项目:https://developers.google.com/maps/documentation/distance-matrix/cloud-setup
账户和项目设置完成后需要enable the distance matrix API
获得 API 密钥后,您就可以开始使用 API:调用 API 所需的只是您的 API 密钥以及起点和目标位置(为此,您可以使用纬度/经度、完整地址、地点 ID...)。下面是一个使用经纬度坐标的例子:
https://maps.googleapis.com/maps/api/distancematrix/json?destinations=40.659569,-73.933783&origins=40.6655101,-73.89188969999998&key=**YOUR_API_KEY_HERE**
您可以为起点和终点提供多个用竖线(|)分隔的位置(例如:11.45455,-13.4675434|12.353645,-32.463634|11.45455,-13.4675434...),API 会将每个起点位置与所有终点相匹配,并为每个起点匹配返回距离对(基本上一个请求将返回起点乘以终点的结果)。
注意:我提供的示例非常简单,但是距离矩阵有更多的功能(例如:考虑到流量)请访问此link 以了解 API 的功能概述。
颤动
要在 Flutter 应用中调用 API,您需要一个 HTTP 客户端,例如 DIO:
import 'package:dio/dio.dart';
void getDistanceMatrix() async {
try {
var response = await Dio().get('https://maps.googleapis.com/maps/api/distancematrix/json?destinations=40.659569,-73.933783&origins=40.6655101,-73.89188969999998&key=YOUR_API_KEY_HERE');
print(response);
} catch (e) {
print(e);
}
}
要查看您会收到什么类型的回复,请访问此link。
【讨论】: