C# 从谷歌检索GPS/DMS坐标

C# 从谷歌检索GPS/DMS坐标,c#,asp.net,.net,httpwebresponse,C#,Asp.net,.net,Httpwebresponse,我在一个ASP.Net程序中有一些代码,该程序向Google map API发出请求,并将坐标检索为LAT/LNG string url = https://maps.google.com/maps/api/geocode/xml?address=ABC DEF,UK&sensor=false&key=AI123ZYX WebRequest request = WebRequest.Create(url); using (WebRes

我在一个ASP.Net程序中有一些代码,该程序向Google map API发出请求,并将坐标检索为LAT/LNG

      string url = https://maps.google.com/maps/api/geocode/xml?address=ABC DEF,UK&sensor=false&key=AI123ZYX
        WebRequest request = WebRequest.Create(url);

        using (WebResponse response = (HttpWebResponse)request.GetResponse())
        {
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                // removed for brevity
                // Returns LAT/LNG values
            }
        }
这与预期一样有效,但我无法确定如何转换或检索DMS(度、分钟、秒,例如1°23'45“W 67°89'10”N)值

我查过谷歌的文档,但所有东西都指向手机或网络,你输入值或地址,它就会显示出来


我也在尝试做同样的事情,但是程序化了,这样我就可以存储LAT/LNG以及DMS(或者可能称为GPS)坐标。如何检索这些坐标?

因此,对谷歌地图API的查询似乎会返回一个JSON对象(SRC:)。C#不以本机方式处理JSON,因此您可以使用Newtonsoft的JSON.NET库帮助您将对象解析为更可行的内容

您可以通过几种方式从那里访问信息。一种是使用Json.net的反序列化函数。这将获取JSON字符串并将其插入到可用对象中。您可以创建一个自定义对象,该对象将获取您关心的JSON部分,然后删除其余部分

这来自我链接的答案,我们将使用它作为我们试图访问的数据集

"routes" : [
      {
         "bounds" : {
            "northeast" : {
               "lat" : 34.1330949,
               "lng" : -117.9143879
            },
            "southwest" : {
               "lat" : 33.8068768,
               "lng" : -118.3527671
            }
         },
         "copyrights" : "Map data ©2016 Google",
         "legs" : [
            {
               "distance" : {
                  "text" : "35.9 mi",
                  "value" : 57824
               },
               "duration" : {
                  "text" : "51 mins",
                  "value" : 3062
               },
               "end_address" : "Universal Studios Blvd, Los Angeles, CA 90068, USA",
               "end_location" : {
                  "lat" : 34.1330949,
                  "lng" : -118.3524442
               },
               "start_address" : "Disneyland (Harbor Blvd.), S Harbor Blvd, Anaheim, CA 92802, USA",
               "start_location" : {
                  "lat" : 33.8098177,
                  "lng" : -117.9154353
               },

  ... Additional results truncated in this example[] ...
因此,为了访问我们想要的内容,我们需要创建一系列与我们想要的信息相匹配的类

class Routes
{
   Legs legs;
}

class Legs
{
   EndLocation endLocation;
}

class EndLocation
{
   string lat;
   string lon;
}
这是一段粗略的代码,我还没能测试它,但希望它能给你一个好的开始方向

using Newtonsoft.Json;

void ReadJson()
{
   // Let's say for now that our results are held in a file, for simplicity's sake
   string jsonString = File.ReadAllText(location.txt);
   
   // Now we'll call the deserializer, since we have the JSON string. 
   // It'll turn it into our object automatically with the template.
   Routes locationInfo = JsonConvert.DeserializeObject<Routes>(jsonString);
   serializer.Deserialize(jsonString, locationInfo);
}
使用Newtonsoft.Json;
void ReadJson()
{
//为了简单起见,现在我们假设我们的结果保存在一个文件中
字符串jsonString=File.ReadAllText(location.txt);
//现在我们将调用反序列化程序,因为我们有JSON字符串。
//它将使用模板自动将其转换为我们的对象。
Routes locationInfo=JsonConvert.DeserializeObject(jsonString);
反序列化(jsonString,locationInfo);
}
之后,您应该能够访问
locationInfo
对象,就像访问任何常规C#对象一样。
这应该行得通,但至少我希望能为您解决问题提供一个好的方向。

谢谢,我会尝试一下,但目前我返回的数据是XML格式的(因此假设数据是相同的)。我仍然不明白的是,如果我得到endLocation,我如何得到数据格式为1°23'45“W 67°89'10”N?我有点困惑。您是否能够获得LAT/LONG的值?如果是,是否为十进制格式(例如:12.555°)?如果是这样的话,那么您所需要做的就是十进制到DMS(度/分/秒)的转换。