使用 Asp.Net MVC C# 使用谷歌地图 API 计算 2 个邮政编码之间的距离

Posted

技术标签:

【中文标题】使用 Asp.Net MVC C# 使用谷歌地图 API 计算 2 个邮政编码之间的距离【英文标题】:Calculate distance between 2 zipcodes using google maps API using Asp.Net MVC C# 【发布时间】:2016-02-12 22:24:38 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我们的目标是根据商店和客户之间的距离收取运费。

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

首先,我需要根据 google 的 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; 

请注意,“destination_addresses”、“origin_addresses”和“rows”等数组元素在 C# 中应该是一个 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

希望对某人有所帮助。

问候

【讨论】:

以上是关于使用 Asp.Net MVC C# 使用谷歌地图 API 计算 2 个邮政编码之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.net、C#、MVC 在模板中生成 pdf

开发asp.net应用程序,使用谷歌地图还是必应地图?

如何在 asp.net 页面中使用 javascript 在谷歌地图上显示点?

我可以从站点地图生成 ASP.NET MVC 路由吗?

ASP.NET C# MVC 实体框架

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量