/// <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); }