Ich habe eine Datei mit Punkten, die in einen Polyliniensatz umgewandelt werden sollen. Einige der Zeilen sind mehrteilig und ich möchte sie in ein einzelnes Teil konvertieren. Die Punkte werden verarbeitet und die Polylinien zu einer Interim-Feature-Class hinzugefügt (für Sicherungszwecke). Wenn eine Zeile mehrteilig ist, wird sie dieser Interim-Feature-Class als Multipart hinzugefügt. Die Interim-Feature-Class wird dann gelesen und die Features in eine Basis-Feature-Class kopiert. Dies funktioniert gut für Einzelkomponenten-Features, aber ich erhalte weiterhin den Fehler 'Keine Unterstützung für diesen Geometrietyp', wenn die Multiparts in einzelne Teile konvertiert werden. Das Problem besteht darin, dass ich eine Segmentsammlung als Pfad verwenden muss, um das Multipart-Feature aus einer Menge von Punkten zu erstellen. Ich habe versucht, dies auf eine Polylinie einzustellen, aber das Hinzufügen von Liniensegmenten verursacht einen Fehler (falscher Geometrietyp).IGeometryCollection von Polylines gibt Pfade zurück
Wenn ich die Multipart-Features zur Interim-Feature-Class hinzufüge, sind die Geometrien Polylinien. Wenn ich sie später abrufe (indem ich die Form in eine neue GeometryCollection einfüge), ist die Geometriesammlung eine Polylinie, aber die einzelnen Geometrien sind Pfade (?).
Der Code ist:
1. Add points to interim featureclass by putting them in a pointcollection.
pPtColl = (IPointCollection4)new Polyline();
pGeomColl = (IGeometryCollection)new Polyline();
// Fill point collection
.......
// Create a path made up of segments from the point collection
ISegment pSegment;
ISegmentCollection pSegColl = (ISegmentCollection)new ESRI.ArcGIS.Geometry.Path(); // Fails if changed to new Polyline()
// M and Z aware
if (bHasZ == true)
{
pZAware = (IZAware)pSegColl;
pZAware.ZAware = true;
}
if (bHasM == true)
{
pMAware = (IMAware)pSegColl;
pMAware.MAware = true;
}
for (int n = 1; n < pPtColl.PointCount; n++)
{
pSegment = (ISegment)new Line();
pSegment.SpatialReference = pSpRef;
pSegment.FromPoint = pPtColl.Point[n - 1];
pSegment.ToPoint = pPtColl.Point[n];
pSegColl.AddSegment(pSegment, oMissing, oMissing);
}
pGeomColl.AddGeometry(pSegColl as IGeometry, oMissing, oMissing);
pGeom = (IGeometry)pGeomColl; // pGeom has geometry type = Polyline
pGeom.SpatialReference = pSpRef;
pFeat.Shape = pGeom;
Dieser Teil des Codes alles funktioniert gut. Beim Verarbeiten dieser Features aus der Interim-Feature-Class, um sie der Basis-Feature-Class hinzuzufügen, erhalte ich einen Fehler, weil der Geometrietyp aus der Geometriesammlung "Pfad" und nicht "Polylinie" lautet.
// Read the geometry from the interim feature into a geometry collection
pGeomColl = (IGeometryCollection)new Polyline();
pGeomColl = (IGeometryCollection)pFromFeature.ShapeCopy;
for (int j = 0; j < pGeomColl.GeometryCount; j++)
{
// Create a new (Polyline) feature pToFeat and populate its attributes
pToFeat = pToFC.CreateFeature();
....
// pGeomColl has geometry type = Polyline
pGeom = pGeomColl.Geometry[j]; // pGeom has geometry type = Path
pToFeat.Shape = pGeom; // Fails. pToFeat is a Polyline.
}
Wie kann ich sicherstellen, dass die Geometriesammlung Geometrien mit Polylinien anstelle von Pfaden enthält?
Danke,
JM