I derived/adapted the following code from Adam Freeman's book "Metro Revealed: Building Windows 8 apps with XAML and C#" to get the Address when the Coordinates are known:

public static async Task<string> GetAddressForCoordinates(double latitude, double longitude)
{
    HttpClient httpClient = new HttpClient {BaseAddress = new Uri("http://nominatim.openstreetmap.org")};
    HttpResponseMessage httpResult = await httpClient.GetAsync(
        String.Format("reverse?format=json&lat={0}&lon={1}", latitude, longitude));
JsonObject jsonObject = JsonObject.Parse(await httpResult.Content.ReadAsStringAsync());

return jsonObject.GetNamedObject("address").GetNamedString("road");

}

How can I get the opposite (the Coordinates if the Address is known)?

UPDATE

I'm adding a bounty to this; what I've got already (shown above) is the reverse geocoding (getting the address for the coordinates); what I need is geocoding (getting the coordinates for the address).

Based on my reverse geocoding code above, I'm guessing it might be something like this:

public static async Task<string> GetCoordinatesForAddress(string address)
{
    HttpClient httpClient = new HttpClient {BaseAddress = new Uri("http://nominatim.openstreetmap.org")};
    HttpResponseMessage httpResult = await httpClient.GetAsync(
        String.Format("format=json&address={0}", address));

    JsonObject jsonObject = JsonObject.Parse(await httpResult.Content.ReadAsStringAsync());

    return jsonObject.GetNamedObject("address").GetNamedString("lat"); // <-- what about "lon"?
}

...but I don't know how to combine the two coordinate (longitude and latitude) values (assuming this is correct, or close to being correct). Can anybody verify this, clean it up, or provide a better example (either using nominatim or otherwise)?

UPDATE 2

To answer Peter Ritchie's question/comment below:

Edit
Report