Einen guten Morgen,
seit Tagen versuche ich schon Koordinaten eines Punktshapes in eine Textdatei zu schreiben, leider vergeblich. Wer kann mir helfen? Bin über jeden Tipp, Auszüge aus Programmcode, etc. dankbar.
Vielen vielen Dank im Vorraus.
seit Tagen versuche ich schon Koordinaten eines Punktshapes in eine Textdatei zu schreiben, leider vergeblich. Wer kann mir helfen? Bin über jeden Tipp, Auszüge aus Programmcode, etc. dankbar.
Vielen vielen Dank im Vorraus.
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Imke am Fr., 16.07.2004 - 09:52
Permalinkprobier es mal hiermit. Ich habe so Koordinaten für die Georeferenzierung (zum Laden in die ViewLinkTable) in eine Textdatei geschrieben. Klappt aber auch mit Text oder ähnlichem.
oder kommst du nicht an die Punkte des Shapes ran? da habe ich allerdings auch keine ahnung wie das geht.
Viele Grüße, Imke Dörge
-------------------------
Public Sub txtfile_write()
Dim pFile As IGxFile
Set pFile = New GxFile
pFile.Path = "C:\temp\Ref_Koordinaten.txt" 'in diese Datei soll geschrieben werden
'******** schreiben der Daten in die txt-datei******************
Open pFile.Path For Output As #1 ' Datei öffnen zum editieren
'zeilenweise schreiben (Nr, x_Raster, y_Raster, x_Karte, y_Karte)
'die Umwandlung in String ist notwendig, da bei deutscher Ländereinstellung
'das Double-Trennzeichen ein Komma ist, aber zum Einlesen ein Punkt benötigt wird
Print #1, "1"; vbTab; Point_LO.X; vbTab; Point_LO.Y; vbTab; _
Str(Point_A.X); vbTab; Str(Point_A.Y)
Print #1, "2"; vbTab; Point_LU.X; vbTab; Point_LU.Y; vbTab; _
Str(Point_B.X); vbTab; Str(Point_B.Y)
Print #1, "3"; vbTab; Point_RU.X; vbTab; Point_RU.Y; vbTab; _
Str(Point_C.X); vbTab; Str(Point_C.Y)
Print #1, "4"; vbTab; Point_RO.X; vbTab; Point_RO.Y; vbTab; _
Str(Point_D.X); vbTab; Str(Point_D.Y)
Close #1 ' Editieren der Datei beenden
pFile.Edit 'öffnet die Datei im Texteditor
End Sub
Gespeichert von Gast am Fr., 16.07.2004 - 12:32
Permalinkvielen vielen Dank erstmal für das schnelle Antworten. Allerdings hab ich nun doch noch einige Fragen zu dem Programm. Ich hab es in VB-Editor eingefügt und mal laufen lassen.
Dazu hab ich vorher die Ref_Koordinaten.txt angelegt. So nun aber mein Verständnisproblem und die Fehlermeldung beim Debuggen:
"Print #1, "1"; vbTab; Point_LO.X; vbTab; Point_LO.Y; vbTab; _
Str(Point_A.X); vbTab; Str(Point_A.Y)"
tritt in dieser Zeile auf. Du hattes ja vorher beschrieben, dass hier erst die Nr., dann die xKoordinate, yKoordinate, xKarte und yKarte eingefügt wird. Das vbTab ist vermutlich ein TabSprung oder? Soweit ist das auch klar, allerdings wo kommen die Koordinaten her bzw. wenn ich einen Koordinatenwerte habe, wie füg ich die dann ein? Schreibe ich an Stelle von Point_LO.X den Koordinatenwert 3500000 hin? Oder hast Du eine andere Datei vorliegen aus der die Koordinaten kommen????
Übrigens hab ich die x und y Koordinaten der Punkte im Shape mit in die InfoTabelle schreiben lassen, aber wie ich die da rauslesen soll, weiss ich auch noch nicht.
Gruß und vielen Dank
Geri
Gespeichert von Imke am Fr., 16.07.2004 - 13:13
Permalinkich habe meine Punkte als globale variablen in einer anderen Datei erzeugt. Du kannst die Werte aber auch beim Aufruf der Funktion übergeben oder erst in diesem Programmteil auslesen. Die Werte direkt einzutragen ist wahrscheinlich nicht sinn und zweck der sache, denn dann könntest du das ganze auch gleich in eine Txt-datei schreiben.
Wie soll denn deine Datei hinterher aussehen?
"Print #1, [diesen Teil bestimmt die Ausgabe in einer Zeile, einzelne Teile mit ; trennen]"
vbTab bezeichnet einen tabsprung richtig.
werde mal schauen , ob ich für das auslesen der Koordinaten aus der tabelle auch noch was passendes finde.
Bis später, Imke
Gespeichert von Gast am Fr., 16.07.2004 - 14:05
Permalinkalso die WErte einzutragen ist auf jeden Fall nicht Sinn und Zweck der Sache, da hast Du vollkommen recht, dann könnte ich jedenPunkt auch einzeln eintragen, allerdings würde ich da ewig zu brauchen, da es wesentlich mehr als nur mal eben 10 Koordinaten sind.
In meiner Textdatei sollen nachher in einer Reihe der Index des Punktes, die xKoordinate, die yKoordinate und die Höhe eingetragen werden. Anschließend der nächste Punkt in der neuen Zeile.
Ich hoffe Du findest noch was hilfreiches.
Liebe Grüße Gerlinde
Gespeichert von Imke am Fr., 16.07.2004 - 15:17
Permalinkich garantiere nicht dafür, das das richtig läuft aber ich denke, so ähnlich müsste es funktionieren.
allerdings besteht noch Handlungsbedarf bei der verknüpfung zwischen auslesen und schreiben. da musst du ein bisschen rumprobieren. vielleicht solltest du alle werte nach und nach in ein array schreiben und dann komplett zur "schreiben-Funktion" weitergeben. dazu in den "auslese"-Teil noch einen Zähler i einbauen, der dir den arrayindex mit hochzählt.
ansonsten erstmal das hier.
Viele Grüße Imke
Public Sub TabelleRead()
Dim pAIFact As IWorkspaceFactory
Dim pAIWSP As IFeatureWorkspace
Dim pPropertyset As IPropertySet
Dim pTable As ITable
Dim pQueryFilter As IQueryFilter
Dim pCursor As ICursor
Dim pRow As IRow
Dim TabIndex As Long 'Index der jeweiligen Tabellenspalte
Dim auslesen As String 'Hilfsvariable für ausgelesene Werte
dim pX, pY, pZ as Double 'die Koordinaten
' InfoWorkspaceFactory erzeugen
Set pAIFact = New ArcInfoWorkspaceFactory
'Propertyset für Verbindung erstellen
Set pPropertyset = New PropertySet
pPropertyset.SetProperty "DATABASE", "D:\canada2" 'Pfad zur Tabelle
' Verweis auf die IWorkspace-Schnittstelle --> Verbindung herstellen
Set pAIWSP = pAIFact.Open(pPropertyset, hWnd)
'Verweis auf die ITable-Schnittstelle ...
Set pTable = pAIWSP.openTable("NameDerTabelle.dat")
' QueryFilter erzeugen und Auswahlbedingung formulieren
Set pQueryFilter = New QueryFilter
pQueryFilter.WhereClause = "OBJECTID >= 1 AND OBJECTID < 15" 'hier deine Auswahlbedingung
'formulieren
' Cursor über alle ausgewählten Objekte
Set pCursor = pTable.Search(pQueryFilter, False)
Set pRow = pCursor.NextRow
Do While Not pRow Is Nothing
'das Auslesen: Feld mit Namen "xxx" suchen, dessen Nummer zwischenspeichern und
'dann den wert des feldes mit dieser Nummer in die entsprechende Variable schreiben
TabIndex = pTable.FindField("X-Koordinate")
pX = pRow.Value(TabIndex)
TabIndex = pTable.FindField("y-Koordinate")
pY = pRow.Value(TabIndex)
TabIndex = pTable.FindField("z-Koordinate")
pZ = pRow.Value(TabIndex)
Set pRow = pCursor.NextRow 'Zeiger auf nächste Zeile setzen,
'dadurch werden die Variablen wieder überschrieben
Loop
End Sub
Gespeichert von Gast am Fr., 16.07.2004 - 19:46
Permalinkdankeschön, ich versuchs mal damit.
Schönes WE und
viele Grüße
Geri