Как узнать широту и долготу введенного адреса с помощью геокодера Google? - PullRequest
1 голос
/ 05 марта 2012

Я хочу отображать значения широты и долготы в 2 текстовых полях, когда пользователь вводит свой адрес в виде улицы, города, штата и почтового индекса. Я использую геокодер Google.

Я использовал следующий код при нажатии кнопки:

   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 как ноль и показывает ошибку

   "Object reference not set to an instance of an object."

Как я могу это сделать?

в ожидании ответа ...

спасибо ..

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Для этой цели я использую отличный элемент управления 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;
  }
0 голосов
/ 11 января 2013

Я использовал ваш код, и ошибка была на xPath, я изменил его на этот

string sLong = geocoderXmlDoc.DocumentElement.SelectSingleNode(@"//geometry/location/lat", nsMgr).InnerText;

string sLat = geocoderXmlDoc.DocumentElement.SelectSingleNode(@"//geometry/location/lng", nsMgr).InnerText;

Теперь все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...