📄 mainwindow.cs
字号:
button3.Enabled = true;
button5.Enabled = true;
}
catch
{
MessageBox.Show("读取点数据时出现错误,请确定您的ShapeFile文件中的点的数据在第一个Layer的SHAPE域中", "警告");
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button5.Enabled = false;
}
}
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
IPoint nowmouse = axMapControl1.ToMapPoint(e.x, e.y);
label1.Text = "X:" + Convert.ToString(nowmouse.X) + ",Y:" + Convert.ToString(nowmouse.Y);
}
public static IFeatureClass CreateFeatureClass(object objectWorkspace,
string name,
ISpatialReference spatialReference,
esriFeatureType featureType,
esriGeometryType geometryType,
IFields fields,
UID uidCLSID,
UID uidCLSEXT,
string configWord)
{
// Check for invalid parameters.
if (objectWorkspace == null)
{
throw (new Exception("[objectWorkspace] cannot be null"));
}
if (!((objectWorkspace is IWorkspace) ||
(objectWorkspace is IFeatureDataset)))
{
throw (new Exception("[objectWorkspace] must be IWorkspace or IFeatureDataset"));
}
if (name == "")
{
throw (new Exception("[name] cannot be empty"));
}
if ((objectWorkspace is IWorkspace) && (spatialReference == null))
{
throw (new Exception("[spatialReference] cannot be null for StandAlong FeatureClasses"));
}
// Set ClassID (if Null)
if (uidCLSID == null)
{
uidCLSID = new UIDClass();
switch (featureType)
{
case (esriFeatureType.esriFTSimple):
uidCLSID.Value = "{52353152-891A-11D0-BEC6-00805F7C4268}";
break;
case (esriFeatureType.esriFTSimpleJunction):
geometryType = esriGeometryType.esriGeometryPoint;
uidCLSID.Value = "{CEE8D6B8-55FE-11D1-AE55-0000F80372B4}";
break;
case (esriFeatureType.esriFTComplexJunction):
uidCLSID.Value = "{DF9D71F4-DA32-11D1-AEBA-0000F80372B4}";
break;
case (esriFeatureType.esriFTSimpleEdge):
geometryType = esriGeometryType.esriGeometryPolyline;
uidCLSID.Value = "{E7031C90-55FE-11D1-AE55-0000F80372B4}";
break;
case (esriFeatureType.esriFTComplexEdge):
geometryType = esriGeometryType.esriGeometryPolyline;
uidCLSID.Value = "{A30E8A2A-C50B-11D1-AEA9-0000F80372B4}";
break;
case (esriFeatureType.esriFTAnnotation):
geometryType = esriGeometryType.esriGeometryPolygon;
uidCLSID.Value = "{E3676993-C682-11D2-8A2A-006097AFF44E}";
break;
case (esriFeatureType.esriFTDimension):
geometryType = esriGeometryType.esriGeometryPolygon;
uidCLSID.Value = "{496764FC-E0C9-11D3-80CE-00C04F601565}";
break;
}
}
// Set uidCLSEXT (if Null)
if (uidCLSEXT == null)
{
switch (featureType)
{
case (esriFeatureType.esriFTAnnotation):
uidCLSEXT = new UIDClass();
uidCLSEXT.Value = "{24429589-D711-11D2-9F41-00C04F6BC6A5}";
break;
case (esriFeatureType.esriFTDimension):
uidCLSEXT = new UIDClass();
uidCLSEXT.Value = "{48F935E2-DA66-11D3-80CE-00C04F601565}";
break;
}
}
// Add Fields
if (fields == null)
{
// Create fields collection
fields = new FieldsClass();
IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
// Create the geometry field
IGeometryDef geometryDef = new GeometryDefClass();
IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
// Assign Geometry Definition
geometryDefEdit.GeometryType_2 = geometryType;
geometryDefEdit.GridCount_2 = 1;
geometryDefEdit.set_GridSize(0, 0.5);
geometryDefEdit.AvgNumPoints_2 = 2;
geometryDefEdit.HasM_2 = false;
geometryDefEdit.HasZ_2 = true;
if (objectWorkspace is IWorkspace)
{
// If this is a STANDALONE FeatureClass then add spatial reference.
geometryDefEdit.SpatialReference_2 = spatialReference;
}
// Create OID Field
IField fieldOID = new FieldClass();
IFieldEdit fieldEditOID = (IFieldEdit)fieldOID;
fieldEditOID.Name_2 = "OBJECTID";
fieldEditOID.AliasName_2 = "OBJECTID";
fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID;
fieldsEdit.AddField(fieldOID);
// Create Geometry Field
IField fieldShape = new FieldClass();
IFieldEdit fieldEditShape = (IFieldEdit)fieldShape;
fieldEditShape.Name_2 = "SHAPE";
fieldEditShape.AliasName_2 = "SHAPE";
fieldEditShape.Type_2 = esriFieldType.esriFieldTypeGeometry;
fieldEditShape.GeometryDef_2 = geometryDef;
fieldsEdit.AddField(fieldShape);
}
// Locate Shape Field
string stringShapeFieldName = "";
for (int i = 0; i <= fields.FieldCount - 1; i++)
{
if (fields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
{
stringShapeFieldName = fields.get_Field(i).Name;
break;
}
}
if (stringShapeFieldName == "")
{
throw (new Exception("Cannot locate geometry field in FIELDS"));
}
IFeatureClass featureClass = null;
if (objectWorkspace is IWorkspace)
{
// Create a STANDALONE FeatureClass
IWorkspace workspace = (IWorkspace)objectWorkspace;
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
featureClass = featureWorkspace.CreateFeatureClass(name, fields, uidCLSID, uidCLSEXT,
featureType, stringShapeFieldName,
configWord);
}
else if (objectWorkspace is IFeatureDataset)
{
IFeatureDataset featureDataset = (IFeatureDataset)objectWorkspace;
featureClass = featureDataset.CreateFeatureClass(name, fields, uidCLSID, uidCLSEXT,
featureType, stringShapeFieldName,
configWord);
}
// Return FeatureClass
return featureClass;
}
private void button3_Click(object sender, EventArgs e)
{
sanjiao = true;
ExportTheResult.RunWorkerAsync();
}
private void button4_Click(object sender, EventArgs e)
{
FindShp.ShowDialog();
filename = FindShp.FileName;
if (filename == string.Empty)
{
MessageBox.Show("您没有选择一个Shape文件");
return;
}
axMapControl1.AddShapeFile(filename.Substring(0, filename.LastIndexOf('\\') + 1), filename.Substring(filename.LastIndexOf('\\') + 1, filename.Length - filename.LastIndexOf('\\') - 1));
}
private void ExportTheResult_DoWork(object sender, DoWorkEventArgs e)
{
string title="";
int step = 0;
IWorkspaceFactory shapeFileFactory = new ShapefileWorkspaceFactory();
IWorkspace temp1 = shapeFileFactory.OpenFromFile(filename.Substring(0, filename.LastIndexOf('\\') + 1), 0);
IFeatureWorkspace featureWksp = (IFeatureWorkspace)temp1;
if(sanjiao) title="sanjiaowang"; else title="duobianxing";
IFeatureClass Ftemp = CreateFeatureClass((object)featureWksp, title+(new Random()).Next().ToString(), new UnknownCoordinateSystemClass(), esriFeatureType.esriFTSimple, esriGeometryType.esriGeometryPolyline, null, null, null, null);
IFeature res;
if (sanjiao)
{
foreach (DTiangle temp in test.TriangleList)
{
ESRI.ArcGIS.Geometry.Point now1 = new ESRI.ArcGIS.Geometry.PointClass();
now1.X = temp.point1.x;
now1.Y = temp.point1.y;
now1.Z = 10;
ESRI.ArcGIS.Geometry.Point now2 = new ESRI.ArcGIS.Geometry.PointClass();
now2.X = temp.point2.x;
now2.Y = temp.point2.y;
now2.Z = 10;
ESRI.ArcGIS.Geometry.Point now3 = new ESRI.ArcGIS.Geometry.PointClass();
now3.X = temp.point3.x;
now3.Y = temp.point3.y;
now3.Z = 10;
IPolyline newnew;
IPolyline newp = new PolylineClass();
newp.FromPoint = now1;
newp.ToPoint = now2;
res = Ftemp.CreateFeature();
newnew = (IPolyline)res.Shape;
newnew.FromPoint = now1;
newnew.ToPoint = now2;
res.Store();
res = Ftemp.CreateFeature();
newnew = (IPolyline)res.Shape;
newnew.FromPoint = now2;
newnew.ToPoint = now3;
res.Store();
res = Ftemp.CreateFeature();
newnew = (IPolyline)res.Shape;
newnew.FromPoint = now3;
newnew.ToPoint = now1;
res.Store();
step++;
ExportTheResult.ReportProgress((int)(((double)step / test.TriangleList.Count) * 100));
}
}
else
{
foreach (DPoint temp in test.ThePoints)
{
for (int m = 0; m < temp.UseThis.Count - 1; m++)
{
ESRI.ArcGIS.Geometry.Point now1 = new ESRI.ArcGIS.Geometry.PointClass();
now1.X = temp.UseThis[m].TheC.x;
now1.Y = temp.UseThis[m].TheC.y;
now1.Z = temp.UseThis[m].TheC.z;
ESRI.ArcGIS.Geometry.Point now2 = new ESRI.ArcGIS.Geometry.PointClass();
now2.X = temp.UseThis[m + 1].TheC.x;
now2.Y = temp.UseThis[m + 1].TheC.y;
now2.Z = temp.UseThis[m + 1].TheC.z;
IPolyline newnew;
res = Ftemp.CreateFeature();
newnew = (IPolyline)res.Shape;
newnew.FromPoint = now1;
newnew.ToPoint = now2;
res.Store();
}
if (temp.IsClosed)
{
ESRI.ArcGIS.Geometry.Point nowlp = new ESRI.ArcGIS.Geometry.PointClass();
nowlp.X = temp.UseThis[temp.UseThis.Count - 1].TheC.x;
nowlp.Y = temp.UseThis[temp.UseThis.Count - 1].TheC.y;
nowlp.Z = temp.UseThis[temp.UseThis.Count - 1].TheC.z;
ESRI.ArcGIS.Geometry.Point nowfp = new ESRI.ArcGIS.Geometry.PointClass();
nowfp.X = temp.UseThis[0].TheC.x;
nowfp.Y = temp.UseThis[0].TheC.y;
nowfp.Z = temp.UseThis[0].TheC.z;
IPolyline newnew;
res = Ftemp.CreateFeature();
newnew = (IPolyline)res.Shape;
newnew.FromPoint = nowlp;
newnew.ToPoint = nowfp;
res.Store();
}
step++;
ExportTheResult.ReportProgress((int)(((double)step / test.ThePoints.Count) * 100));
}
}
}
private void ExportTheResult_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
jindu.Text = "线导出已完成%" + e.ProgressPercentage + ",请稍侯.....";
}
private void ExportTheResult_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
jindu.Text = "线导出已完成!!!";
}
private void button5_Click(object sender, EventArgs e)
{
sanjiao = false;
ExportTheResult.RunWorkerAsync();
}
private void button6_Click(object sender, EventArgs e)
{
Graphics Ddraw = this.CreateGraphics();
double dqidianx = Convert.ToDouble(qidianx.Text);
double dqidiany = Convert.ToDouble(qidiany.Text);
double dzhongyuanx = Convert.ToDouble(zhongdianx.Text);
double dzhongdiany = Convert.ToDouble(zhongdiany.Text);
foreach (DPoint temp in points)
{
if (temp.x > dqidianx && temp.x < dzhongyuanx && temp.y < dqidiany && temp.y > dzhongdiany)
{
ESRI.ArcGIS.Geometry.Point nowp = new ESRI.ArcGIS.Geometry.PointClass();
nowp.X = temp.x;
nowp.Y = temp.y;
nowp.Z = temp.z;
ITopologicalOperator topologicalOperator = (ITopologicalOperator)nowp;
IPolygon polygon = (IPolygon)topologicalOperator.Buffer(axMapControl1.Extent.Width * 0.008);
IRelationalOperator relationalOperator = (IRelationalOperator)polygon;
object o = null;
axMapControl1.DrawShape(polygon, ref o);
reslist.Items.Add("X:" + temp.x + " Y:" + temp.y);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -