Gibt es eine Funktion mit dem 3D-Analyst oder mit Hilfe eines Scripts die Flaechen- Volumenberechnung eines TINS oder GRIDS im Batchmodus zu verarbeiten?
Es soll sich eine Tabelle ergeben, wo sich die Flaeche und das Volumen aus der festgelegten Hoehe ergibt. Sicherlich waere es eine Moeglichkeit die Prozedur einzeln durchzufuehren. Ich wuerde es aber gerne etwas automatisierter haben.
Es soll sich eine Tabelle ergeben, wo sich die Flaeche und das Volumen aus der festgelegten Hoehe ergibt. Sicherlich waere es eine Moeglichkeit die Prozedur einzeln durchzufuehren. Ich wuerde es aber gerne etwas automatisierter haben.
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von GISbert am Do., 14.12.2006 - 10:17
PermalinkGISbert
PS: Hast Du schon eine Lösung gefunden?
Gespeichert von Novosibirsk am Do., 14.12.2006 - 21:08
Permalinkleider noch nicht. Wie ich gesehen habe wurde das Thema noch vor kurzem unter http://www.anuva.de/service_arcforum.php?action=vthread&forum=2&topic= 2881 angesprochen.
Maxilla hat da einen Tipp mit dem Modellbuilder gegeben. Da ich momentan etwas wenig Zeit habe, konnte ich ihn mir nur fluechtig anschauen.
Grundsaetzlich habe ich es hinbekommen ein Modell in der Art zu basteln, was von der Løsung noch weit entfernt ist. Da Area/Volume anhand der Høhe berechnet wird ist es bloed, dass sie nur einzeln eingegeben werden kann. Es muss also entweder eine Moeglichkeit geben mehrere Hoehen mit einem mal einzugeben oder eine Datei (dbf oder ASCII) muss eingelesen werden, die die Hoehen enthaelt. Daraus soll dann der 3D Analyst dann A und V berechnen.
Wenn jemand also eine Idee hat oder weiss wie son Ding zu basteln ist, bitte posten...
Gespeichert von GISbert am Fr., 15.12.2006 - 08:04
Permalinkja den Thread mit dem Modelbuilder habe ich auch verfolgt. Ich habe es auch mal mit dem Modelbuilder probiert, bin aber nicht entscheidend weitergekommen.
In ArcView 3 (wenn es erlaubt ist mal kurz in die andere Produktfamilie umzuschwenken) habe ich mir im Scripteditor das Systemscript "3D.AreaVolumeStats" eingeladen. Ich denke hier liegt ein Ansatzpunkt. Es ist das Systemscript um die Area-Volume-Berechnung anhand einer Höhe durchführen zu können. Wenn man dieses Script mit seinen Messageboxen und Eingabemasken so umprogrammiert, dass man mit Höhenwerten VON-BIS und mit einem Intervall agieren könnte, hätte man ja die Lösung. Vorausgesetzt man beherrscht AVENUE. Ich leider nicht. Aber vielleicht kann da jemand ein paar kurze Tips geben, welche Anweisungen notwendig wären...und den Rest muss man (ich) dann eben learning-by-doing ausprobieren.
Gruß,
GISbert
Gespeichert von Maxilla am Fr., 15.12.2006 - 11:12
Permalink' 3D.AreaVolumeStats_Batch
' Aktives View, aktives TIN
theView = av.GetActiveDoc
theTheme = theView.GetActiveThemes.Get(0) 'TIN !
s = theTheme.GetSurface
'LISTE DER HÖHEN HIER EINTIPPEN:
theBHList = {1,2,3,4,5,6,7}
'UBER DEN BASISHÖHEN = FALSE, UNTER = TRUE:
below = FALSE
if (below) then
bStr = "BELOW"
else
bStr = "ABOVE"
end
theRep = ""
for each datum in theBHList
area = s.Area(datum, below, TRUE)
sarea = s.Area(datum, below, FALSE)
volum = s.Volume(datum, below)
theRep = theRep+bStr++"base height of"++datum.asString +nl+
"Planimetric Area = " + area.SetFormat("d.ddd").asString+nl+
"Surface Area = " + sarea.SetFormat("d.ddd").asString+nl+
"Volume = " + volum.SetFormat("d.ddd").asString+nl+nl
end
MsgBox.Report(theRep,"Area and Volume Statistics")
Gruß von Mx.
Gespeichert von GISbert am Fr., 15.12.2006 - 13:01
Permalinktoll! Das hat geholfen. Und da das ganze gar nicht so schwer aussieht, werde ich mich wohl auch mal ans Programmieren wagen....
Danke, Maxilla!
Gruß,
GISbert
Gespeichert von Maxilla am Fr., 15.12.2006 - 15:06
Permalink' 3D_AreaVolumeStats_Batch
' Aktives View, aktives TIN
theView = av.GetActiveDoc
if (theView.Is(View).Not) then return NIL end
theTheme = theView.GetActiveThemes.Get(0) 'TIN !
if (theTheme.Is(STheme).Not) then return NIL end
s = theTheme.GetSurface
theLabs = {"From:"," To:","Step size:"}
theDefs = {"1","20","1.0"}
theInt = MsgBox.MultiInput("Enter an interval:","Base heights Interval",
theLabs,theDefs)
if (theInt.count = 0) then return nil end
theMin = theInt.Get(0).AsNumber
theMax = theInt.Get(1).AsNumber
theInc = theInt.Get(2).AsNumber
choices = {"Above","Below"}
bStr = MsgBox.ChoiceAsString(choices,"Calculate from which direction of base height:",
"Area and Volume Statistics")
if (bStr = NIL) then return NIL end
if (bStr = "Above") then
below = FALSE
else
below = TRUE
end
theRep = ""
for each datum in theMin..theMax by theInc
area = s.Area(datum, below, TRUE)
sarea = s.Area(datum, below, FALSE)
volum = s.Volume(datum, below)
theRep = theRep+bStr.AsString.UCase++"base height of"++datum.asString +nl+
"Planimetric Area = " + area.SetFormat("d.ddd").asString+nl+
"Surface Area = " + sarea.SetFormat("d.ddd").asString+nl+
"Volume = " + volum.SetFormat("d.ddd").asString+nl+nl
end
MsgBox.Report(theRep,"Area and Volume Statistics")
Gespeichert von Novosibirsk am Fr., 15.12.2006 - 15:33
PermalinkIch habe sonst noch sowas in der Art unter http://arcscripts.esri.com/details.asp?dbid=14349 gefunden. Hab es sebler noch nicht ausprobiert. Dennoch wirkt das gepostete AvenueScript besser aus mich.
Gespeichert von Maxilla am Mo., 18.12.2006 - 11:18
PermalinkGenau das ist es, was mir in ArcGIS am meisten fehlt: der Zugriff auf den Basic-Code.
Gruß von Mx.
Gespeichert von Novosibirsk am Mo., 18.12.2006 - 19:09
PermalinkAls erstes waere ein Uebrblick ueber die Moeglichkeiten sinvoll, damit ich mich fuer eine Richtung entscheiden kann (Avenue, VB, Python etc.)
Dann waeren praktische Tutorials oder aehnliches ganz gut. Gibt es sowas im I-Net oder ein gutes Buch, welches Du mir empfehlen kannst?