【问题标题】:Google Geocode Map Response Array谷歌地理编码地图响应数组
【发布时间】:2014-07-30 14:35:27
【问题描述】:

我正在使用 Google Geocoding API Wrapper 库 (https://code.google.com/p/gmaps-api-net/) 来获取/映射一个完整的地址,但由于 Google 没有返回所有地址类型和索引,因此响应不时映射正确该数组未反映我想要的值的正确位置,否则会引发空异常。

代码

    public AddressMapper(GeocodeResponse geocodeResponse)
    {
        AddressComponents = geocodeResponse.Results[0].AddressComponents;


        if (AddressComponents != null)
        {
            StreetNumber = TryParse(AddressType.StreetNumber);
            Street = TryParse(AddressType.StreetNumber);
            Neighborhood = TryParse(AddressType.StreetNumber);
            City = TryParse(AddressType.StreetNumber);
            Province = TryParse(AddressType.StreetNumber);
            Country = TryParse(AddressType.StreetNumber);
            Political = TryParse(AddressType.StreetNumber);
            PostalCode = TryParse(AddressType.StreetNumber);
            FormattedAddress = TryParse(AddressType.StreetNumber);
            //Latitude = address.Geometry.Location.Latitude.ToString(CultureInfo.InvariantCulture);
            //Longitude = address.Geometry.Location.Longitude.ToString(CultureInfo.InvariantCulture);
        }
    }
>>> This seems to always be an empty string.
    private string TryParse(AddressType addressType)
    {
        if (AddressComponents == null) return "";
        foreach (var component in AddressComponents)
        {
            return component.Types.Contains(addressType) ? component.LongName : string.Empty;
        }
    return string.Empty;
}
}

响应(JSON)

    {
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Parkway",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara County",
               "short_name" : "Santa Clara 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" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.4219998,
               "lng" : -122.0839596
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4233487802915,
                  "lng" : -122.0826106197085
               },
               "southwest" : {
                  "lat" : 37.4206508197085,
                  "lng" : -122.0853085802915
               }
            }
         },
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

如何/什么是确保元素存在于响应中的正确方法?

【问题讨论】:

    标签: c# arrays json google-maps google-maps-api-3


    【解决方案1】:

    不保证返回的类型或address_components 的顺序。

    遍历所有address_components,测试types是否匹配特定类型以及何时设置相关变量。

    【讨论】:

    • 我试过`foreach(AddressComponents中的var组件){return component.Types.Contains(addressType)? component.LongName : string.Empty; } ` 但每个字段都是一个空字符串。 addressType 是一个枚举。
    • 对不起,我对 c# 不熟悉,无法告诉你循环有什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多