下面是我的示例代碼Google API在指定的經緯度位置拋出異常?
public static string GetGeoLoc(string latitude, string longitude,
out string Address_ShortCountryName,
out string Address_country,
out string Address_administrative_area_level_1,
out string Address_administrative_area_level_1_short_name,
out string Address_administrative_area_level_2,
out string Address_administrative_area_level_3,
out string Address_colloquial_area,
out string Address_locality,
out string Address_sublocality,
out string Address_neighborhood)
{
Address_ShortCountryName = "";
Address_country = "";
Address_administrative_area_level_1 = "";
Address_administrative_area_level_1_short_name = "";
Address_administrative_area_level_2 = "";
Address_administrative_area_level_3 = "";
Address_colloquial_area = "";
Address_locality = "";
Address_sublocality = "";
Address_neighborhood = "";
XmlDocument doc = new XmlDocument();
try
{
doc.Load("http://maps.googleapis.com/maps/api/geocode/xml?latlng=" + latitude + "," + longitude + "&sensor=false");
XmlNode element = doc.SelectSingleNode("//GeocodeResponse/status");
if (element.InnerText == "ZERO_RESULTS")
{
return ("No data available for the specified location");
}
else
{
element = doc.SelectSingleNode("//GeocodeResponse/result/formatted_address");
string longname = "";
string shortname = "";
string typename = "";
XmlNodeList xnList = doc.SelectNodes("//GeocodeResponse/result/address_component");
foreach (XmlNode xn in xnList)
{
try
{
longname = xn["long_name"].InnerText;
shortname = xn["short_name"].InnerText;
typename = xn["type"].InnerText;
switch (typename)
{
case "country":
{
Address_country = longname;
Address_ShortCountryName = shortname;
break;
}
case "locality":
{
Address_locality = longname;
break;
}
case "sublocality":
{
Address_sublocality = longname;
break;
}
case "neighborhood":
{
Address_neighborhood = longname;
break;
}
case "colloquial_area":
{
Address_colloquial_area = longname;
break;
}
case "administrative_area_level_1":
{
Address_administrative_area_level_1 = longname;
Address_administrative_area_level_1_short_name = shortname;
break;
}
case "administrative_area_level_2":
{
Address_administrative_area_level_2 = longname;
break;
}
case "administrative_area_level_3":
{
Address_administrative_area_level_3 = longname;
break;
}
default:
break;
}
}
catch (Exception e)
{
clsExHandler.Instance.Write(e);
}
}
return (element.InnerText);
}
}
catch (Exception ex)
{
return ("(Address lookup failed:) " + ex.Message);
}
}
嘗試通過緯度33.4965 &經度-112.205
我在行得到一個例外對象引用無效的對象
**typename = xn["type"].InnerText;**
時我一步一步調試沒有像[「類型」]這樣的屬性
也有索姆其他語言性格爲什麼?
我該如何解決這個問題。
是的,我確實接受該類型是一個元素節點,我也使用'SelectSingleNode'只讀取我上面的示例代碼。 –
但是'xn [「type」]',這就是我們所說的,你不在那裏使用'SelectSingleNode'。但是,當這種符號是C#中'SelectSingleNode'的有效簡寫時,這不是問題。訪問http://maps.googleapis.com/maps/api/geocode/xml?latlng=33.4965,-112.205&sensor=false,您會看到1個結果,其中address_component沒有子節點'' (向下滾動一點點,結果就是......我猜日語字符是'USA,Arizona,フェニックス=メサ=スコッツデール',而這個結果的第一個' '沒有類型,這是問題) –