Folgendes Problem habe ich: Ich habe ein Fluss als Polylinie. Entlang der Linie schneiden Querschnitte als Linienlayer den Fluss. Gibt es eine Moeglichkeit die Station des jeweiligen Querschnitts auszugeben. Die Sation ist der Ort wo sich Fluss und Linie miteinander Verschneiden, bezogen auf die Distanz, die von dem "Nullpunkt" des Flusses aus geht.
Hat jemand eine Idee?
Hat jemand eine Idee?
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von GISbert am Fr., 22.12.2006 - 10:07
Permalinkich habe dieses Problem schon mal lösen müssen. Allerdings habe ich dafür nur einen Lösungsweg für ArcView3.x parat.
Damals standen mir die Querschnitte zur Verfügung und ich wusste auch genau in welchem Distanzinterval sie auftreten. Ich habe dafür ein Tool genutzt, welches äquidistante Punkte auf einer Linie setzt. Man kann angeben, welchen Abstand die Punkte von einander haben sollen und ab welchem Punkt der Linie dies beginnen soll. In meinem Fall war es die Mündung (0+000 km). Hier der Link, falls es Dir etwas helfen sollte:
http://arcscripts.esri.com/details.asp?dbid=11407
Ansonsten kann ich mir auch vorstellen, dass dieses Script hilft. Es ist für ArcGIS. Ich habe es jedoch noch nicht selbst getestet:
http://arcscripts.esri.com/details.asp?dbid=13208
Gruß,
GISbert
Gespeichert von Novosibirsk am Fr., 22.12.2006 - 10:41
Permalinkvielen Dank fuer Deine beiden Vorschlaege. Leider treffen sie annaehernd mein Problem, da mir die Distanzintervalle unbekannt sind.
Naja, ich kann es ja auch manuell machen, da ich in diesem Fall gluecklicherweise nicht soviele Querschnitte habe.
Gespeichert von Maxilla am Fr., 22.12.2006 - 11:33
PermalinkWenn du die Querschnitte in Punkte umwandelst (z.B. mit den Memo Tools '(Zentral)Koordinaten für Linien') kannst du anschließend die Avenue Request 'PointPosition' verwenden, die dir die prozentuale Position eines Punktes entlang einer Polylinie auswirft. Die kann man dann leicht in Absolutwerte umrechnen. Das Ganze ginge z.B. so:
theView = av.GetActiveDoc
' *** Namen anpassen:
thePThm = theView.FindTheme("Linie.shp") 'Nur der Fluss
theLThm = theView.FindTheme("Punkt.shp") 'Stationen
thePVTab = thePThm.GetFTab
theLVTab = theLThm.GetFTab
thePShpFld = thePVTab.FindField("Shape")
theLShpFld = theLVTab.FindField("Shape")
' *** Nimmt die erste Linie im Linienthema = Fluss:
thePL = theLVTab.ReturnValue(theLShpFld,0)
thePLLength = thePL.ReturnLength
theR = ""+nl
i = 0
for each rec in thePVTab
thePnt = thePVTab.ReturnValue(thePShpFld,rec)
thePct = thePL.PointPosition(thePnt)
thePctS = thePct.AsString
theAbs = thePLLength/100*thePCT
theAbsS = theAbs.AsString
theR = theR+"P"++i.AsString+": "++thePctS+"% -->"++theAbsS+nl
i = i + 1
end
MsgBox.Report(theR,"")
Gespeichert von Novosibirsk am Fr., 22.12.2006 - 11:45
PermalinkGespeichert von Maxilla am Fr., 22.12.2006 - 14:09
PermalinkAvenue ist super, und ich werde sicherlich noch oft drauf zurückgreifen, wenn ich mal eben auf die Schnelle irgendeine Funktion brauche. Aber es hat halt keine Zukunft und ich würde an deiner Stelle jetzt nicht unbedingt damit anfangen, mich in Avenue einzufuchsen. Bestimmt ist es sinnvoller, wenn du die Zeit in Phyton oder VBA/ArcObjects investierst.
Gespeichert von Novosibirsk am Fr., 22.12.2006 - 22:33
PermalinkGespeichert von gisgisi am Mi., 24.10.2012 - 13:40
Permalinkgibt es für die von Novosibirsk beschriebene Aufgabe, zwei Linienthemen zu verschneiden inzwischen in ArcGIS (inzwischen 10) eine einfache Lösung. - Mir erscheind ja die Aufgabe als recht einfach, dennoch habe ich nach einer Weile Kramen in der Toolbox nichts gefunden.
Danke für Hinweise!