You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
516 lines
22 KiB
516 lines
22 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.ComponentModel; |
|
using System.Data; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
using System.Windows; |
|
using System.Windows.Input; |
|
using DevExpress.Xpf.Grid; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.Controls; |
|
using ESRI.ArcGIS.Display; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Views; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Framework.Utils.Interface; |
|
using KGIS.Framework.AE; |
|
using ReactiveUI; |
|
using System.Runtime.InteropServices; |
|
|
|
namespace Kingo.Plugin.ResultsOfProof.ViewModel |
|
{ |
|
public class JZTBXXBRelation |
|
{ |
|
public int OID { get; set; } |
|
public string BSM { get; set; } |
|
/// <summary> |
|
/// 地类编码 |
|
/// </summary> |
|
public string DLBM { get; set; } |
|
/// <summary> |
|
/// 地类名称 |
|
/// </summary> |
|
public string DLMC { get; set; } |
|
/// <summary> |
|
/// 编辑状态 |
|
/// </summary> |
|
public bool EditState { get; set; } |
|
|
|
public bool ISGXBSM { get; set; } |
|
} |
|
|
|
public class BGJZTBXXBRelationViewModel : ReactiveObject |
|
{ |
|
public string JCBH { get; set; } |
|
public string BGDL { get; set; } |
|
private string _BtnContent = "图上选取图斑标识码"; |
|
public string btnContent { get { return _BtnContent; } set { this.RaiseAndSetIfChanged(ref _BtnContent, value); } } |
|
public DataTable dltbData { get; set; } |
|
|
|
/// <summary> |
|
/// 界面Grid绑定数据 |
|
/// </summary> |
|
private BindingList<JZTBXXBRelation> items = null; |
|
public BindingList<JZTBXXBRelation> Items { get { return items; } set { this.RaiseAndSetIfChanged(ref items, value); } } |
|
public BindingList<JZTBXXBRelation> ItemsCopyInit { get; set; } |
|
|
|
public JZTBXXBRelation currentItem = null; |
|
public JZTBXXBRelation CurrentItem { get { return currentItem; } set { this.RaiseAndSetIfChanged(ref currentItem, value); } } |
|
public ReactiveCommand<object> AddFJCommand { get; private set; } |
|
public ReactiveCommand<object> DeleteRowCommand { get; private set; } |
|
public ReactiveCommand<object> ConirmCommand { get; set; } |
|
public ReactiveCommand<object> CancelCommand { get; set; } |
|
public ReactiveCommand<object> NextDataCommand { get; private set; } |
|
public ReactiveCommand<object> PrevDataCommand { get; private set; } |
|
public ReactiveCommand<MouseButtonEventArgs> GC_MouseLeftButtonUpCmd { get; private set; } |
|
private IFeatureLayer JZTB_FC = null; |
|
private IFeatureLayer DLTB_FC = null; |
|
private IFeatureLayer DLTBGX_FC = null; |
|
private object Hook = null; |
|
private IMapControl4 m_mapCtrl; |
|
private bool IsStartAddFJ = false; |
|
|
|
private int OID { get; set; } |
|
public BGJZTBXXBRelationViewModel(int pOID, object pHook = null) |
|
{ |
|
try |
|
{ |
|
Hook = pHook; |
|
m_mapCtrl = (IMapControl4)Hook; |
|
CreateCommand(); |
|
if (pOID == 0) return; |
|
OID = pOID; |
|
JZTB_FC = MapsManager.Instance.MapService.GetFeatureLayerByName("JCTB"); |
|
DLTB_FC = MapsManager.Instance.MapService.GetFeatureLayerByLayerName("地类图斑"); |
|
DLTBGX_FC = MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBGX"); |
|
|
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("人工校验失败:" + ex.Message); |
|
MessageHelper.ShowError(ex.Message); |
|
} |
|
finally |
|
{ |
|
//if (cursor != null) |
|
//{ |
|
// Marshal.ReleaseComObject(cursor); |
|
//} |
|
} |
|
} |
|
|
|
public void SetData(int pOID) |
|
{ |
|
ICursor cursor = null; |
|
try |
|
{ |
|
if (pOID == 0) return; |
|
OID = pOID; |
|
IFeature feature = JZTB_FC.FeatureClass.GetFeature(pOID); |
|
//获取举证图斑预编号 |
|
//JCBH = feature.Value[feature.Fields.FindField("JCBH")].ToString(); |
|
//BGDL = feature.Value[feature.Fields.FindField("BGDL")].ToString(); |
|
JCBH = feature.Value[feature.Fields.FindField("JCBH")].ToString(); |
|
int idx = feature.Fields.FindField("BGDL"); |
|
if (idx != -1) |
|
BGDL = feature.Value[feature.Fields.FindField("BGDL")].ToString(); |
|
//获取举证图斑关联建库标识码 |
|
string JKBSM = feature.Value[feature.Fields.FindField("DYTBBSM")].ToString(); |
|
|
|
IQueryFilter queryFilter = new QueryFilterClass(); |
|
queryFilter.WhereClause = string.Format("BSM in ('{0}')", JKBSM.Replace(",", "','")); |
|
|
|
Items = new BindingList<JZTBXXBRelation>(); |
|
ItemsCopyInit = new BindingList<JZTBXXBRelation>(); |
|
int objidIndex = DLTBGX_FC.FeatureClass.Fields.FindField("OBJECTID"); |
|
int bsmIndex = DLTBGX_FC.FeatureClass.Fields.FindField("BSM"); |
|
int dltbIndex = DLTBGX_FC.FeatureClass.Fields.FindField("DLBM"); |
|
int dlmcIndex = DLTBGX_FC.FeatureClass.Fields.FindField("DLMC"); |
|
cursor = (DLTBGX_FC.FeatureClass as ITable).Search(queryFilter, true); |
|
IRow row = null; |
|
while ((row = cursor.NextRow()) != null) |
|
{ |
|
JZTBXXBRelation jztbxxb = new JZTBXXBRelation() |
|
{ |
|
OID = row.get_Value(objidIndex) == null ? 0 : (int)row.get_Value(objidIndex), |
|
BSM = row.get_Value(bsmIndex) == null ? "" : row.get_Value(bsmIndex).ToString(), |
|
DLBM = row.get_Value(dltbIndex) == null ? "" : row.get_Value(dltbIndex).ToString(), |
|
DLMC = row.get_Value(dlmcIndex) == null ? "" : row.get_Value(dlmcIndex).ToString(), |
|
ISGXBSM = true |
|
}; |
|
Items.Add(jztbxxb); |
|
ItemsCopyInit.Add(jztbxxb); |
|
Marshal.ReleaseComObject(row); |
|
} |
|
|
|
int jcobjidIndex = DLTB_FC.FeatureClass.Fields.FindField("OBJECTID"); |
|
int jcbsmIndex = DLTB_FC.FeatureClass.Fields.FindField("BSM"); |
|
int jcdltbIndex = DLTB_FC.FeatureClass.Fields.FindField("DLBM"); |
|
int jcdlmcIndex = DLTB_FC.FeatureClass.Fields.FindField("DLMC"); |
|
cursor = (DLTB_FC.FeatureClass as ITable).Search(queryFilter, true); |
|
IRow jcrow = null; |
|
while ((jcrow = cursor.NextRow()) != null) |
|
{ |
|
string bsm = jcrow.get_Value(bsmIndex) == null ? "" : jcrow.get_Value(bsmIndex).ToString(); |
|
var list = items.Where(x => x.BSM == bsm).ToList(); |
|
if (list != null && list.Count != 0) |
|
{ |
|
continue; |
|
} |
|
JZTBXXBRelation jztbxxb = new JZTBXXBRelation() |
|
{ |
|
OID = jcrow.get_Value(jcobjidIndex) == null ? 0 : (int)jcrow.get_Value(jcobjidIndex), |
|
BSM = jcrow.get_Value(jcbsmIndex) == null ? "" : jcrow.get_Value(jcbsmIndex).ToString(), |
|
DLBM = jcrow.get_Value(jcdltbIndex) == null ? "" : jcrow.get_Value(jcdltbIndex).ToString(), |
|
DLMC = jcrow.get_Value(jcdlmcIndex) == null ? "" : jcrow.get_Value(jcdlmcIndex).ToString(), |
|
ISGXBSM = false |
|
}; |
|
Items.Add(jztbxxb); |
|
ItemsCopyInit.Add(jztbxxb); |
|
Marshal.ReleaseComObject(jcrow); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("人工校验失败:" + ex.Message); |
|
MessageHelper.ShowError(ex.Message); |
|
} |
|
finally |
|
{ |
|
if (cursor != null) |
|
{ |
|
Marshal.ReleaseComObject(cursor); |
|
} |
|
} |
|
} |
|
|
|
private void CreateCommand() |
|
{ |
|
try |
|
{ |
|
DrawParams param = new DrawParams(); |
|
param.enumDrawMode = EnumDrawMode.DrawRect; |
|
CustomDrawTool customDraw = new CustomDrawTool(param); |
|
customDraw.DoContinue += CustomDraw_DoContinue1; |
|
customDraw.OnCreate(m_mapCtrl.Object); |
|
NextDataCommand = ReactiveCommand.Create(); |
|
NextDataCommand.Subscribe(_ => |
|
{ |
|
//通知内业会审列表视图进行显示下一条数据 |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = "NextData", MsgType = "JZTBXXBRelationView" }); |
|
}); |
|
PrevDataCommand = ReactiveCommand.Create(); |
|
PrevDataCommand.Subscribe(_ => |
|
{ |
|
//通知内业会审列表视图进行显示上一条数据 |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = "PrevData", MsgType = "JZTBXXBRelationView" }); |
|
|
|
}); |
|
AddFJCommand = ReactiveCommand.Create(); |
|
AddFJCommand.Subscribe(x => |
|
{ |
|
if (IsStartAddFJ) |
|
{ |
|
IsStartAddFJ = !IsStartAddFJ; |
|
m_mapCtrl.CurrentTool = null; |
|
btnContent = "图上选取图斑标识码"; |
|
return; |
|
} |
|
else |
|
{ |
|
IsStartAddFJ = !IsStartAddFJ; |
|
m_mapCtrl.CurrentTool = customDraw; |
|
btnContent = "停止选取"; |
|
} |
|
}); |
|
DeleteRowCommand = ReactiveCommand.Create(); |
|
DeleteRowCommand.Subscribe(x => |
|
{ |
|
if (CurrentItem != null) |
|
{ |
|
string bsm = CurrentItem.BSM; |
|
JZTBXXBRelation tbfj = Items.ToList().Find(p => p.BSM == bsm); |
|
if (tbfj != null) |
|
{ |
|
Items.Remove(tbfj); |
|
RemoveElementByName(bsm, "TempDLTBGrapLayer"); |
|
} |
|
} |
|
}); |
|
ConirmCommand = ReactiveCommand.Create(); |
|
ConirmCommand.Subscribe(x => |
|
{ |
|
IsStartAddFJ = !IsStartAddFJ; |
|
m_mapCtrl.CurrentTool = null; |
|
btnContent = "图上选取图斑标识码"; |
|
string jkbsm = string.Empty; |
|
string jkdlbm = string.Empty; |
|
foreach (JZTBXXBRelation item in Items) |
|
{ |
|
JZTBXXBRelation temp = ItemsCopyInit.FirstOrDefault(f => f.BSM == item.BSM); |
|
if (temp != null) |
|
ItemsCopyInit.Remove(temp); |
|
jkbsm += "," + item.BSM; |
|
jkbsm = jkbsm.Trim(','); |
|
if (!jkdlbm.Contains(item.DLBM)) |
|
jkdlbm += "," + item.DLBM; |
|
jkdlbm = jkdlbm.Trim(','); |
|
} |
|
IFeature feature = JZTB_FC.FeatureClass.GetFeature(OID); |
|
feature.set_Value(feature.Fields.FindField("DYTBBSM"), jkbsm); |
|
feature.set_Value(feature.Fields.FindField("JZDLBM"), jkdlbm); |
|
feature.Store(); |
|
Platform.Instance.SendMsg(new NotifyMsgPackage() { Content = "RefreshListData", MsgType = "JZTBXXBRelationView" }); |
|
}); |
|
CancelCommand = ReactiveCommand.Create(); |
|
CancelCommand.Subscribe(x => |
|
{ |
|
IsStartAddFJ = !IsStartAddFJ; |
|
m_mapCtrl.CurrentTool = null; |
|
btnContent = "图上选取图斑标识码"; |
|
}); |
|
GC_MouseLeftButtonUpCmd = ReactiveCommand.Create<MouseButtonEventArgs>(); |
|
GC_MouseLeftButtonUpCmd.Subscribe(_ => |
|
{ |
|
TableViewMouseLeftButtonUp(_); |
|
}); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
} |
|
} |
|
|
|
public void TableViewMouseLeftButtonUp(MouseButtonEventArgs e) |
|
{ |
|
try |
|
{ |
|
IFeature feature = null; |
|
if (CurrentItem != null) |
|
{ |
|
System.Windows.Point p = Mouse.GetPosition(e.Source as FrameworkElement); |
|
if (p.X > 0) |
|
{ |
|
if (CurrentItem is JZTBXXBRelation) |
|
{ |
|
int oid = (CurrentItem as JZTBXXBRelation).OID; |
|
if (oid == 0) return; |
|
|
|
bool isgxbsm = (CurrentItem as JZTBXXBRelation).ISGXBSM; |
|
if (isgxbsm == true) |
|
{ |
|
feature = this.DLTBGX_FC.FeatureClass.GetFeature(oid); |
|
if (feature == null || feature.Shape.IsEmpty) |
|
{ |
|
MessageHelper.ShowError("图形为空,定位失败!"); |
|
return; |
|
} |
|
} |
|
else |
|
{ |
|
feature = this.DLTB_FC.FeatureClass.GetFeature(oid); |
|
if (feature == null || feature.Shape.IsEmpty) |
|
{ |
|
MessageHelper.ShowError("图形为空,定位失败!"); |
|
return; |
|
} |
|
} |
|
MapsManager.Instance.MapService.FlashShape(Hook as IMapControlDefault, feature.ShapeCopy, 2); |
|
} |
|
} |
|
else |
|
{ |
|
return; |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
throw ex; |
|
} |
|
} |
|
private void CustomDraw_DoContinue1(ESRI.ArcGIS.Geometry.IGeometry pGeo) |
|
{ |
|
try |
|
{ |
|
|
|
if (DLTBGX_FC != null) |
|
{ |
|
int GXBSM_index = DLTBGX_FC.FeatureClass.Fields.FindField("BSM"); |
|
int GXDLBM_index = DLTBGX_FC.FeatureClass.Fields.FindField("DLBM"); |
|
int GXDLMC_index = DLTBGX_FC.FeatureClass.Fields.FindField("DLMC"); |
|
List<JZTBXXBRelation> fjlist = Items.ToList(); |
|
List<IFeature> gxfeatures = FeatureAPI.Identify(pGeo, DLTBGX_FC); |
|
if (gxfeatures != null) |
|
{ |
|
string bsm = string.Empty; |
|
string dlbm = string.Empty; |
|
string dlmc = string.Empty; |
|
foreach (IFeature item in gxfeatures) |
|
{ |
|
int OID = item.OID; |
|
|
|
if (GXBSM_index != -1) |
|
{ |
|
bsm = item.Value[GXBSM_index].ToString(); |
|
} |
|
if (GXDLBM_index != -1) |
|
{ |
|
dlbm = item.Value[GXDLBM_index].ToString(); |
|
} |
|
if (GXDLMC_index != -1) |
|
{ |
|
dlmc = item.Value[GXDLMC_index].ToString(); |
|
} |
|
JZTBXXBRelation tbfj = fjlist.Find(p => p.BSM == bsm); |
|
if (tbfj == null) |
|
{ |
|
Items.Add(new JZTBXXBRelation() { OID = OID, BSM = bsm, DLBM = dlbm, DLMC = dlmc, ISGXBSM = true }); |
|
DrawPolygonElement(item.ShapeCopy, bsm); |
|
} |
|
else |
|
{ |
|
items.Remove(tbfj); |
|
RemoveElementByName(bsm, "TempDLTBGrapLayer"); |
|
} |
|
} |
|
} |
|
} |
|
|
|
if (DLTB_FC != null) |
|
{ |
|
int BSM_index = DLTB_FC.FeatureClass.Fields.FindField("BSM"); |
|
int DLBM_index = DLTB_FC.FeatureClass.Fields.FindField("DLBM"); |
|
int DLMC_index = DLTB_FC.FeatureClass.Fields.FindField("DLMC"); |
|
List<JZTBXXBRelation> fjlist = Items.ToList(); |
|
List<IFeature> features = FeatureAPI.Identify(pGeo, DLTB_FC); |
|
if (features != null) |
|
{ |
|
string bsm = string.Empty; |
|
string dlbm = string.Empty; |
|
string dlmc = string.Empty; |
|
foreach (IFeature item in features) |
|
{ |
|
int OID = item.OID; |
|
|
|
if (BSM_index != -1) |
|
{ |
|
bsm = item.Value[BSM_index].ToString(); |
|
} |
|
if (DLBM_index != -1) |
|
{ |
|
dlbm = item.Value[DLBM_index].ToString(); |
|
} |
|
if (DLMC_index != -1) |
|
{ |
|
dlmc = item.Value[DLMC_index].ToString(); |
|
} |
|
JZTBXXBRelation tbfj = fjlist.Find(p => p.BSM == bsm); |
|
if (tbfj == null) |
|
{ |
|
var list = items.Where(x => x.BSM == bsm).ToList(); |
|
if (list != null && list.Count != 0) |
|
{ |
|
continue; |
|
} |
|
Items.Add(new JZTBXXBRelation() { OID = OID, BSM = bsm, DLBM = dlbm, DLMC = dlmc, ISGXBSM = false }); |
|
DrawPolygonElement(item.ShapeCopy, bsm); |
|
} |
|
else |
|
{ |
|
items.Remove(tbfj); |
|
RemoveElementByName(bsm, "TempDLTBGrapLayer"); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("选取图斑标识码失败!"); |
|
} |
|
} |
|
|
|
private void DrawPolygonElement(IGeometry pGeo, string pName) |
|
{ |
|
ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass(); |
|
pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSDiagonalCross; |
|
//设置线宽和线的颜色 |
|
ISimpleLineSymbol pLineSymbol = new SimpleLineSymbolClass(); |
|
pLineSymbol.Color = Symbol.GetRGBColor(255, 0, 0); |
|
pLineSymbol.Width = 1; |
|
pSimpleFillSymbol.Outline = pLineSymbol; |
|
PolygonElementClass element = new PolygonElementClass(); |
|
element.Name = pName; |
|
element.Symbol = pSimpleFillSymbol; |
|
element.Geometry = pGeo; |
|
IGraphicsLayer grapLayer = GetSubGraphicsLayer("TempDLTBGrapLayer", true); |
|
(grapLayer as IGraphicsContainer).AddElement(element, 0); |
|
IMapControlDefault mapControl = Hook as IMapControlDefault; |
|
if (mapControl != null) |
|
{ |
|
mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, mapControl.ActiveView.Extent); |
|
|
|
} |
|
} |
|
|
|
public IGraphicsLayer GetSubGraphicsLayer(string subgraphicsLayername, bool IsAdd = false) |
|
{ |
|
|
|
ICompositeGraphicsLayer pCompositeGLayer = MapsManager.Instance.MapService.getAxMapControl().Map.BasicGraphicsLayer as ICompositeGraphicsLayer; |
|
IGraphicsLayer pGLayer = null; |
|
try |
|
{ |
|
//查找是否已存在,如果不存在,跳转到catch内容. |
|
//如果查到不到,说明集合中并没有指定名称的graphicslayer |
|
pGLayer = pCompositeGLayer.FindLayer(subgraphicsLayername); |
|
} |
|
catch |
|
{ |
|
if (IsAdd) |
|
{ |
|
//若不存在,则添加一个指定名称的GraphicsLayer |
|
pGLayer = pCompositeGLayer.AddLayer(subgraphicsLayername, null); |
|
} |
|
} |
|
|
|
return pGLayer; |
|
} |
|
|
|
private void RemoveElementByName(string pName, string pGrapLayer) |
|
{ |
|
IGraphicsLayer layer = GetSubGraphicsLayer(pGrapLayer); |
|
if (layer == null) |
|
return; |
|
IGraphicsContainer pGraphic = layer as IGraphicsContainer; |
|
if (pGraphic == null) |
|
return; |
|
IElement pElement = null; |
|
pGraphic.Reset(); |
|
while ((pElement = pGraphic.Next()) != null) |
|
{ |
|
IElementProperties pd = pElement as IElementProperties; |
|
if (pd.Name == pName) |
|
{ |
|
pGraphic.DeleteElement(pElement); |
|
break; |
|
} |
|
} |
|
|
|
IMapControlDefault mapControl = Hook as IMapControlDefault; |
|
if (mapControl != null) |
|
{ |
|
mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, mapControl.ActiveView.Extent); |
|
} |
|
|
|
} |
|
} |
|
}
|
|
|