示例#1
0
        /// <summary>
        /// React on mouse up.
        /// </summary>
        /// <param name="modifierKeys">Modifier keys state.</param>
        /// <param name="x">X coord.</param>
        /// <param name="y">Y coord.</param>
        public void OnMouseUp(MouseButton pressedButton,
                              ModifierKeys modifierKeys, double x, double y)
        {
            Debug.Assert(_mapControl != null);

            _EndPan();

            if (_editingInProcess)
            {
                App.Current.Project.Save();

                // Save to local geocoder database.
                Order order = _mapControl.EditedObject as Order;
                if (order != null)
                {
                    NameAddressRecord nameAddressRecord = CommonHelpers.CreateNameAddressPair(order, null);

                    // Do save in local storage.
                    App.Current.NameAddressStorage.InsertOrUpdate(nameAddressRecord,
                                                                  App.Current.Geocoder.AddressFormat);
                }

                // Check new position is near to road. Set match method if not.
                IGeocodable geocodable = _mapControl.EditedObject as IGeocodable;
                if (geocodable != null)
                {
                    Address addressUnderPoint = _ReverseGeocode(geocodable.GeoLocation.Value);
                    if (addressUnderPoint == null)
                    {
                        geocodable.Address.MatchMethod = (string)App.Current.FindResource(MANUALLY_EDITED_XY_FAR_FROM_NEAREST_ROAD_RESOURCE_NAME);
                    }
                }

                if (OnComplete != null)
                {
                    OnComplete(this, EventArgs.Empty);
                }
                _editingInProcess = false;
                _editedGraphic    = null;
            }
        }
        /// <summary>
        /// Create name address record from order.
        /// </summary>
        /// <param name="order">Source order.</param>
        /// <param name="oldAddress">Address before geocoding.</param>
        /// <returns>Name address record.</returns>
        public static NameAddressRecord CreateNameAddressPair(Order order, Address oldAddress)
        {
            Debug.Assert(order != null);

            NameAddressRecord nameAddressRecord = new NameAddressRecord();

            nameAddressRecord.NameAddress = new NameAddress();

            NameAddress nameAddress = nameAddressRecord.NameAddress;

            nameAddress.Name = order.Name;

            Debug.Assert(order.GeoLocation.HasValue);

            nameAddressRecord.GeoLocation = new ESRI.ArcLogistics.Geometry.Point(order.GeoLocation.Value.X, order.GeoLocation.Value.Y);

            Address matchedAddress;

            if (oldAddress == null)
            {
                nameAddress.Address = (Address)order.Address.Clone();

                // Make matched address empty.
                matchedAddress = new Address();
            }
            else
            {
                // Set old order address as source address.
                nameAddressRecord.NameAddress.Address = (Address)oldAddress.Clone();

                // Set current address as matched.
                matchedAddress = (Address)order.Address.Clone();
            }

            nameAddressRecord.MatchedAddress = matchedAddress;

            return(nameAddressRecord);
        }