C# 如何从谷歌地图地理编码json数据中读取城市、州、国家
我正在使用.NETMVC3和谷歌地图v3。我想在action中进行地理编码。这就是将一个有效地址传递给谷歌,并获取城市、州和国家的信息。在使用C的操作中,您将如何做到这一点C# 如何从谷歌地图地理编码json数据中读取城市、州、国家,c#,json,asp.net-mvc,google-maps,C#,Json,Asp.net Mvc,Google Maps,我正在使用.NETMVC3和谷歌地图v3。我想在action中进行地理编码。这就是将一个有效地址传递给谷歌,并获取城市、州和国家的信息。在使用C的操作中,您将如何做到这一点 [HttpPost] public ActionResult getLocation(string pincode) { string url = "http://maps.googleapis.com/maps/api/geocode/json? sensor=tr
[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数据,我想从地址、组件类型、行政区、级别、国家/地区中读取城市、州和国家/地区
{
"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=["result"]["address_components"]["type"]["administrative_level_2"][your value];
data2=["result"]["address_components"]["type"]["administrative_level_1"][your value];
结果是json的第一个数组如果只设置了一个单一的数据变量,为什么要使用foreach?为什么要在这个字符串前面加上返回JsonSuccessful+数据的前缀,这可能会创建无效的结果?因为我希望在ajax成功方法中返回此数据,为什么不只返回JsongoogleResults、JsonRequestBehavior.AllowGet;?然后你可以得到JSON字符串并在客户端处理它。是的,我也可以这样做,但无论我是在服务器端处理数据然后发送,还是先在客户端发送数据然后处理,都是一样的。我的问题是如何读城市,州和国家分开,而不是读格式化的地址谢谢@Mark Schultheis的建议
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);
}
}
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);
}
}