/// <summary> /// Convert local storage record to address candidate. /// </summary> /// <param name="nameAddressRecord">Local storage record.</param> /// <returns>Address candidate.</returns> private AddressCandidate _ConvertToCandidate(NameAddressRecord nameAddressRecord) { Debug.Assert(nameAddressRecord != null); AddressCandidate candidateFromLocalStorage = new AddressCandidate(); // Candidate from local storage have maximum score. candidateFromLocalStorage.Score = MAXIMUM_SCORE; // Set candidate geolocation. candidateFromLocalStorage.GeoLocation = new ESRI.ArcLogistics.Geometry.Point( nameAddressRecord.GeoLocation.X, nameAddressRecord.GeoLocation.Y); // Set candidate address. Address candidateAddress = new Address(); candidateFromLocalStorage.Address = candidateAddress; Address matchedAddress = nameAddressRecord.MatchedAddress; Address address = nameAddressRecord.NameAddress.Address; Address addressToCopy; if (CommonHelpers.IsAllAddressFieldsEmpty(matchedAddress) && string.IsNullOrEmpty(matchedAddress.MatchMethod)) { addressToCopy = address; } else { addressToCopy = matchedAddress; } addressToCopy.CopyTo(candidateAddress); GeocodeHelpers.SetFullAddress(candidateAddress); // Set locator. foreach (LocatorInfo locator in App.Current.Geocoder.Locators) { if (locator.Title.Equals(candidateFromLocalStorage.Address.MatchMethod, System.StringComparison.OrdinalIgnoreCase) || locator.Name.Equals(candidateFromLocalStorage.Address.MatchMethod, System.StringComparison.OrdinalIgnoreCase)) { candidateFromLocalStorage.Locator = locator; break; } } candidateFromLocalStorage.AddressType = ArcGiscomGeocoder.LocalStorageAddressType; return(candidateFromLocalStorage); }
/// <summary> /// Make string parts like 'We couldn’t find… so we’ve zoomed to…' /// If street candidate - use Address Line from geocodable item, otherwise(citystate or zip) use full address. /// </summary> /// <param name="item">Geocodable item.</param> /// <param name="candidateToZoom">First candidate to zoom.</param> /// <returns>Geocode result string parts.</returns> public static string GetZoomedAddress(IGeocodable item, AddressCandidate candidateToZoom) { LocatorType?locatorType = GeocodeHelpers.GetLocatorTypeOfCandidate(candidateToZoom); string zoomedAddress; // If locator type of candidate is street than get Address Line. if (locatorType.HasValue && locatorType.Value == LocatorType.Street && !string.IsNullOrEmpty(item.Address.AddressLine)) { // Extract street name. zoomedAddress = GeocodeHelpers.ExtractStreet(item.Address.AddressLine); } else { // Otherwise use full address. zoomedAddress = candidateToZoom.Address.FullAddress; } return(zoomedAddress); }