微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Google检索GPS / DMS坐标

如何解决从Google检索GPS / DMS坐标

我在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)值。

我已经检查过Google的文档,但是所有内容都指向您输入值或地址的手机或网络,并且它将显示出来。

我正在尝试通过编程方式进行同样的操作,因此我可以将LAT / LNG与DMS(或可能称为GPS)坐标一起存储。如何获取这些坐标?

解决方法

因此,对Google Maps API的查询看起来将返回一个JSON对象(SRC:https://stackoverflow.com/a/34597393/8502032)。 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,"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);
}

此后,您应该可以访问locationInfo对象,就像访问任何常规C#对象一样。 应该有效,但是至少我希望为您提供解决问题的指导。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。