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.
224 lines
8.1 KiB
224 lines
8.1 KiB
using ESRI.ArcGIS.DataSourcesGDB; |
|
using ESRI.ArcGIS.esriSystem; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using ESRI.ArcGIS.Geoprocessor; |
|
using KGIS.Framework.AE; |
|
using KGIS.Framework.AE.GPHelper; |
|
using KGIS.Framework.DBOperator; |
|
using KGIS.Framework.Maps; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Dialog; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.PluginServiceInterface; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Data; |
|
using System.Data.SQLite; |
|
using System.IO; |
|
using System.Runtime.InteropServices; |
|
using System.Threading.Tasks; |
|
using System.Windows; |
|
|
|
namespace Kingo.Plugin.DataLoad.View |
|
{ |
|
/// <summary> |
|
/// FrmLoadDB.xaml 的交互逻辑 |
|
/// </summary> |
|
public partial class FrmLoadDB : BaseWindow |
|
{ |
|
private string _DBPath; |
|
public string DBPath => _DBPath; |
|
|
|
public FrmLoadDB() |
|
{ |
|
InitializeComponent(); |
|
} |
|
|
|
private void btnBrowse_Click_1(object sender, RoutedEventArgs e) |
|
{ |
|
OpenFileDialog dialog = new OpenFileDialog(); |
|
|
|
dialog.DefaultExt = "db"; |
|
dialog.Filter = "举证成果包(*.db)|*.db"; |
|
if (dialog.ShowDialog()) |
|
{ |
|
this.txtPath.Text = dialog.FileName; |
|
} |
|
} |
|
|
|
private void btnImport_Click_1(object sender, RoutedEventArgs e) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrWhiteSpace(txtPath.Text)) |
|
{ |
|
MessageHelper.Show("未获取到文件路径:" + txtPath.Text); |
|
return; |
|
} |
|
string path = txtPath.Text; |
|
if (!File.Exists(path)) |
|
{ |
|
MessageHelper.Show("文件不存在,请重新选择!"); |
|
return; |
|
} |
|
if (!path.EndsWith(".db")) |
|
{ |
|
MessageHelper.Show("文件格式不正确,请重新选择!"); |
|
return; |
|
} |
|
|
|
ProjectInfo info = (MapsManager.Instance.CurrProjectInfo as ProjectInfo); |
|
info.DBPath = path; |
|
//info.Save(); |
|
Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" }); |
|
|
|
LoadDBFile(path, info); |
|
|
|
MessageBox.Show("加载完成!"); |
|
this.Close(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.ShowError("导入数据字典异常:" + ex.Message); |
|
} |
|
} |
|
|
|
public string LoadDBFile(string dbPath, ProjectInfo info) |
|
{ |
|
try |
|
{ |
|
string sjztcName = string.Empty; |
|
string targetSourcePath = string.Empty; |
|
string targetResultPath = string.Empty; |
|
|
|
sjztcName = "BGDC2020"; |
|
string fields = "F_ID,TBYBH,FJMC,TCBM,Longitude,Latitude,FJLX,PSJD,XZB,YZB"; |
|
string msg = ""; |
|
Dictionary<string, string> dic = new Dictionary<string, string>(); |
|
dic.Add("JCBH", "JCBH"); |
|
dic.Add("BGDL", "BGDL"); |
|
dic.Add("BGFW", "BGFW"); |
|
dic.Add("WBGLX", "WBGLX"); |
|
dic.Add("QSX", "QSX"); |
|
dic.Add("HSX", "HSX"); |
|
dic.Add("TBLX", "TBLX"); |
|
dic.Add("XZQDM", "XZQDM"); |
|
dic.Add("XMC", "XMC"); |
|
dic.Add("JCMJ", "JCMJ"); |
|
dic.Add("XZB", "XZB"); |
|
dic.Add("YZB", "YZB"); |
|
dic.Add("TZ", "TZ"); |
|
dic.Add("BZ", "BZ"); |
|
dic.Add("JZRY", "JZRY"); |
|
dic.Add("SJLY", "SJLY"); |
|
|
|
SQLiteDataReader rowTYSDJZ = SQLiteDBOperate.Instance.ExecuteDataReader(dbPath, "select * from " + sjztcName, null); |
|
|
|
IFeatureClass featureClass = MapsManager.Instance.MapService.GetFeatureClassByName("JZCG"); |
|
|
|
InsertPolygonToTYSDJZ(rowTYSDJZ, "JZCG", "TBFW", dic, featureClass); |
|
|
|
rowTYSDJZ.Close(); |
|
|
|
Geoprocessor mGP = new Geoprocessor() { OverwriteOutput = true }; |
|
// GeoprocessorHelper.RepairGeo(featureClass, true); |
|
|
|
if (null != featureClass) |
|
Marshal.FinalReleaseComObject(featureClass); |
|
return null; |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
return "举证包数据导入失败:" + ex.Message; |
|
} |
|
finally |
|
{ |
|
GC.Collect(); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 从外业举证包中导入统一时点举证地类图斑 |
|
/// </summary> |
|
/// <param name="dtSource"></param> |
|
/// <param name="featureName"></param> |
|
/// <param name="shapCol"></param> |
|
/// <param name="dicMap"></param> |
|
public void InsertPolygonToTYSDJZ(SQLiteDataReader row, string featureName, string shapCol, Dictionary<string, string> dicMap, IFeatureClass featureClass) |
|
{ |
|
//IFeatureClass featureClass = featurespace.OpenFeatureClass(featureName); |
|
|
|
//先清空 |
|
ITable pTable = featureClass as ITable; |
|
pTable.DeleteSearchedRows(null); |
|
|
|
IFeatureCursor feaCursor = featureClass.Insert(true); |
|
IFeatureBuffer feaBuffer = featureClass.CreateFeatureBuffer(); |
|
try |
|
{ |
|
while (row.Read()) |
|
{ |
|
try |
|
{ |
|
feaBuffer.Shape = GetPolygonFromWkt(row[shapCol].ToString()); |
|
foreach (var item in dicMap) |
|
{ |
|
if (feaBuffer.Fields.FindField(item.Value) == -1) continue; |
|
feaBuffer.set_Value(feaBuffer.Fields.FindField(item.Value), row[item.Key] is DBNull ? "" : row[item.Key]); |
|
} |
|
object obj = feaCursor.InsertFeature(feaBuffer); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug(ex); |
|
continue; |
|
} |
|
} |
|
feaCursor.Flush(); |
|
row.Close(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
//throw; |
|
} |
|
finally |
|
{ |
|
if (feaCursor != null) |
|
Marshal.ReleaseComObject(feaCursor); |
|
if (feaBuffer != null) |
|
Marshal.ReleaseComObject(feaBuffer); |
|
} |
|
} |
|
|
|
public IGeometry GetPolygonFromWkt(string pointsStr) |
|
{ |
|
IGeometry geometry = new PolygonClass(); |
|
OSGeo.OGR.Geometry rstGeometry = OSGeo.OGR.Geometry.CreateFromWkt(pointsStr); |
|
byte[] geometryBytes = new byte[rstGeometry.WkbSize()]; |
|
rstGeometry.ExportToWkb(geometryBytes); |
|
IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3; |
|
|
|
int bytesLen = geometryBytes.Length; |
|
factory.CreateGeometryFromWkbVariant(geometryBytes, out geometry, out bytesLen); |
|
return geometry; |
|
} |
|
|
|
public IFeatureClass CreateXYEventSource(ITable table, ISpatialReference spatialReference) |
|
{ |
|
IXYEvent2FieldsProperties xyEvent2FieldsProperties = new XYEvent2FieldsPropertiesClass(); |
|
xyEvent2FieldsProperties.XFieldName = "Longitude"; |
|
xyEvent2FieldsProperties.YFieldName = "Latitude"; |
|
IDataset sourceDataset = (IDataset)table; |
|
IName sourceName = sourceDataset.FullName; |
|
IXYEventSourceName xyEventSourceName = new XYEventSourceNameClass(); |
|
xyEventSourceName.EventProperties = xyEvent2FieldsProperties; xyEventSourceName.EventTableName = sourceName; xyEventSourceName.SpatialReference = spatialReference; |
|
IName name = (IName)xyEventSourceName; |
|
IXYEventSource xyEventSource = (IXYEventSource)name.Open(); |
|
IFeatureClass featureClass = (IFeatureClass)xyEventSource; |
|
return featureClass; |
|
} |
|
} |
|
}
|
|
|