【问题标题】:how to read city ,state,country from google map geocoding json data如何从谷歌地图地理编码json数据中读取城市、州、国家
【发布时间】:2017-04-05 12:26:37
【问题描述】:

我正在使用 .net MVC 3 和 Google Maps v3。我想在一个动作中进行地理编码。那就是将有效地址传递给 Google,然后将城市、州和国家/地区取回。您将如何在使用 C# 的操作中执行此操作?

    [HttpPost]
    public ActionResult getLocation(string pincode)
    {
        string url = "http://maps.googleapis.com/maps/api/geocode/json?
         sensor=true&address=";
        var data="";
        dynamic googleResults = new Uri(url + 
         pincode).GetDynamicJsonObject();
        foreach (var result in googleResults.results)
        {

            data= "[" + result.geometry.location.lat + "," + 
         result.geometry.location.lng + "] " + result.formatted_address;
        }
        return Json("Successful" + data, JsonRequestBehavior.AllowGet);
    }

这是我从谷歌地理编码获得的 json 数据,我想从地址组件类型中读取城市、州和国家/地区行政区域级别 2、行政区域级别 1、国家/地区

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "411022",
               "short_name" : "411022",
               "types" : [ "postal_code" ]
            },
            {
               "long_name" : "SRPF",
               "short_name" : "SRPF",
               "types" : [ "political", "sublocality", "sublocality_level_2" ]
            },
            {
               "long_name" : "Wanowrie",
               "short_name" : "Wanowrie",
               "types" : [ "political", "sublocality", "sublocality_level_1" ]
            },
            {
               "long_name" : "Pune",
               "short_name" : "Pune",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Pune",
               "short_name" : "Pune",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Maharashtra",
               "short_name" : "MH",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "India",
               "short_name" : "IN",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "SRPF, Wanowrie, Pune, Maharashtra 411022, India",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 18.5065017,
                  "lng" : 73.9128001
               },
               "southwest" : {
                  "lat" : 18.4966367,
                  "lng" : 73.90290019999999
               }
            },
            "location" : {
               "lat" : 18.4986371,
               "lng" : 73.9074389
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 18.5065017,
                  "lng" : 73.9128001
               },
               "southwest" : {
                  "lat" : 18.4966367,
                  "lng" : 73.90290019999999
               }
            }
         },
         "place_id" : "ChIJQ1UppdzBwjsRPIND-6yqBNI",
         "types" : [ "postal_code" ]
      }
   ],
   "status" : "OK"
}

【问题讨论】:

  • 如果您只设置一个单数 data 变量,为什么还要使用 foreach?为什么要在此字符串前面添加return Json("Successful" + data,,这可能会产生无效结果?
  • 因为我希望这些数据以 ajax 成功方法返回
  • 为什么不只是return Json(googleResults, JsonRequestBehavior.AllowGet);?然后,您可以获取该 JSON 字符串并在客户端对其进行处理。
  • 是的,我也可以这样做,但是无论我是在服务器端处理数据然后发送它还是先在客户端发送数据然后再处理它都是一样的
  • 我的问题是如何分别读取城市、州和国家,而不是读取格式化地址

标签: c# json asp.net-mvc google-maps


【解决方案1】:
I solved this problem by sending json data to client side like this
 var data = "";
            dynamic googleResults = new Uri(url + pincode).GetDynamicJsonObject();
            var status = googleResults.status;
            foreach (var result in googleResults.results)
            {
                              data += result;
            }
            return Json(data, "application/json",Encoding.UTF8, JsonRequestBehavior.AllowGet);


and then process this data in javascript ,code given below

 data = JSON.parse(result);

                for(var i=0;i<data.address_components.length;i++)
                {

                    if(data.address_components[i].types[0]=="administrative_area_level_2")
                    {
                        alert("City:" + data.address_components[i].long_name);
                        document.getElementById("pin_city").value = data.address_components[i].long_name;
                    }
                    if (data.address_components[i].types[0] == "administrative_area_level_1") {
                        alert("State:" + data.address_components[i].long_name);
                        document.getElementById("pin_state").value = data.address_components[i].long_name;
                    }
                    if (data.address_components[i].types[0] == "country") {
                        alert("Country:" + data.address_components[i].long_name);
                    }

                }

【讨论】:

  • 感谢@Mark Schultheiss 的建议
【解决方案2】:
data=["address_components"]["type"]["administrative_level_2"][your value]
data2=["address_components"]["type"]["administrative_level_1"][your value]

你也可以这样使用

data=["result"]["address_components"]["type"]["administrative_level_2"][your value];
data2=["result"]["address_components"]["type"]["administrative_level_1"][your value];

结果是 json 的第一个数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多