ArcView: Beschriftungen ersetzen

GISWiki - Das freie Portal für Geoinformatik (GIS)
Wechseln zu: Navigation, Suche

Ich bitte um Vorsicht!

Das Ersetzen der Label funktioniert nur dann vernuenftig, wenn die Beschriftungen eindeutig sind!! Ich versuche das demnächst abzufangen!

Johannes Brinkmann, 19.12.2003

' HGraphic.ReplaceLabel
' 
' Title: ersetzt die Beschriftungen in einem view
' 
' Topics: Beschriftungen/Labels
' 
' Description: mit diesem Skript können Label
' ausgestauscht werden. Dazu müssen die neu zu
' vergebenden Label in einer neuen Spalte stehen.
' 
' Problems: bei verschiedenen gelabelten Themen gerät es durcheinander!!
' keine Ahnung, warum!
' es giebt kein richtiges Fehlerabfangen
' Das Ersetzen der Label funktioniert nur dann
' vernuenftig, wenn die Beschriftungen eindeutig sind
' 
' Requires: das zu beschriftende Thema muss aktiv sein
' 
' Self:
' 
' **********************************************************
' Author: Johannes Brinkmann 01.12.03
' Address: Plan-Zentrum Umwelt, Bahnhofstr. 64, 44623 Herne
' **********************************************************
' 
' Changes: 


' allgemeines Zeugs
theView = av.GetActiveDoc
theTheme = theView.GetActiveThemes.Get(0)
theFTab = theTheme.GetFTab
theBitmap = theFTab.GetSelection
theBitmap.ClearAll
FldLst = {}

for each fld in theFTab.GetFields
  if (fld.IsTypeShape = FALSE) then
    FldLst.Add(fld)
  end
end

' auswählen
Fld1 = MsgBox.ChoiceAsString(FldLst, "zu ersetzen",theTheme.GetName)
if (Fld1 = Nil) then Return Nil end
FldLst.RemoveObj(Fld1)
Fld2 = MsgBox.ChoiceAsString(FldLst, "ersetzen durch",theTheme.GetName)
if (Fld2 = Nil) then Return Nil end

allGraphicsLst = theView.GetGraphics
allGraphicsLst.SelectAll
if (allGraphicsLst.Count = 0) Then Return Nil  end
allGraphicsLst.UnselectAll
GrphTxtLst = allGraphicsLst.FindAllByClass(GraphicText)

' Liste mit Labels erstellen
i = 0
gStrLst ={}
gStrXChLst ={}
replStr = ""
for each g in GrphTxtLst
  g = GrphTxtLst.Get(i)
  gStr = g.getText

  ' je nach Feldtyp braucht man unterschiedliche query strings
  if (Fld1.IsTypeString = TRUE) then
    expr = "[[[["+Fld1.AsString+"]] = "+gStr.Quote
  elseif (Fld1.IsTypeNumber = TRUE) then
    expr = "([[[["+Fld1.AsString+"]] = "+gStr+")"
  end

  theFTab.Query(expr, theBitmap,#VTAB_SELTYPE_NEW)
  theFTab.UpdateSelection

  ' suchen - ersetzen
  for each rec in theFTab.GetSelection
    tbreplStr = theFTab.ReturnValueString(Fld1, rec)
    replStr = theFTab.ReturnValueString(Fld2, rec)
    g.SetText(replStr)
  end

  gStrLst.Add(gStr)
  gStrXChLst.Add(replStr)

i = i + 1

end

if (replStr = "") then
  MsgBox.Info("Nichts ausgetauscht! Wurde das richtige Labelfeld ausgewählt?","Fehler")
  Return Nil
end

theBitmap.ClearAll