Exportieren von Vertexen in .txt

Hallo, ich habe folgendes Problem. Wir wollen von Polygonen die Koordinaten in eine .txt Datei exportieren. Ihr müsst euch das so vorstellen.

z.b. ALK man Selektiert ein Polygon und von diesem Polygon wollen wir die Koordinaten in eine .txt exportieren (von jedem Vertext)

mfg Bolle
HiHo Bolle,

falls Du Zugriff auf eine ArcInfo Lizenz hast: ungenerate-Format erstellen (enthält die Koordinaten aller Stützpunkte sowie die Polygon_Id + Labelpunkt).
Hallo Bolle,

wie soll das ganze denn aussehen? Vielleicht hilft Dir ja folgende Anregung weiter. Ist aber noch stark verbesserungsbedürftig und funktioniert vermutlich nicht bei Multipart-Polygonen etc.:

Function VertexToTextFile(TextFile As String)
Dim pDoc As IMxDocument
Dim pMap As IMap
Dim pEnF As IEnumFeature
Dim pFea As IFeature
Dim pPC As IPointCollection
Dim pP As IPoint
Dim i As Integer
Dim lFileID As Long
Set pDoc = ThisDocument
Set pMap = pDoc.FocusMap
Set pEnF = pMap.FeatureSelection
Set pFea = pEnF.Next
Dim x As Integer
x = 0

If Not pFea Is Nothing Then
lFileID = FreeFile()
Open TextFile For Append As lFileID
Print #lFileID, ""
Print #lFileID, "######### " & Now & " #############"

Do While Not pFea Is Nothing
x = x + 1
Print #lFileID, "--------------- Objekt " & x & "----------------"
Print #lFileID, " X Y"

Set pPC = pFea.Shape
For i = 0 To pPC.PointCount - 2 ' der letzte Punkt ist wieder der erste, daher -2 anstatt -1
Set pP = pPC.Point(i)
Print #lFileID, i & ". " & pP.x & ", " & pP.y
Next i
Set pFea = pEnF.Next
Loop

MsgBox "Vertices wurden übertragen", vbInformation
Close lFileID
Else
MsgBox "Nix ausgewählt", vbCritical, "Dösbaddel"
End If
End Function

Aufruf dann zb per ButtonControl

Private Sub UIButtonControl1_Click()
VertexToTextFile "Pfad + Dateiname, wo es hinsoll"
End Sub

Viele Grüße
Jörg Ostendorp
Hallo Meer,

ich was leider mit deiner Antwort nicht so recht was an zufangen!
Kannst du mir das vielleicht näher erklären.

@ Gast

Ich verstehe leider nichts vom Scripten und so weiter. Kannst du mir vielleicht deutlsch machen wie ich deine Lösung umsetzte
mfg Bolle
Hallo Bolle,

das Code-Schnipselchen zeigt Dir eigentlich nur dir ganz grob, wie Du Stützpunkte überhaupt in eine Textdatei kriegst. Ohne daß Du Dir das noch gehörig an Deine eigenen Bedürfnisse anpaßt (definierte TextFile-Struktur, Feature-GeometryType, Layername, Feature-ID, ggf. Common-Corntrol zur Datei-Auswahl/Neue Datei etc.) dürfte es Dir kaum weiterhelfen.

Aber um Deine Frage zu beantworten:
1. Textdatei anlegen, in die die Koordinaten reingeschrieben werden sollen.
2. UiButtonControl erstellen (s. Hilfe "UiControl") und in die Click-Prozedur (rechte Maustaste "Quelltext"..) den Funktionsnamen eintragen (s.o. Private Sub ...)
3. Im VBA-Editor innerhalb Deines Projektes ein neues Modul anlegen und die Funktion dort reinkopieren("Function .." bis "End Function") .
4. In Arcmap das/die gewünschte/n Objekt/e auswählen und auf den UiButton klicken.

Viele Grüße
Jörg Ostendorp
Moin,

klasse hat funktioniert! Du sag mal hast du vielleicht en site wo man sich so ein bissel mit VB auseinander setzen kann denn ich find das klasse was du gemacht hast!

Könntest du mir noch einen gefallen un und mir sagen wie ich es anstelle damit er mir auch die ObjektID mit raus schreibt? Denn wenn ich z.b. 15 Polygone Exportiere dann weiss ich ja nicht welches Objekt1 oder 4 ist.

THX im Voraus

Mfg Bolle
Hallo Bolle,
eine gut Seite kenne ich so allgemein zu VBA nicht. Es gibt aber dutzende zu den verschiedenen Office-Programmen, insbesondere zu Access und Excel (google mal nach "VBA Tutorial" oder so). Da die aber (größtenteils) mit völlig anderen Bibliotheken arbeiten hat man in ArcGis nur sehr bedingt was von. (Bei Bibliothek fällt mir ein: da gibts sicherlich auch ganz gute Bücher...).
Die ArcObjects sind ziemlich umfangreich und daher auch mit VBA-Kenntnissen recht kompliziert (finde ich zumindest). Hier gibts aber eine prima "Einführung" (ca. 1300 S.) als pdf von Esri selbst ("Exploring ArcObjects") irgendwo bei den Dokumentationen sowie massenweise pdfs zu den ArcGis-Objekt-Modellen (MODs). Kann aber sein, daß man dafür das Developer Kit installieren muß (?).

Zum Code:
- Ja, das ist verständlich...
Ersetze den Mittelteil der Funktion einfach durch:

If Not pFea Is Nothing Then
lFileID = FreeFile()
Open TextFile For Append As lFileID
Print #lFileID, ""
Print #lFileID, "######### " & Now & " #############"

Do While Not pFea Is Nothing
x = x + 1
Print #lFileID, "----------------------------------"
Print #lFileID, "Layer: " & pFea.Class.AliasName
Print #lFileID, "Object-ID: " & pFea.OID
Print #lFileID, ""

Print #lFileID, " X Y"

Set pPC = pFea.Shape
For i = 0 To pPC.PointCount - 2 ' der letzte Punkt ist wieder der erste, daher -2 anstatt -1
Set pP = pPC.Point(i)
Print #lFileID, i & ". " & pP.x & " / " & pP.y
Next i
Set pFea = pEnF.Next
Loop

MsgBox "Vertices wurden übertragen", vbInformation

Hier wird momentan dann die OID abgefragt, also die ID, die ArcView selbst erstellt. Da dies (irrsinnigerweise) eine laufende Nummer anstatt einer wirklichen ID ist, wirst Du Deine Tabelleneinträge anhand der Nummer nicht mehr wiederfinden, wenn Du mal Objekte löschst. Falls Du eine eigene ID angelegt hast kannst Du hier die Spaltennummer angeben um den Wert zu übernehmen (Achtung, die Spaltenummer muß natürlich für alle abgefragten Objekte identisch sein). Ersetze dazu einfach:

Print #lFileID, "Object-ID: " & pFea.OID
durch
pFea.Value(x)
wobei x die Nummer Deiner Spalte ist (in der Regel wohl 3, nach FID und Shape).

Und nur nochmal die Warnung: Die Funktion ist nur für NORMALE Polygone und Linien anwendbar. Stützpunkte von Mulipart-Objekten werden nicht korrekt übernommen!

Viele Grüße
Jörg Ostendorp
sorry muß natürlich durch

Print #lFileID, "Objekt-ID: " & pFea.value(x) ersetzt werden