使用Asp.NetMVC C#使用google地图API计算2个邮政编码之间的距离

本文关键字:使用 2个 邮政编码 之间 距离 计算 API Asp NetMVC google 地图 | 更新日期: 2023-09-27 18:21:36

今天我需要创建一些功能来计算邮政编码之间的距离,这对我来说并不容易。幸运的是,我找到了一个好方法,我相信它可以对其他人有所帮助。

使用Asp.NetMVC C#使用google地图API计算2个邮政编码之间的距离

目标是根据商店和客户之间的距离创建配送费。

我确实尝试过一些方法,最好的也是最简单的。

首先,我需要创建一个基于谷歌json响应的viewModel。

请求返回的json结构具有以下格式:

{
     "destination_addresses" : [ "Centro, Juiz de Fora - MG, 36013-210, Brasil" ],
     "origin_addresses" : [ "Passos, Juiz de Fora - MG, 36026-460, Brasil" ],
     "rows" : [
          {
            "elements" : [
                 {
                   "distance" : 
                        {
                          "text" : "3,1 km",
                          "value" : 3149
                        },
                   "duration" : 
                        {
                          "text" : "11 minutos",
                          "value" : 645
                        },
                   "status" : "OK"
                 }
             ]
         }
     ],
     "status" : "OK"
}

viewModel的属性应该相当于json返回属性。

这样,我的viewModel看起来是这样的:

//Class for "distance" and "duration" which has the "text" and "value" properties.
public class CepElementNode
{
    public string text { get; set; }
    public string value { get; set; }
}
//Class for "distance", "duration" and "status" nodes of "elements" node 
public class CepDataElement
{
    public CepElementNode distance { get; set; }
    public CepElementNode duration { get; set; }
    public string status { get; set; }
}
//Class for "elements" node
public class CepDataRow
{
    public List<CepDataElement> elements { get; set; }
}
//Class which wrap the json response
public class RequestCepViewModel
{
    public List<string> destination_addresses { get; set; }
    public List<string> origin_addresses { get; set; }
    public List<CepDataRow> rows { get; set; }
    public string status { get; set; }
}

请注意,在C#中,"destination_addresss"、"original_ddresss"answers"rows"等数组元素应该是List。通过这种方式,我们可以在RequestCepViewModel实例中反序列化json响应。

最后,在我的行动中,我有这样的代码:

var url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=36026460&destinations=36013210&mode=driving&language=en-EN&sensor=false";
WebRequest webRequest = WebRequest.Create(url);
WebResponse response = webRequest.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
var jsonResponseString = reader.ReadToEnd();
var viewModel = new JavaScriptSerializer().Deserialize<RequestCepViewModel>(jsonResponseString);

http://prntscr.com/91n31u

http://prntscr.com/91n2o1

http://prntscr.com/91n3si

希望它能帮助到别人。

问候