Hallo, ich möchte mit Arc View Linien in einzelne Segmente unterteilen, die alle gleich lang sind. Nun ist im Arc View Kochbuch ein Script abgebildet, dass man dazu benutzten kann in einer hoplahopp Aktion habe ich dann versucht mir schnell mal die Grundlagen von Avenue anzueignen und das Programm geschrieben. Nun wollte ich das Script ausführen (dabei war das entsprechende View und das entsprechende Thema geöffnet) und dabei wurden folgende Laufzeitfehler gemeldet:
Das Projekt kann die Anforderung findtheme nicht erkennen
und dann gabs noch probleme mit getftab.
Was hab ich falsch gemacht?
Das Projekt kann die Anforderung findtheme nicht erkennen
und dann gabs noch probleme mit getftab.
Was hab ich falsch gemacht?
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Gast am Mo., 12.09.2005 - 07:39
Permalinkkannst du bitte mal das Scipt posten,
damit man auch sieht was du eventuell falsch gemacht hast?
So ohne, ist das wirklich schwer zu beurteilen :-)
Gruß
Bernd
Gespeichert von Maxilla am Mo., 12.09.2005 - 09:03
PermalinkGlaube, das ist eindeutig: Du hast das Skript auf das Projektfenster angewendet! Tue folgendes:
- Öffne das Skript-Fenster
- Öffne das View Fenster
- Stelle die Fenster so nebeneinander, dass du beide sehen kannst
- Aktiviere das Viewfenster
- Aktiviere von dort aus direkt das Skriptfenster
- Jetzt drücke "Ausführen"...
Gespeichert von Joerg Dorschfeldt am Mo., 12.09.2005 - 14:14
PermalinkGespeichert von Joerg Dorschfeldt am Mo., 12.09.2005 - 14:25
PermalinkScript zum erstellen einer Polyline_M und zum Teilen dieser in gleichgroße Segmente mit einer gewünschten Länge
Skript 1
Polyline_M
Text:
aktives_view = av.getActiveDoc
auswahl_thema = aktives_view.findtheme("Nebelbachkanal.shp")
if (auswahl_thema = nil) then exit end
auswahl_thema_dat = auswahl_thema.getftab
sh = auswahl_thema_dat.findfield("shape")
id =auswahl_thema_dat.findfield("ID")
neues_thema = aktives_view.findtheme("Nebelbachkanal_M.shp")
if (neues_thema = nil)
then
neuer_name = "Nebelbachkanal_M.shp".asFileName
neues_thema_dat = FTab.MakeNew(Neuer_name,PolylineM)
neues_thema_dat.AddFields({Field.Make("ID",#FIELD_DECIMAL,6,0)})
M_shape = neues_thema_dat.FindField("shape")
neue_id = neues_thema_dat.FindField("ID")
neues_thema_dat.SetEditable(True)
for each satz in auswahl_thema_dat
pliste = auswahl_thema_dat.ReturnValue(sh,satz).asmultipoint.aslist
m_id = auswahl_thema_dat.ReturnValue(id,satz)
liste_MPunkte = {}
for each punkt in pliste
m = punkt@0
liste_MPunkte.add(m)
end
neue_PolyLineM = PolyLineM.Make({liste_MPunkte})
Rec = neues_thema_dat.AddRecord
neues_thema_dat.SetValue(M_shape,Rec,neue_PolyLineM)
neues_thema_dat.SetValue(neue_id,Rec,m_id)
end
neues_thema_dat.SetEditable(False)
neues_thema = FTheme.Make(neues_thema_dat)
aktives_view.AddTheme(neues_thema)
end
neues_thema.SetVisible(TRUE)
neues_thema.SetActive(TRUE)
r = rect.makeempty
r = r.unionwith(neues_thema.returnextent)
aktives_view.getdisplay.setextent(r.scale(1.1))
menue_liste = {"1 gleichmäßige Teilung","2 Längenvorgabe","0 Ende"}
menue=msgbox.choiceasstring(menue_liste,"Auswahl : ","Wie geht es weiter?").aslist
if(menue.get(0) = "0")then exit end
if(menue.get(0) = "1")
then
av.run("teilung","")
else
av.run("vorgabe","")
end
Skript 2
Vorgabe
Text:
aktives_view = av.getActiveDoc
auswahl_thema = aktives_view.findtheme("Nebelbachkanal_M.shp")
auswahl_thema_dat = auswahl_thema.getftab
sh = auswahl_thema_dat.findfield("shape")
id = auswahl_thema_dat.findfield("ID")
if(auswahl_thema = nil) then exit end
frage="Wie lang sollen die Teilabschnitte sein?"
eing=msgbox.input(frage,"Eingabe","0")
if((eing="0")or(eing=nil))then exit end
neuer_name = "Nebelbachkanalabschn.shp".asFileName
neues_thema_dat = FTab.MakeNew(Neuer_name,PolylineM)
neues_thema_dat.Addfields({Field.Make("ID",#FIELD_DECIMAL,6,0)})
M_shape = neues_thema_dat.FindField("shape")
neue_id = neues_thema_dat.FindField("ID")
neues_thema_dat.SetEditable(True)
t_lang=eing.asnumber
for each satz in auswahl_thema_dat
polyM_Line = auswahl_thema_dat.ReturnValue(sh,satz)
polyM_Line.SetMASLength
m_id = auswahl_thema_dat.ReturnValue(id,satz)
lang=polyM_Line.returnlength
anz=(lang/t_lang + 0.5).round
von=0
bis=t_lang
for each t in 1..anz
liste_MPunkte=polyM_Line.lineEvent(von,bis,0).asmultipoint.aslist
neue_PolyLineM = PolyLineM.Make({liste_MPunkte})
Rec = neues_thema_dat.AddRecord
neues_thema_dat.SetValue(M_shape,Rec,neue_PolyLineM)
neues_thema_dat.SetValue(neue_id,Rec,m_id)
von=bis
if((von+t_lang) > lang)
then
bis=lang
else
bis=t_lang * (t+1)
end
end 'ende der iterativen schleife alle teilstücke
end 'ende der iterativen schleife alle polylines
neues_thema_dat.SetEditable(False)
neues_thema = FTheme.Make(neues_thema_dat)
aktives_view.Addtheme(neues_thema)
neues_thema.setactive(true)
neues_thema.setvisible(true)
auswahl_thema.setactive(false)
auswahl_thema.setvisible(false)
Gespeichert von uwelangehh am Mo., 12.09.2005 - 19:50
Permalink> Weiß jemand wohin man solche skripte zur allgemeinen Verfügbarkeit stellen kann?
Du kannst deine Skripte zu einer Erweiterung bündeln (meineTools.avx). Die resultierende AVX-Datei müsste dann zentral abgelegt werden und für jeden Nutzer müsste die Datei default.apr um eine Funktion zum Laden der Erweiterung ergänzt werden. Danach kannst du die Erweiterung weiter zentral pflegen.
Gruß
Uwe
Gespeichert von Joerg Dorschfeldt am Mi., 14.09.2005 - 19:41
PermalinkGespeichert von Gast am Di., 25.10.2005 - 11:31
PermalinkDeine Skripte würde ich gern verwenden, nur läuft das so nicht.Bei mir ein Streckenwirrwarr, was man kaum verwenden kann.
Den Shapenamen habe ich angepaßt, aber welches Skript heißt jetzt "teilung" und welches "vorgabe"? Was muß in der Spalte ID stehen? Was könnte ich sonst falsch machen?
Dank+Gruß
gisi
Gespeichert von HeinzJ am Do., 27.10.2005 - 09:32
PermalinkIm GISWiki kannst Du auch Scripte posten
http://www.giswiki.de
Grüße, Heinz