【问题标题】:How can I use Google Map's distance matrix API in flutter. Can anyone help me如何在颤振中使用谷歌地图距离矩阵 API。谁能帮我
【发布时间】:2022-01-21 10:38:33
【问题描述】:

我正在做我最后一年的项目,但我被困在距离矩阵中。我正在制作一个使用谷歌地图的应用程序,但我不知道如何找到两个地方之间的时间和距离。我读了一些文章,但不明白我是 Flutter 的初学者。

【问题讨论】:

    标签: flutter google-maps google-places-api google-distancematrix-api


    【解决方案1】:

    您可以通过 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);
    

    【讨论】:

      【解决方案2】:

      首先,您需要一个 Google Maps API 密钥,然后您需要一个 Google 云帐户,可以免费创建一个,并且您还可以免费试用,这对于一个研究项目来说应该足够了。 此链接可能有助于设置帐户和项目:https://developers.google.com/maps/documentation/distance-matrix/cloud-setup

      账户和项目设置完成后需要enable the distance matrix API

      然后create an API key

      获得 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

      【讨论】:

        猜你喜欢
        • 2017-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多