无法通过谷歌反地理编码获取澳大利亚地址的街道、城市和国家信息

4
我有这样一个要求,需要从给定的地址中提取街道名称、邮政编码、城市、州、国家、纬度和经度。对于印度地址,它可以正常工作,但是对于澳大利亚地址,它无法检索到街道名称和邮政编码,而从JSON数组中检索地址组件的其余部分是可以的。
我使用了在Google开发者论坛中提到的以下代码。
public void FrmGoogleGeoCode(string frmAddress)
{
        string addUrl = "http://maps.google.com/maps/api/geocode/json?address='" + frmAddress + "'&sensor=false";
      var result = new System.Net.WebClient().DownloadString(addUrl);
      GoogleGeoCodeResponse test = JsonConvert.DeserializeObject<GoogleGeoCodeResponse>(result);
      var response = test.results.First();  
}

在变量result中,我得到了关于地址组件和格式化地址的JSON数组。 我有一个需求,从澳大利亚的地址中检索街道名称、城市、州、邮政编码和国家。 请解除这个问题的阻塞。 谢谢。

2
你能否发布你正在尝试的地址?还有GoogleGeoCodeResponse的定义。当我尝试以下内容时,我可以得到有效的街道级响应。http://maps.google.com/maps/api/geocode/json?address=300%20george%20st,%20sydney,%202000&sensor=false - Jonathan
1个回答

1
感谢您的回复,我尝试了相同的地址,即澳大利亚悉尼乔治街300号,邮编为2000,但是响应中没有该地址的元素。
frmAddress ="300 George Street, Sydney NSW 2000, Australia";

这是我用来获取街道名称、城市、郊区、国家和邮政编码的代码。
        string addUrl = "http://maps.google.com/maps/api/geocode/json?address='" + frmAddress + "'&sensor=false";
      var result = new System.Net.WebClient().DownloadString(addUrl);
      GoogleGeoCodeResponse test = JsonConvert.DeserializeObject<GoogleGeoCodeResponse>(result);
      var response = test.results.First();
      string route=null;
      string locality=null;
      string pstlCode = null;
      for (int i = 0; i < response.address_components.Count(); i++)
      {
          int j = 0;
          var components = response.address_components[i];
          string type = components.types[j].ToString();
          if (type == "route")
          {
              route = response.address_components[i].long_name.ToString();

          }
          if (type == "locality")
          {
           locality = response.address_components[i].long_name.ToString();
          }
          if (type == "postal_code")
          {
           pstlCode = response.address_components[i].long_name.ToString();
          }
      }
      frmLocation = route +","+locality +","+ pstlCode;

然后我用这段代码尝试了澳大利亚新南威尔士州悉尼乔治街2000号。

下面是得到的响应。请您能否只发布代码,这将对我非常有帮助。

{ "results" : [ {"address_components" : [
            {
               "long_name" : "George Street",
               "short_name" : "George Street",
               "types" : [ "colloquial_area", "political" ]
            },
            {
               "long_name" : "New South Wales",
               "short_name" : "NSW",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Australia",
               "short_name" : "AU",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "George Street, NSW, Australia",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : -33.9134399,
                  "lng" : 151.1667177
               },
               "southwest" : {
                  "lat" : -34.0059442,
                  "lng" : 151.0332033
               }
            },
            "location" : {
               "lat" : -33.9547504,
               "lng" : 151.1053691
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : -33.9134399,
                  "lng" : 151.1667177
               },
               "southwest" : {
                  "lat" : -34.0059442,
                  "lng" : 151.0332033
               }
            }
         },
         "partial_match" : true,
         "types" : [ "colloquial_area", "political" ]
      }
   ],
   "status" : "OK"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接