1 out of 3 rated this helpful - Rate this topic

CivicAddressResolver Class

Provides functionality for resolving a coordinate-based location to a civic address.

System.Object
  System.Device.Location.CivicAddressResolver

Namespace:  System.Device.Location
Assembly:  System.Device (in System.Device.dll)
public sealed class CivicAddressResolver : ICivicAddressResolver

The CivicAddressResolver type exposes the following members.

  Name Description
Public method CivicAddressResolver Initializes a new instance of the CivicAddressResolver class.
Top
  Name Description
Public method Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method ResolveAddress Synchronously resolves a civic address from a location based on latitude and longitude. This call will block execution of the calling thread while the address is being resolved.
Public method ResolveAddressAsync Resolves an address asynchronously from a location that is based on latitude and longitude. The call does not block execution of the calling thread while the address is being resolved.
Public method ToString Returns a string that represents the current object. (Inherited from Object.)
Top
  Name Description
Public event ResolveAddressCompleted Occurs when the address resolution that was initiated by a call to ResolveAddressAsync completes.
Top

The CivicAddressResolver class provides an implementation of ICivicAddressResolver that resolves a coordinate-based location to a civic address if the location provider provides both coordinates and civic address data.

The following program shows how to call ResolveAddress to resolve a civic address synchronously.


using System;
using System.Device.Location;
namespace ResolveAddressSync
{
    class Program
    {
        static void Main(string[] args)
        {
            ResolveAddressSync();
        }
        static void ResolveAddressSync()
        {
            GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
            watcher.MovementThreshold = 1.0; // set to one meter
            watcher.TryStart(false, TimeSpan.FromMilliseconds(1000));

            CivicAddressResolver resolver = new CivicAddressResolver();

            if (watcher.Position.Location.IsUnknown == false)
            {
                CivicAddress address = resolver.ResolveAddress(watcher.Position.Location);

                if (!address.IsUnknown)
                {
                    Console.WriteLine("Country: {0}, Zip: {1}",
                            address.CountryRegion,
                            address.PostalCode);
                }
                else
                {
                    Console.WriteLine("Address unknown.");
                }
            }
        }

    }
}


The following program shows how to call ResolveAddressAsync to resolve a civic address asynchronously.


using System;
using System.Device.Location;
namespace ResolveAddressSync
{
    class Program
    {
        static void Main(string[] args)
        {
            ResolveAddressSync();
        }
        static void ResolveAddressSync()
        {
            GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
            watcher.MovementThreshold = 1.0; // set to one meter
            watcher.TryStart(false, TimeSpan.FromMilliseconds(1000));

            CivicAddressResolver resolver = new CivicAddressResolver();

            if (watcher.Position.Location.IsUnknown == false)
            {
                CivicAddress address = resolver.ResolveAddress(watcher.Position.Location);

                if (!address.IsUnknown)
                {
                    Console.WriteLine("Country: {0}, Zip: {1}",
                            address.CountryRegion,
                            address.PostalCode);
                }
                else
                {
                    Console.WriteLine("Address unknown.");
                }
            }
        }

    }
}


.NET Framework

Supported in: 4

.NET Framework Client Profile

Supported in: 4

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Civic address resolution not really implemented
FYI this resolver class doesn't actually do anything. If you look at the documentation for the related classes you get the impression that you get location information from a GeoCoordinateWatcher instance which you can then pass to CivicAddressResolver to turn into a civic address. Using Reflector I found the Resolve function doesn't actually do a resolve step. Instead it just returns a default initialized CivicAddress instance from the internal state of the supplied GeoCoordinate instance.

Digging further into GeoCoordinateWatcher to see if the civic address ever gets initialized I found the logic to be half baked. It will query the underlying location provider to see if it supports returning lat/long location information. If that is supported then only lat/long info will ever be returned. If the provider doesn't support lat/long it will then fall back to try and query civic addresses instead. So in short you will only get civic addresses out of the .NET classes if the underlying provider cannot return lat/long info. Since pretty much all providers can get lat/long info you will never see any civic address info.

The final point to note is the underlying COM object works by doing a location query for either lat/long or a civic address. I.e. you choose which one you want when you make the call, you don't get lat/long info and then perform a separate resolve step to turn that into a civic address. So the model exposed by the .NET object is at odds with how the underlying COM object works.

So if you want to get civic address information use the COM ILocation interface directly, don't bother trying to use these .NET wrappers.