如何使用谷歌地理编码检索推算地址的纬度和经度?

时间:2012-03-05 06:59:02

标签: c# asp.net visual-studio-2008 google-maps

当用户输入街道,城市,州和邮政编码的地址时,我想在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 ..

2 个答案:

答案 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;

现在一切正常。