|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using ArcShapeFileDLL;
|
|
|
|
|
using Kingo.Mobile.Shape2KOTool.XSDClass;
|
|
|
|
|
|
|
|
|
|
namespace Kingo.Mobile.Shape2KOTool.KoDataBase
|
|
|
|
|
{
|
|
|
|
|
// Token: 0x0200004E RID: 78
|
|
|
|
|
public class SHPDataSource : ISpatialDataSource
|
|
|
|
|
{
|
|
|
|
|
// Token: 0x0600029B RID: 667 RVA: 0x00010287 File Offset: 0x0000E487
|
|
|
|
|
public SHPDataSource()
|
|
|
|
|
{
|
|
|
|
|
this.GeometryType = esriGeometryType.esriGeometryPolygon;
|
|
|
|
|
this.SpatialReference = new SpatialRefrenceStruct();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x170000E1 RID: 225
|
|
|
|
|
// (get) Token: 0x0600029C RID: 668 RVA: 0x000102A8 File Offset: 0x0000E4A8
|
|
|
|
|
// (set) Token: 0x0600029D RID: 669 RVA: 0x000102BF File Offset: 0x0000E4BF
|
|
|
|
|
public string DataSourcePath { get; set; }
|
|
|
|
|
|
|
|
|
|
// Token: 0x170000E2 RID: 226
|
|
|
|
|
// (get) Token: 0x0600029E RID: 670 RVA: 0x000102C8 File Offset: 0x0000E4C8
|
|
|
|
|
// (set) Token: 0x0600029F RID: 671 RVA: 0x000102DF File Offset: 0x0000E4DF
|
|
|
|
|
public DataTable DataTable { get; private set; }
|
|
|
|
|
|
|
|
|
|
// Token: 0x170000E3 RID: 227
|
|
|
|
|
// (get) Token: 0x060002A0 RID: 672 RVA: 0x000102E8 File Offset: 0x0000E4E8
|
|
|
|
|
// (set) Token: 0x060002A1 RID: 673 RVA: 0x000102FF File Offset: 0x0000E4FF
|
|
|
|
|
public List<ShapeFieldInfo> Fields { get; private set; }
|
|
|
|
|
|
|
|
|
|
// Token: 0x170000E4 RID: 228
|
|
|
|
|
// (get) Token: 0x060002A2 RID: 674 RVA: 0x00010308 File Offset: 0x0000E508
|
|
|
|
|
// (set) Token: 0x060002A3 RID: 675 RVA: 0x0001031F File Offset: 0x0000E51F
|
|
|
|
|
public EnvelopeN Extent { get; private set; }
|
|
|
|
|
|
|
|
|
|
// Token: 0x170000E5 RID: 229
|
|
|
|
|
// (get) Token: 0x060002A4 RID: 676 RVA: 0x00010328 File Offset: 0x0000E528
|
|
|
|
|
// (set) Token: 0x060002A5 RID: 677 RVA: 0x0001033F File Offset: 0x0000E53F
|
|
|
|
|
public esriGeometryType GeometryType { get; private set; }
|
|
|
|
|
|
|
|
|
|
// Token: 0x170000E6 RID: 230
|
|
|
|
|
// (get) Token: 0x060002A6 RID: 678 RVA: 0x00010348 File Offset: 0x0000E548
|
|
|
|
|
// (set) Token: 0x060002A7 RID: 679 RVA: 0x0001035F File Offset: 0x0000E55F
|
|
|
|
|
public SpatialRefrenceStruct SpatialReference { get; private set; }
|
|
|
|
|
|
|
|
|
|
// Token: 0x170000E7 RID: 231
|
|
|
|
|
// (get) Token: 0x060002A8 RID: 680 RVA: 0x00010368 File Offset: 0x0000E568
|
|
|
|
|
// (set) Token: 0x060002A9 RID: 681 RVA: 0x0001037F File Offset: 0x0000E57F
|
|
|
|
|
public int RecordCount { get; private set; }
|
|
|
|
|
|
|
|
|
|
// Token: 0x060002AA RID: 682 RVA: 0x000103BC File Offset: 0x0000E5BC
|
|
|
|
|
public void Open()
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrEmpty(this.DataSourcePath))
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException();
|
|
|
|
|
}
|
|
|
|
|
if (!File.Exists(this.DataSourcePath))
|
|
|
|
|
{
|
|
|
|
|
throw new FileNotFoundException("SHP文件不存在");
|
|
|
|
|
}
|
|
|
|
|
string text = this.DataSourcePath.Replace(".shp", ".dbf");
|
|
|
|
|
if (!File.Exists(text))
|
|
|
|
|
{
|
|
|
|
|
throw new FileNotFoundException("DBF文件不存在");
|
|
|
|
|
}
|
|
|
|
|
this.shapeFile = new ShapeFiles();
|
|
|
|
|
this.shapeFile.OpenShape(this.DataSourcePath, 0, false);
|
|
|
|
|
this.Extent = new EnvelopeN
|
|
|
|
|
{
|
|
|
|
|
XMax = this.shapeFile.xMax,
|
|
|
|
|
XMin = this.shapeFile.xMin,
|
|
|
|
|
YMax = this.shapeFile.yMax,
|
|
|
|
|
YMin = this.shapeFile.yMin
|
|
|
|
|
};
|
|
|
|
|
this.RecordCount = this.shapeFile.RecordCount;
|
|
|
|
|
string path = this.DataSourcePath.Replace(".shp", ".prj");
|
|
|
|
|
if (File.Exists(path))
|
|
|
|
|
{
|
|
|
|
|
string wkt = File.ReadAllText(path);
|
|
|
|
|
SpatialRefrenceStruct spatialRefrenceStruct = SpatialRefrenceStruct.GetAllData().Find((SpatialRefrenceStruct p) => p.WKT.ToLower() == wkt.ToLower());
|
|
|
|
|
if (spatialRefrenceStruct != null)
|
|
|
|
|
{
|
|
|
|
|
this.SpatialReference = spatialRefrenceStruct;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (this.shapeFile.ShapeType != ShapeFiles.eShapeType.shpPolygon || this.shapeFile.ShapeType != ShapeFiles.eShapeType.shpPolygonM || this.shapeFile.ShapeType != ShapeFiles.eShapeType.shpPolygonZ)
|
|
|
|
|
{
|
|
|
|
|
this.GeometryType = esriGeometryType.esriGeometryPolygon;
|
|
|
|
|
this.Fields = new List<ShapeFieldInfo>();
|
|
|
|
|
foreach (object obj in this.shapeFile.ShapeFields)
|
|
|
|
|
{
|
|
|
|
|
ShapeField shapeField = (ShapeField)obj;
|
|
|
|
|
if (shapeField.FieldName.ToLower() == "objectid")
|
|
|
|
|
{
|
|
|
|
|
shapeField.FieldName = "OBJECTID_1";
|
|
|
|
|
}
|
|
|
|
|
this.Fields.Add(new ShapeFieldInfo(shapeField));
|
|
|
|
|
}
|
|
|
|
|
this.dbfReader = new DBFReader();
|
|
|
|
|
this.dbfReader.Open(text);
|
|
|
|
|
this.DataTable = this.dbfReader.DataTable.Clone();
|
|
|
|
|
this.DataTable.Columns.Add("OBJECTID", typeof(int));
|
|
|
|
|
this.DataTable.Columns.Add("SHAPE", typeof(string));
|
|
|
|
|
this.EOF = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
throw new Exception("目前只支持多边形类型的数据!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x060002AB RID: 683 RVA: 0x00010694 File Offset: 0x0000E894
|
|
|
|
|
public void Close()
|
|
|
|
|
{
|
|
|
|
|
if (this.shapeFile != null)
|
|
|
|
|
{
|
|
|
|
|
this.shapeFile.CloseShape();
|
|
|
|
|
this.shapeFile = null;
|
|
|
|
|
}
|
|
|
|
|
if (this.dbfReader != null)
|
|
|
|
|
{
|
|
|
|
|
this.dbfReader.Close();
|
|
|
|
|
this.dbfReader = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x060002AC RID: 684 RVA: 0x000106E8 File Offset: 0x0000E8E8
|
|
|
|
|
public Dictionary<string, int> Distinct(string fieldName)
|
|
|
|
|
{
|
|
|
|
|
return this.dbfReader.Distinct(fieldName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x060002AD RID: 685 RVA: 0x00010708 File Offset: 0x0000E908
|
|
|
|
|
public DataTable GetAllRecord()
|
|
|
|
|
{
|
|
|
|
|
this.Reset();
|
|
|
|
|
while (!this.EOF)
|
|
|
|
|
{
|
|
|
|
|
DataRow nextRecord = this.GetNextRecord();
|
|
|
|
|
this.DataTable.Rows.Add(nextRecord);
|
|
|
|
|
}
|
|
|
|
|
this.Reset();
|
|
|
|
|
return this.DataTable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x060002AE RID: 686 RVA: 0x00010758 File Offset: 0x0000E958
|
|
|
|
|
public DataRow GetNextRecord()
|
|
|
|
|
{
|
|
|
|
|
DataRow dataRow = this.DataTable.NewRow();
|
|
|
|
|
DataRow nextRecord = this.dbfReader.GetNextRecord();
|
|
|
|
|
List<object> list = new List<object>();
|
|
|
|
|
list.AddRange(nextRecord.ItemArray);
|
|
|
|
|
list.Add(this.shapeFile.CurrentRecord);
|
|
|
|
|
list.Add(CommonMethod.GetShapeMultiPolygonString(this.shapeFile));
|
|
|
|
|
dataRow.ItemArray = list.ToArray();
|
|
|
|
|
if (this.shapeFile.EOF || this.dbfReader.EOF)
|
|
|
|
|
{
|
|
|
|
|
this.EOF = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.shapeFile.MoveNext();
|
|
|
|
|
}
|
|
|
|
|
return dataRow;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x170000E8 RID: 232
|
|
|
|
|
// (get) Token: 0x060002AF RID: 687 RVA: 0x0001080C File Offset: 0x0000EA0C
|
|
|
|
|
// (set) Token: 0x060002B0 RID: 688 RVA: 0x00010823 File Offset: 0x0000EA23
|
|
|
|
|
public bool EOF { get; private set; }
|
|
|
|
|
|
|
|
|
|
// Token: 0x060002B1 RID: 689 RVA: 0x0001082C File Offset: 0x0000EA2C
|
|
|
|
|
public void Reset()
|
|
|
|
|
{
|
|
|
|
|
this.shapeFile.MoveFirst();
|
|
|
|
|
this.dbfReader.Reset();
|
|
|
|
|
this.EOF = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token: 0x040001C1 RID: 449
|
|
|
|
|
private ShapeFiles shapeFile;
|
|
|
|
|
|
|
|
|
|
// Token: 0x040001C2 RID: 450
|
|
|
|
|
private DBFReader dbfReader;
|
|
|
|
|
}
|
|
|
|
|
}
|