Добавление полигона
Добавлено: 26 авг 2010, 20:21
Доброго времени суток. Подскажите пожалуйста как программно добавить полигон (polygon) к уже существующему шейп-файлу. Заранее спасибо
Геоинформационные системы (ГИС) и Дистанционное зондирование Земли
https://gis-lab.info/forum/
Код: Выделить всё
public void IFeatureBuffer_Example(IFeatureClass featureClass) {
//Function is designed to work with polyline data
if (featureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline) { return; }
//get the Workspace from the IDataset interface on the feature class
IDataset dataset = (IDataset)featureClass;
IWorkspace workspace = dataset.Workspace;
//Cast for an IWorkspaceEdit
IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
//Start an edit session and operation
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();
//Create the Feature Buffer
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
//Create insert Feature Cursor using buffering = true.
IFeatureCursor featureCursor = featureClass.Insert(true);
object featureOID;
//With a feature buffer you have the ability to set the attribute for a specific field to be
//the same for all features added to the buffer. featureBuffer.set_Value(featureBuffer.Fields.FindField("InstalledBy"), "K Johnston");
//Here you can set the featurebuffers's shape by setting the featureBuffer.Shape
//to a geomerty that matched the featureclasses.
//Create 100 features using FeatureBuffer and insert into a feature cursor
ESRI.ArcGIS.Geometry.IPolyline polyline = new ESRI.ArcGIS.Geometry.PolylineClass();
ESRI.ArcGIS.Geometry.IPoint point = new ESRI.ArcGIS.Geometry.PointClass();
for (int i = 0; i < 100; i++)
{
//Create the polyline geometry to assign to the new feature
point.X = 498490 + i * 10;
point.Y = 675380 + i * 10;
polyline.FromPoint = point;
point = new ESRI.ArcGIS.Geometry.PointClass();
point.X = 498480 + i * 10;
point.Y = 675390 + i * 10;
polyline.ToPoint = point;
featureBuffer.Shape = polyline;
//Insert the feature into the feature cursor
featureOID = featureCursor.InsertFeature(featureBuffer);
}
//Flush the feature cursor to the database
//Calling flush allows you to handle any errors at a known time rather then on the cursor destruction. featureCursor.Flush();
//Stop editing
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
//Release the Cursor
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
}
Код: Выделить всё
public void IFeatureBuffer_Example(IFeatureClass featureClass) {
//Function is designed to work with polyline data
if (featureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) { return; }
//Create the Feature Buffer
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
//Create insert Feature Cursor using buffering = true.
IFeatureCursor featureCursor = featureClass.Insert(true);
object featureOID;
//With a feature buffer you have the ability to set the attribute for a specific field to be
//the same for all features added to the buffer. featureBuffer.set_Value(featureBuffer.Fields.FindField("InstalledBy"), "K Johnston");
//Here you can set the featurebuffers's shape by setting the featureBuffer.Shape
//to a geomerty that matched the featureclasses.
//Create 100 features using FeatureBuffer and insert into a feature cursor
ESRI.ArcGIS.Geometry.IGeometryCollection geometrycollection = new ESRI.ArcGIS.Geometry.PolygonClass();
ESRI.ArcGIS.Geometry.ISegmentCollection segmentcollection = new ESRI.ArcGIS.Geometry.RingClass();
for (int i = 0; i < 100; i++)
{
segmentcollection.PutCoords(498490 + i * 10, 675380 + i * 10);
segmentcollection.PutCoords(498480 + i * 10, 675390 + i * 10);
}
ESRI.ArcGIS.Geometry.IRing ring = segmentcollection;
ring.Close();
geometrycollection.AddGeometry(ring);
featureBuffer.Shape = geometrycollection;
featureOID = featureCursor.InsertFeature(featureBuffer);
//Flush the feature cursor to the database
featureCursor.Flush();
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
}
Код: Выделить всё
public void IFeatureBuffer_Example(IFeatureClass featureClass)
{
//Function is designed to work with polyline data
if (featureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) { return; }
//Create the Feature Buffer
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
//Create insert Feature Cursor using buffering = true.
IFeatureCursor featureCursor = featureClass.Insert(true);
object featureOID;
ESRI.ArcGIS.Geometry.IGeometryCollection geometrycollection = new ESRI.ArcGIS.Geometry.PolygonClass();
ESRI.ArcGIS.Geometry.IPointCollection pointcollection = new ESRI.ArcGIS.Geometry.RingClass();
ESRI.ArcGIS.Geometry.IPoint point = new ESRI.ArcGIS.Geometry.PointClass();
for (int i = 0; i < 100; i++)
{
point.PutCoords(498490 + i * 10, 675380 + i * 10);
pointcollection.AddPoint(point);
point.PutCoords(498480 + i * 10, 675390 + i * 10);
pointcollection.AddPoint(point);
}
ESRI.ArcGIS.Geometry.IRing ring = pointcollection;
ring.Close();
geometrycollection.AddGeometry(ring);
featureBuffer.Shape = geometrycollection;
featureOID = featureCursor.InsertFeature(featureBuffer);
//Flush the feature cursor to the database
featureCursor.Flush();
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
}
Код: Выделить всё
//Function is designed to work with polyline data
if (featureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) { return; }
//Create the Feature Buffer
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
//Create insert Feature Cursor using buffering = true.
IFeatureCursor featureCursor = featureClass.Insert(true);
object featureOID;
ESRI.ArcGIS.Geometry.IGeometryCollection geometrycollection = new ESRI.ArcGIS.Geometry.PolygonClass();
ESRI.ArcGIS.Geometry.IPointCollection pointcollection = new ESRI.ArcGIS.Geometry.RingClass();
ESRI.ArcGIS.Geometry.IPoint point = new ESRI.ArcGIS.Geometry.PointClass();
object obj = Type.Missing;
for (int i = 0; i < 100; i++)
{
point.PutCoords(10 + i * 10, 0 + i * 10);
pointcollection.AddPoint(point,ref obj,ref obj);
point.PutCoords(0 + i * 10,10 + i * 10);
pointcollection.AddPoint(point, ref obj, ref obj);
}
ESRI.ArcGIS.Geometry.IRing ring = pointcollection as IRing;
ring.Close();
geometrycollection.AddGeometry(ring,ref obj,ref obj);
featureBuffer.Shape = geometrycollection.get_Geometry(0);
featureOID = featureCursor.InsertFeature(featureBuffer);
//Flush the feature cursor to the database
featureCursor.Flush();
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
Код: Выделить всё
IFeatureClass featureClass = pFtLayer.FeatureClass;
//Function is designed to work with polyline data
if (featureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon) { return; }
//Create the Feature Buffer
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
//Create insert Feature Cursor using buffering = true.
IFeatureCursor featureCursor = featureClass.Insert(true);
object featureOID;
ESRI.ArcGIS.Geometry.IGeometryCollection geometrycollection = new ESRI.ArcGIS.Geometry.PolygonClass();
ESRI.ArcGIS.Geometry.IPointCollection pointcollection = new ESRI.ArcGIS.Geometry.RingClass();
ESRI.ArcGIS.Geometry.IPoint point = new ESRI.ArcGIS.Geometry.PointClass();
object obj = Type.Missing;
point.PutCoords(0,0);
pointcollection.AddPoint(point, ref obj, ref obj);
point.PutCoords(0,100);
pointcollection.AddPoint(point, ref obj, ref obj);
point.PutCoords(100, 100);
pointcollection.AddPoint(point, ref obj, ref obj);
point.PutCoords(100,0);
pointcollection.AddPoint(point, ref obj, ref obj);
ESRI.ArcGIS.Geometry.IRing ring = pointcollection as IRing;
ring.Close();
geometrycollection.AddGeometry(ring, ref obj, ref obj);
IGeometry someGeometry = geometrycollection as IGeometry;
featureBuffer.Shape = geometrycollection as IGeometry;
featureOID = featureCursor.InsertFeature(featureBuffer);
//Flush the feature cursor to the database
featureCursor.Flush();
System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);