Click here to Skip to main content
15,868,016 members
Articles / Mobile Apps

Using reverse geocoding to find an address

Rate me:
Please Sign up or sign in to vote.
5.00/5 (6 votes)
20 Jul 2011CPOL2 min read 58.8K   12   6
The post shows how to use the Geocode API in order to make an address lookup for a given location.

Introduction

Making a Reverse Geocoding to Find an Address

I had a request from a colleague of mine to help him with a geocoding problem. The colleague needed to find an address by a given latitude and longitude which were supplied by a SmartPhone consumer. The example in this post will show you how you can use the Google Geocoding API in order to achieve that using C#.

Reverse Geocoding (Address Lookup)

Geocoding refers to translating an address into its location or coordinates. The reverse of it is address lookup which occurs when you have the map location and you want to get an address out of it. In today’s mobile development, it is very common to use SmartPhone built-in GPS’s in order to do geocoding and reverse geocoding. When you want to make a geocoding request, you can use Google’s geocode service in order to make location queries. When you want to make a geocode query, you will have to send an HTTP request to http://maps.googleapis.com/maps/api/geocode/ in XML or JSON format and a bunch of parameters in order to get your desired information. For further reading about making geocode requests, go to the Google Geocoding API documentation.

Reverse Geocoding Example

Here is a console application example of using reverse geocoding in order to find an address:

C#
class Program
{
  static string baseUri = "http://maps.googleapis.com/maps/api/" + 
                          "geocode/xml?latlng={0},{1}&sensor=false";

  static void Main(string[] args)
  {
    RetrieveFormatedAddress("51.962146", "7.602304");
    Console.ReadLine();
  }

  public static void RetrieveFormatedAddress(string lat, string lng)
  {
    string requestUri = string.Format(baseUri, lat, lng);

    using (WebClient wc = new WebClient())
    {
      wc.DownloadStringCompleted += 
        new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
      wc.DownloadStringAsync(new Uri(requestUri));
    }
  }

  static void wc_DownloadStringCompleted(object sender, 
                 DownloadStringCompletedEventArgs e)
  {
    var xmlElm = XElement.Parse(e.Result);

    var status = (from elm in xmlElm.Descendants()
                  where elm.Name == "status"
                  select elm).FirstOrDefault();
    if (status.Value.ToLower() == "ok")
    {
      var res = (from elm in xmlElm.Descendants()
                 where elm.Name == "formatted_address"
                 select elm).FirstOrDefault();
      Console.WriteLine(res.Value);
    }
    else
    {
      Console.WriteLine("No Address Found");
    }
  }
}

As you can see, I use a WebClient object to make a request to the Google Geocoding API with latitude and longitude parameters. The returned string is in XML format (but can be in JSON also), which might look like:

XML
<GeocodeResponse>
  <status>OK</status>
  <result>
    <type>street_address</type>
    <formatted_address>1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA</formatted_address>
    <address_component>
      <long_name>1600</long_name>
      <short_name>1600</short_name>
      <type>street_number</type>
    </address_component>
    <address_component>
      <long_name>Amphitheatre Pkwy</long_name>
      <short_name>Amphitheatre Pkwy</short_name>
      <type>route</type>
    </address_component>
    <address_component>
      <long_name>Mountain View</long_name>
      <short_name>Mountain View</short_name>
      <type>locality</type>
      <type>political</type>
    </address_component>
    <address_component>
      <long_name>San Jose</long_name>
      <short_name>San Jose</short_name>
      <type>administrative_area_level_3</type>
      <type>political</type>
    </address_component>
    <address_component>
      <long_name>Santa Clara</long_name>
      <short_name>Santa Clara</short_name>
      <type>administrative_area_level_2</type>
      <type>political</type>
    </address_component>
    <address_component>
      <long_name>California</long_name>
      <short_name>CA</short_name>
      <type>administrative_area_level_1</type>
      <type>political</type>
    </address_component>
    <address_component>
      <long_name>United States</long_name>
      <short_name>US</short_name>
      <type>country</type>
      <type>political</type>
    </address_component>
    <address_component>
      <long_name>94043</long_name>
      <short_name>94043</short_name>
      <type>postal_code</type>
    </address_component>
    <geometry>
      <location>
        <lat>37.4217550</lat>
        <lng>-122.0846330</lng>
      </location>
      <location_type>ROOFTOP</location_type>
      <viewport>
        <southwest>
          <lat>37.4188514</lat>
          <lng>-122.0874526</lng>
        </southwest>
        <northeast>
          <lat>37.4251466</lat>
          <lng>-122.0811574</lng>
        </northeast>
      </viewport>
    </geometry>
  </result>
</GeocodeResponse>

I use LINQ to XML in order to check the response status, and if it’s OK, I retrieve the formatted address value. Pay attention that I make an asynchronous request since I need to relay on a third party server (which is the Google Geocoding API in my example).

Summary

The post shows how to use the Geocode API in order to make an address lookup for a given location. I hope it will help you when you need to implement such a thing.

This article was originally posted at http://feeds.feedburner.com/GilFinkBlog

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Technical Lead sparXys
Israel Israel
Gil Fink is a web development expert and ASP.Net/IIS Microsoft MVP. He is the founder and owner of sparXys. He is currently consulting for various enterprises and companies, where he helps to develop Web and RIA-based solutions. He conducts lectures and workshops for individuals and enterprises who want to specialize in infrastructure and web development. He is also co-author of several Microsoft Official Courses (MOCs) and training kits, co-author of "Pro Single Page Application Development" book (Apress) and the founder of Front-End.IL Meetup. You can read his publications at his website: http://www.gilfink.net

Comments and Discussions

 
QuestionAnyother api's than googles Pin
Member 1026692318-Sep-13 3:27
Member 1026692318-Sep-13 3:27 
AnswerRe: Anyother api's than googles Pin
Gil Fink18-Sep-13 23:42
Gil Fink18-Sep-13 23:42 
QuestionGetting Error as System.Reflection.TargetInnovationException Pin
Vijay Jangam8-Jun-13 1:53
Vijay Jangam8-Jun-13 1:53 
GeneralMy vote of 5 Pin
kaliprasad12325-Jan-13 0:20
kaliprasad12325-Jan-13 0:20 
Questionreverse geocoding api Pin
Member 158083319-Mar-12 3:45
Member 158083319-Mar-12 3:45 
GeneralMy vote of 5 Pin
athalyeakshay26-Dec-11 20:20
athalyeakshay26-Dec-11 20:20 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.