예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }