OutGIScj.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using WWPipeLine.MapBasic.Conditions;
  11. using Sunny.UI;
  12. using WeifenLuo.WinFormsUI.Docking;
  13. using SuperMap.Mapping;
  14. using WWPipeLine.MapBasic;
  15. using SuperMap.Data.Conversion;
  16. using SuperMap.Data;
  17. namespace WWPipeLine.MapTools.Conditions.ShuJuChuLi
  18. {
  19. public partial class OutGIScj : ConditionPanel
  20. {
  21. private LayerWithDataListPanel LayerPanel;
  22. private string fileName = string.Empty;
  23. private GeoRegion m_geo = null;
  24. public OutGIScj()
  25. {
  26. this.ConditionPanelName = "地图裁剪输出GIS数据文件";
  27. InitializeComponent();
  28. this.SetSize(500, 485);
  29. }
  30. protected override void OnLoad(EventArgs e)
  31. {
  32. LayerPanel = new LayerWithDataListPanel();
  33. LayerPanel.LoadToVector(true, true, true);
  34. uiGBlayer.Controls.Add(LayerPanel);
  35. }
  36. private void uiButton1_Click(object sender, EventArgs e)
  37. {
  38. SaveFileDialog sfd = new SaveFileDialog();
  39. sfd.InitialDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory);
  40. sfd.Title = "请选择要保存的文件路径";
  41. sfd.Filter = "所有文件|*.*";
  42. sfd.RestoreDirectory = true;
  43. if (sfd.ShowDialog() == DialogResult.OK)
  44. {
  45. fileName = sfd.FileName;
  46. uiTextBox1.Text = fileName;
  47. }
  48. }
  49. public override object Do(DockPanel dockPanel = null)
  50. {
  51. this.IsShowResultWindow = false;
  52. if (string.IsNullOrEmpty(fileName))
  53. { UIMessageTip.ShowError("请选择要保存文件的路径"); return false; }
  54. if (LayerPanel.SelectLayers.Count == 0)
  55. { UIMessageTip.ShowError("请选择要保存文件的图层"); return false; }
  56. if (m_geo is null)
  57. { Sunny.UI.UIMessageTip.ShowError("请绘制裁剪区域"); return false; }
  58. //dviName = ComsStatic.Datasource.Datasets.GetAvailableDatasetName("OutGIS_dvName");
  59. ////Recordset rd = (LayerPanel.SelectLayers[0].Dataset as DatasetVector).Query(m_geo, 2, CursorType.Static);
  60. ////DatasetVector dvFinal = ComsStatic.Datasource.Datasets.CreateAndAppendWithSmid(dviName, rd);
  61. ////DatasetVectorInfo dvi = new DatasetVectorInfo() { Name = dviName, Type = DatasetType.CAD };
  62. ////DatasetVector dvFinal = ComsStatic.Datasource.Datasets.Create(dvi);
  63. ////DatasetVector dv = null;
  64. ////foreach (Layer lyr in LayerPanel.SelectLayers.ToArray())
  65. ////{
  66. //// dv = lyr.Dataset as DatasetVector;
  67. //// bool result = dvFinal.AppendFields(dv, "objectid", "smuserid", ComsStatic.GetFieldInfos(dv));
  68. //// dvFinal.Append(dv.Query(m_geo, 2, CursorType.Static));
  69. ////}
  70. //DatasetVector dv = LayerPanel.SelectLayers[0].Dataset as DatasetVector;
  71. //DatasetVectorInfo dvi = new DatasetVectorInfo() { Name = dviName, Type = dv.Type };
  72. //DatasetVector dvFinal = ComsStatic.Datasource.Datasets.Create(dvi);
  73. //bool result = dvFinal.AppendFields(dv, "objectid", "smuserid", ComsStatic.GetFieldInfos(dv));
  74. ////Datasets.Create后的字段只有系统字段,我需要一个 字符类型的字段 如何先创建再与元数据集 关联
  75. ////从源数据集向目标数据集追加字段,并根据关联字段查询结果对字段进行赋值。
  76. //dvFinal.Append(dv.Query(m_geo, 2, CursorType.Static));
  77. //DataExport ex = new DataExport();
  78. //if (uiRadioButtonCSV.Checked)//ExportSettingCSV
  79. //{
  80. // ExportSetting es = new ExportSetting();
  81. // //es.IsExportFieldName = true;
  82. // es.TargetFileType = FileType.CSV;
  83. // es.TargetFilePath = fileName;
  84. // es.IsOverwrite = true;
  85. // es.SourceData = dvFinal;
  86. // ex.ExportSettings.Add(es);
  87. //}
  88. //if (uiRadioButtonGDB.Checked)//ExportSettingFileGDBVector
  89. //{
  90. // ExportSetting es = new ExportSetting();
  91. // es.TargetFileType = FileType.FileGDBVector;
  92. // es.TargetFilePath = fileName;
  93. // es.IsOverwrite = true;
  94. // es.SourceData = dvFinal;
  95. // ex.ExportSettings.Add(es);
  96. //}
  97. //if (uiRadioButtonSHP.Checked)//ExportSettingSHP
  98. //{
  99. // ExportSetting es = new ExportSetting();
  100. // es.TargetFileType = FileType.SHP;
  101. // es.TargetFilePath = fileName;
  102. // es.IsOverwrite = true;
  103. // es.SourceData = dvFinal;
  104. // ex.ExportSettings.Add(es);
  105. //}
  106. //if (uiRadioButtonSimpleJson.Checked)//ExportSettingPersonalGDBVector
  107. //{
  108. // ExportSetting es = new ExportSetting();
  109. // es.TargetFileType = FileType.SimpleJson;
  110. // es.TargetFilePath = fileName;
  111. // es.IsOverwrite = true;
  112. // es.SourceData = dvFinal;
  113. // ex.ExportSettings.Add(es);
  114. //}
  115. FileType outFileType = FileType.None;
  116. DataExport ex = new DataExport();
  117. if (uiRadioButtonCSV.Checked)//ExportSettingCSV
  118. {
  119. outFileType = FileType.CSV;
  120. }
  121. if (uiRadioButtonGDB.Checked)//ExportSettingFileGDBVector
  122. {
  123. outFileType = FileType.FileGDBVector;
  124. }
  125. if (uiRadioButtonSHP.Checked)//ExportSettingSHP
  126. {
  127. outFileType = FileType.SHP;
  128. }
  129. if (uiRadioButtonSimpleJson.Checked)//ExportSettingPersonalGDBVector
  130. {
  131. outFileType = FileType.SimpleJson;
  132. }
  133. List<string> divNameList = new List<string>();
  134. string dviName = string.Empty;
  135. foreach (Layer lyr in LayerPanel.SelectLayers)
  136. {
  137. ExportSetting es = new ExportSetting();
  138. es.TargetFileType = outFileType;
  139. es.TargetFilePath = fileName + "-" + DateTime.Now.Ticks.ToString();
  140. dviName = ComsStatic.Datasource.Datasets.GetAvailableDatasetName("OutGIS_dvName");
  141. divNameList.Add(dviName);
  142. DatasetVector dv = lyr.Dataset as DatasetVector;
  143. DatasetVectorInfo dvi = new DatasetVectorInfo() { Name = dviName, Type = dv.Type };
  144. DatasetVector dvFinal = ComsStatic.Datasource.Datasets.Create(dvi);
  145. bool result = dvFinal.AppendFields(dv, "SmUserID", "smuserid", ComsStatic.GetFieldInfos(dv));
  146. //Recordset rd = (lyr.Dataset as DatasetVector).Query(m_geo, 2, CursorType.Static);
  147. //DatasetVector dvFinal = ComsStatic.Datasource.Datasets.CreateAndAppendWithSmid(dviName, rd);
  148. es.SourceData = dvFinal;
  149. ex.ExportSettings.Add(es);
  150. }
  151. ExportResult exResult = ex.Run();
  152. if (ex.ExportSettings.Count == exResult.SucceedSettings.Length)
  153. ComsStatic.ShowOKLog(string.Format("地图导出GIS数据,应导出{0}条,共导出{1}条", ex.ExportSettings.Count, exResult.SucceedSettings.Length));
  154. else
  155. ComsStatic.ShowErrorLog(string.Format("地图导出GIS数据,应导出{0}条,失败导出{1}条", ex.ExportSettings.Count, exResult.FailedSettings.Length));
  156. foreach (string n in divNameList.ToArray())
  157. {
  158. if (ComsStatic.Datasource.Datasets.Contains(n))
  159. ComsStatic.Datasource.Datasets.Delete(n);
  160. }
  161. return true;
  162. }
  163. private void uiButton2_Click(object sender, EventArgs e)
  164. {
  165. MapControl.Action = SuperMap.UI.Action.CreatePolygon;
  166. MapControl.Tracked += MapControl_Tracked;
  167. }
  168. private void uiButton3_Click(object sender, EventArgs e)
  169. {
  170. MapControl.Action = SuperMap.UI.Action.Pan;
  171. MapControl.Map.TrackingLayer.Clear();
  172. MapControl.Map.RefreshEx(MapControl.Map.ViewBounds);
  173. }
  174. private void MapControl_Tracked(object sender, SuperMap.UI.TrackedEventArgs e)
  175. {
  176. if (e.Geometry is null) return;
  177. m_geo = e.Geometry.Clone() as GeoRegion;
  178. if (m_geo is null) { Sunny.UI.UIMessageTip.ShowError("区域绘制失败"); return; }
  179. m_geo.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate;
  180. MapControl.Map.TrackingLayer.Clear();
  181. MapControl.Map.TrackingLayer.Add(m_geo, "GeoRectangle");
  182. MapControl.Map.Refresh();
  183. }
  184. public override void AfterClose()
  185. {
  186. MapControl.Tracked -= MapControl_Tracked;
  187. base.AfterClose();
  188. }
  189. }
  190. }