【问题标题】:Get latitude and Longitude from Google Geo Code JSON in MVC(C#)从 MVC(C#) 中的 Google Geo Code JSON 获取纬度和经度
【发布时间】:2019-10-25 23:38:12
【问题描述】:

我无法从从谷歌地理代码 API 收到的 JSON 结果中检索值

功能

 public static async Task GetLatLogFromAddress()
        {     
            using (var client = new HttpClient())
            {
                Uri Inputuri = new Uri("https://maps.googleapis.com/maps/api/geocode/json?address=123+N+TRY+Street+Paul,+MN&key=APIKey");
                client.BaseAddress = Inputuri;

                // Add an Accept header for JSON format.
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                // List data response.
                HttpResponseMessage response = await client.GetAsync(client.BaseAddress); ;  // Blocking call! Program will wait here until a response is received or a timeout occurs.
                if (response.IsSuccessStatusCode)
                {
                    // Parse the response body

                    string result = await response.Content.ReadAsStringAsync();
                    dynamic jsonData = JsonConvert.DeserializeObject<dynamic>(result);
                    foreach(var geo in jsonData)
                    {
                        var lat = (decimal)geo[0].geometry.location.lat;
                        var longi = (decimal)geo[0].geometry.location.lng;
                    }

                }
                else
                {
                    Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);

                } 
                client.Dispose();
            }
        }

JSON 格式的结果是

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Winnetka",
               "short_name" : "Winnetka",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Los Angeles",
               "short_name" : "LA",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Los Angeles County",
               "short_name" : "Los Angeles County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "Winnetka, Los Angeles, CA, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 34.2355209,
                  "lng" : -118.5534191
               },
               "southwest" : {
                  "lat" : 34.1854649,
                  "lng" : -118.588536
               }
            },
            "location" : {
               "lat" : 34.2048586,
               "lng" : -118.5739621
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 34.2355209,
                  "lng" : -118.5534191
               },
               "southwest" : {
                  "lat" : 34.1854649,
                  "lng" : -118.588536
               }
            }
         },
         "place_id" : "ChIJ0fd4S_KbwoAR2hRDrsr3HmQ",
         "types" : [ "neighborhood", "political" ]
      }
   ],
   "status" : "OK"
}

这些是我们从 Google GeoCode API 获得的结果

我正在尝试获取纬度和经度,但我收到一个错误,即 Geo 不包含任何几何定义。如何访问从 google geo code API 收到的 JSON 结果?

【问题讨论】:

标签: c# api model-view-controller google-geocoding-api google-geolocation


【解决方案1】:
var data = JsonConvert.DeserializeObject<dynamic>(result);
foreach(var item in data.results)
{
    var lat = (decimal)(item.geometry.location.lat);
    var longi = (decimal)(item.geometry.location.lng);
}

问题是您认为jsonData 代表results,而实际上它是一个包含results 数组的对象。

【讨论】:

  • 您能否告诉我如何从上述结果中获取位置?
  • 您能具体指定您感兴趣的属性名称吗? (在 JSON 中)
  • 我想要 long_name,它是 Los Angeles,类型是 locality
  • 您可以在此处查看pastebin.com/QgbG1tVp 如何检索您需要的内容。确保包含所有必要的命名空间。
  • 非常感谢,我正在尝试在 C# 中构建一个搜索功能,该功能可以查看数据库中的提供者地址,并与添加的邮政编码/地址用户进行比较,并显示按距离接近的结果排序。我正在使用地理坐标计算距离。我在查询中使用它时遇到问题。我们可以聊天吗?你能帮我解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多