PolyLineM erstellen

Welche Alternative gibt es denn zum Skript m_abschn.ave, um ein normales Linienthema in ein PolyLineM-Shape umzuwandeln.
Das genannte Skript erzeugt zwar ein PolylineM-Shape, allerdings gibt es damit dann Probleme bei der Stationierung.
Wenn du in der AV-Hilfe auf PolylineM (Class) gehst und dort 'Example' anklickst, erscheint ein Skript zur Erstellung eines PolylineM-Themas. Ist das vielleicht ein anderes, als das von dir genannte?
Danke werde ich gleich nachschauen.

Ich habe es zwischenzeitlich auch mit Edittools versucht. ET fragt folgende Felder ab.

- Select M field
- Select ID field defining a single polyline
- Select Order field

Die beiden letzteren sind klar. Ich gebe an welche Punkte alles zu einer Linie zusammengefasst werden sollen und in welcher Reihenfolge.
Was genau muss aber das M field enthalten?
Kannst du bitte das Skript hier rein kopieren? Ich bin nicht sicher, ob ich das gefunden habe, was du meinst. Für mich sieht es nur nach einzelnen Bausteinen aus.

Den Punkt PolylineM (Class) und Example gibt es bei mir in der deutschen Hilfe so nicht.


Das ist übrigends das o.g. Skript:

'-- Dieses Script (Zusammengesetzt aus Code der ArcScripts und aus dem ANUVA-Forum)
'-- macht aus dem obersten, aktiven Linienthema (Polyline) eine neue PolylineM.
'-- Es ignoriert Selektionen auf bestimmte Datensätze.
'-- Danach erfolgt eine Abfrage, in wie lange Abschnitte das neue PolylineMThema unterteilt werden soll.
'-- Ein weiteres neues Thema mit der Unterteilung in Abschnitte wird dann generiert.

'-- Get the active theme ...
theView = av.GetActiveDoc

theCount = theView.GetActiveThemes.Count
If (theCount = 0) then
msgbox.info("There is no active theme to process.","No active theme...")
exit
End

theTheme = theView.GetActiveThemes.Get(0)
theFtab = theTheme.GetFtab
theClassName = theFtab.GetShapeClass.GetClassName.AsString

'-- Only proceed with the active theme if it is PolyLine ...

If (theClassName = "PolyLine") then
theFieldList = theFtab.GetFields.Clone
theShapeField = theFtab.FindField("shape")

'-- Create a new shapefile with fields ...

theNewShapefile = Filedialog.Put("*.shp".AsFilename,"*.shp",
"Bitte geben Sie einen neuen Namen für ein 'Zwischenschritt'-Thema ein")
If (theNewShapefile = nil) then
exit
End

theNewFtab = Ftab.MakeNew(theNewShapefile,PolyLineM)

theNewFtab.StartEditingWithRecovery

'-- Populate the new shapefile with Fields ..


theFieldList.RemoveObj(theShapeField)

'-- ignore the shape field

theFieldCount = theFieldList.Count - 1
theNewShapeField = theNewFtab.FindField("shape")
theNewFieldList = theFieldList.DeepClone
theNewFtab.AddFields(theNewFieldList)

'-- Convert the PolyLines to PolyLineMs and add the measures ...


For each rec in theFtab
theShape = theFtab.ReturnValue(theShapeField,rec)
theShapeM = theShape.AsPolyLineM

'-- Get the attributes back ...

theNewRecnum = theNewFtab.AddRecord
theNewFtab.SetValue(theNewShapeField,theNewRecnum, theShapeM)

For each fld in (0..theFieldCount)
theVal = theFtab.ReturnValue(theFieldList.Get(fld),rec)
theNewFtab.SetValue(theNewFieldList.Get(fld),theNe wRecnum,theVal)

End

End

'-- For each rec...
Else

'-- If the current theme is not a PolyLine theme ...

msgbox.info (theTheme.GetName+" is a "+theClassName.AsString+" theme is not a PolyLine theme.", theTheme.GetName+" is not a PolyLine theme")
exit
End
'-- If (theClassName = "PolyLine") ...

theNewFtab.StopEditingWithRecovery(true)

'-- Add the new shapefile to the view if the user wants...

If (MsgBox.YesNo("Add shapefile as theme to the view?",
"Convert to Shapefile",true)) then
newFtheme = Ftheme.Make(theNewFtab)
theView.Addtheme(newFtheme)
newFtheme.Setvisible(true)

End


sh = theNewFtab.findfield("shape")
id = theNewFtab.findfield("ID")
if(id = 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 = Filedialog.Put("*.shp".AsFilename,"*.shp",
"Bitte geben Sie einen Neuen Namen für das Abschnitte-Shape ein")
If (neuer_name = nil) then
exit
End



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 theNewFtab
polyM_Line = theNewFtab.ReturnValue(sh,satz)
polyM_Line.SetMASLength
m_id = theNewFtab.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).asmu ltipoint.aslist
neue_PolyLineM = PolyLineM.Make({liste_MPunkte})
Rec = neues_thema_dat.AddRecord
neues_thema_dat.SetValue(M_shape,Rec,neue_PolyLine M)
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)
av.getActiveDoc.Addtheme(neues_thema)
neues_thema.setactive(true)
neues_thema.setvisible(true)
Das M-Feld enthält den 'Measure'-Wert, der in die Geometrie übernommen werden soll (z.B. Distanz oder Zeit).

Wenn das bei dir in der Hilfe nicht angezeigt wird, hast du vermutlich keinen 3D- oder Network-Analysten, oder?

Hier das Skript:

'This is a simple script that will convert a PolyLine theme to a PolyLineM
'theme. The measures will not be explicitly set and will, therefore, all be
'Null Numbers. You can use the field calculator along with requests such as
'SetMAsLength to add measure values.

'You can add this script to a button in the View as a CLICK script. Only
'the first active theme will be processed. The active theme must be PolyLine.

'Any selected set will be ignored by this script.
'Get the active theme ...

theView = av.GetActiveDoc
theCount = theView.GetActiveThemes.Count
If (theCount = 0) then
msgbox.info("There is no active theme to process.","No active theme...")
exit
End
theTheme = theView.GetActiveThemes.Get(0)
theFtab = theTheme.GetFtab
theClassName = theFtab.GetShapeClass.GetClassName.AsString

'Only proceed with the active theme if it is PolyLine ...

If (theClassName = "PolyLine") then
theFieldList = theFtab.GetFields.Clone

theShapeField = theFtab.FindField("shape")

'Create a new shapefile with fields ...

theNewShapefile = Filedialog.Put("*.shp".AsFilename,"*.shp",
"Enter new shapefile name for "+theTheme.GetName)
If (theNewShapefile = nil) then
exit
End
theNewFtab = Ftab.MakeNew(theNewShapefile,PolyLineM)
theNewFtab.StartEditingWithRecovery
'Populate the new shapefile with Fields ..

theFieldList.RemoveObj(theShapeField) 'ignore the shape field

theFieldCount = theFieldList.Count - 1
theNewShapeField = theNewFtab.FindField("shape")
theNewFieldList = theFieldList.DeepClone
theNewFtab.AddFields(theNewFieldList)

'Convert the PolyLines to PolyLineMs and add the measures ...

For each rec in theFtab
theShape = theFtab.ReturnValue(theShapeField,rec)
theShapeM = theShape.AsPolyLineM

'Get the attributes back ...

theNewRecnum = theNewFtab.AddRecord
theNewFtab.SetValue(theNewShapeField,theNewRecnum, theShapeM)

For each fld in (0..theFieldCount)
theVal = theFtab.ReturnValue(theFieldList.Get(fld),rec)
theNewFtab.SetValue(theNewFieldList.Get(fld),theNe wRecnum,theVal)
End
End 'For each rec...
Else 'If the current theme is not a PolyLine theme ...
msgbox.info (theTheme.GetName+" is a "+theClassName.AsString+" theme,
not a PolyLine theme.", theTheme.GetName+" is not a PolyLine theme")
exit
End 'If (theClassName = "PolyLine") ...
theNewFtab.StopEditingWithRecovery(true)

'Add the new shapefile to the view if the user wants...

If (MsgBox.YesNo("Add shapefile as theme to the view?",
"Convert to Shapefile",true)) then
newFtheme = Ftheme.Make(theNewFtab)
theView.Addtheme(newFtheme)
newFtheme.Setvisible(true)
End
Vielen Dank. Nein ist nicht installiert. Läuft das Skript nur mit? Es bringt bei mir den Fehler "Unbekanntes Objekt: theNe"


"Das M-Feld enthält den 'Measure'-Wert, der in die Geometrie übernommen werden soll (z.B. Distanz oder Zeit)."

Was genau ist damit gemeint? Wenn ich ein Punkteshape habe, dann ist die Distanz doch schon durch die Lage der Punkte vorgegeben? Oder sind damit die Intervalle gemeint?
Die Fehlermeldung beruht auf dem überflüssigem Leerzeichen hinter theNe. Bitte entfernen. In der Zeile msgbox.info (theTheme.GetName+" is a ... ... noch den Zeilenumbruch entfernen.

Hier ein Ausschnitt aus der Hilfedatei zum Thema Maßeinheiten (Measures):

GIS-Systeme stellen raumbezogene Informationen oft mit Hilfe eines zweidimensionalen X,Y-Koordinatensystems dar. Dies bietet sich für die Darstellung von Grenzen, Gewässern und Straßen an. Andere Systeme zur Darstellung von Daten speichern Informationen anhand von linearen Objekten. Anstelle der Verwendung von X,Y-Koordinaten vereinfachen diese Systeme die Aufzeichnung von Daten im Feld, indem sie eine einzige relative Position benutzen. Dieses alternativ zu verwendende Maßsystem kann Entfernung, Zeit, Adresse oder irgendein anderes Ereignis an einem bestimmten Punkt entlag eines linearen Objekts darstellen. Eine Maßeinheit kann daher definiert werden als "Wert, der einen bestimmten Standort entlang eines linearen Objektes" definiert.

Obwohl viele Anwendungen Maßeinheiten zur Darstellung von größer werdenden linearen Entfernungen entlang einer Linie verwenden, können die Werte der Maßeinheiten willkürlich erhöht bzw. gesenkt werden oder gleich bleiben. In besonderen Fällen kann es sein, daß bestimmte Punkte entlang eines linearen Objektes überhaupt keinen Wert einer Maßeinheit aufweisen. In diesem Fall wird ein Null-Zahlenwert (oder 'NIL') anstelle einer Maßeinheit verwendet. Wenn irgendeine Form der Analyse zur Bestimmung der Maßeinheit zwischen (i) einer Maßeinheit und einem Nullwert oder (ii) zwei Null-Maßeinheiten verwendet wird, wird NULL zurückgegeben. Lineare Interpolation kann jedoch dazu verwendet werden, um Nullwerte in Maßeinheitswerte zu verwandeln.

Der Wert einer Maßeinheit ist unabhängig vom Koordinatensystem eines Shapes. Die X,Y-Koordinate eines Punktes könnte (529482,5109382) sein, wohingegen die Maßeinheit 206 ist. In diesem Zusammenhang ist darauf hinzuweisen, daß bei geographischen Daten Koordinaten in Form von Längen- und Breitengraden gespeichert werden. Im Gegensatz zu einem planaren Koordinatensystem sind die Abmessungen in einem geographischen Koordinatensystem nicht konstant. Längenberechnungen sind z. B. nicht immer korrekt.

Warum sollte man Maßeinheiten verwenden? Dynamische Segmentierung!

Der vielleicht wichtigste Vorteil von Maßeinheiten ist der, daß sie die Abbildung von Daten ermöglichen, die geographische Standorte enthalten, aber nicht im Format Raumbezogene Daten vorliegen. Diese Standorte werden als Ereignisse bezeichnet. Die Positionierung von Ereignissen entlang linearer Objekte ist Teil dessen, was als Dynamische Segmentierung. bezeichnet wird.
Vielen Dank, das Skript funktioniert jetzt. Allerdings mit dem gleichen Ergebnis.