当用户输入街道,城市,州和邮政编码的地址时,我想在2个文本框中显示纬度和经度值。我正在使用谷歌地理编码器。
我在按钮点击时使用了以下代码:
protected void BtnShow_Click(object sender, EventArgs e)
{
GetLatLongFromAddress(TxtStreet.Text, TxtCity.Text, TxtZipcode.Text, TxtState.Text);
}
private void GetLatLongFromAddress(string street, string city, string zipcode, string state)
{
string geocoderUri = string.Format(@"http://maps.googleapis.com/maps/api/geocode/xml?address={0},{1},{2},{3}&sensor=false", street, city, zipcode, state);
XmlDocument geocoderXmlDoc = new XmlDocument();
geocoderXmlDoc.Load(geocoderUri);
XmlNamespaceManager nsMgr = new XmlNamespaceManager(geocoderXmlDoc.NameTable);
nsMgr.AddNamespace("geo", @"http://www.w3.org/2003/01/geo/wgs84_pos#");
string sLong = geocoderXmlDoc.DocumentElement.SelectSingleNode(@"geo:long", nsMgr).InnerText;
string sLat = geocoderXmlDoc.DocumentElement.SelectSingleNode(@"//geo:lat", nsMgr).InnerText;
TxtLatitude.Text = sLat;
TxtLongitude.Text = sLong;
}
但是它将sLong变量的值变为null并显示错误
"Object reference not set to an instance of an object."
我该怎么做?
等待回答...
thnks ..
答案 0 :(得分:2)
为此目的,我使用了优秀的GoogleMap控件,请参阅此处的详细信息:
http://googlemap.codeplex.com/wikipage?title=Google%20Geocoder&referringTitle=Documentation
在此链接上您有服务器端使用示例,您也可以在客户端使用它,此示例使用GeoCoder API根据地名在地图上放置位置。
function DoMapSearch(placeName) {
var geocoder = new GClientGeocoder();
geocoder.getLatLng(placeName, function (point) {
if (point != null) {
GoogleMapCnt.loadAddress(addr);
}
});
return false;
}
答案 1 :(得分:0)
我使用了你的代码,错误发生在xPath上,我把它改成了
string sLong = geocoderXmlDoc.DocumentElement.SelectSingleNode(@"//geometry/location/lat", nsMgr).InnerText;
string sLat = geocoderXmlDoc.DocumentElement.SelectSingleNode(@"//geometry/location/lng", nsMgr).InnerText;
现在一切正常。