CivicAddressResolver Class
Provides functionality for resolving a coordinate-based location to a civic address.
Assembly: System.Device (in System.Device.dll)
The CivicAddressResolver type exposes the following members.
| Name | Description | |
|---|---|---|
|
CivicAddressResolver | Initializes a new instance of the CivicAddressResolver class. |
| Name | Description | |
|---|---|---|
|
Equals(Object) | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) |
|
Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) |
|
GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
|
GetType | Gets the Type of the current instance. (Inherited from Object.) |
|
MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
|
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. |
|
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. |
|
ToString | Returns a string that represents the current object. (Inherited from Object.) |
| Name | Description | |
|---|---|---|
|
ResolveAddressCompleted | Occurs when the address resolution that was initiated by a call to ResolveAddressAsync completes. |
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."); } } } } }
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.
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.
- 5/23/2012
- DonovanH