Hallo,
wie kann ich das Rechteck für jedes Polygon eines Themas (links unten/ rechts oben-Koordinaten) ermitteln und in die jeweilige Zeile der Tabelle schreiben?
Gibt es eine Extention oder eine Berechnung dazu?
Gruß
Ralph
wie kann ich das Rechteck für jedes Polygon eines Themas (links unten/ rechts oben-Koordinaten) ermitteln und in die jeweilige Zeile der Tabelle schreiben?
Gibt es eine Extention oder eine Berechnung dazu?
Gruß
Ralph
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Johannes Brinkmann am Di., 10.02.2004 - 08:53
Permalink[Shape].ReturnExtent könnte die Lösung sein. Suchst Du vielleicht danach. Die Berechnung liefert ein Rect, das Du mit GetBottom, GetHeight usw. auseinanderpflücken kannst.
Grüße
Johannes
Gespeichert von Ralph Kuetemeier am Di., 10.02.2004 - 09:33
Permalinkdas ist eine gute Idee, nur wie greife ich in einer Schleife über alle Datensätze der Tabelle auf das Shape zu?
ShpFeld=TheFtab.findfield("Shape")
For each ...
Rechteck=ShpFeld.ReturnExtent ==> klappt nicht
Rechteck=Shape.ReturnExtent ==> klappt auch nicht
da habe ich wohl noch einen Denkfehler. Mir sind die Stukturen in Avenue auch nicht klar.
Gruß
Ralph
Gespeichert von Juergen Evert am Di., 10.02.2004 - 10:16
PermalinkJohannes' Ansatz ist schon richtig.
Du brauchst erst einmal 4 Zahlenfelder in der Tabelle, die die Werte für die beiden Koordinatenpaare aufnehmen.
Die Werte ermittelst du durch Abfragen des Rechtecks.
unten= ShpFeld.ReturnExtent.GetBottom
links= ShpFeld.ReturnExtent.GetLeft
rechts= ShpFeld.ReturnExtent.GetRight
oben= ShpFeld.ReturnExtent.GetTop
Mit setvalue werden sie dann in die entsprechenden Felder eingetragen.
Bsp.
Theftab.seteditable(true)
For each rec in TheFtab
unten= ShpFeld.ReturnExtent.GetBottom
links= ShpFeld.ReturnExtent.GetLeft
rechts= ShpFeld.ReturnExtent.GetRight
oben= ShpFeld.ReturnExtent.GetTop
Theftab.setvalue(TheFtab.findfield("Links"), rec, links)
...
end
Theftab.seteditble(false)
Gruß Jürgen
Gespeichert von Ralph Kuetemeier am Di., 10.02.2004 - 12:53
Permalinkvielen Dank für deinen Tip, aber irgendwie will das bei mir nicht klappen - ist auch mein erstes Anvenue-Script...
Ich habe das Script angehängt mit dem ich folgende Fehlermeldung bekomme:
Das Objekt Field kann die Anforderung ReturnExtent nicht erkennen. Er bleibt bei dem ersten ReturnExtent hängen.
TheFtab=av.getactivedoc.getactivethemes.get(0).getftab
ShpFeld=TheFtab.findfield("Shape")
unten=Field.make("Unten",#FIELD_LONG ,8,0)
links=Field.make("Links",#FIELD_LONG ,8,0)
rechts=Field.make("Rechts",#FIELD_LONG ,8,0)
oben=Field.make("Oben",#FIELD_LONG ,8,0)
Theftab.seteditable(true)
Theftab.addfields({Unten, Links, Rechts, Oben}) 'Felder hinzufügen
For each rec in TheFtab
unten=ShpFeld.ReturnExtent.GetBottom
links=ShpFeld.ReturnExtent.GetLeft
rechts=ShpFeld.ReturnExtent.GetRight
oben=ShpFeld.ReturnExtent.GetTop
Theftab.setvalue(TheFtab.findfield("Unten"), rec, unten)
Theftab.setvalue(TheFtab.findfield("Links"), rec, links)
Theftab.setvalue(TheFtab.findfield("Rechts"), rec, rechts)
Theftab.setvalue(TheFtab.findfield("Oben"), rec, oben)
end
Theftab.seteditble(false)
Gruß Ralph
Gespeichert von Juergen Evert am Di., 10.02.2004 - 13:38
PermalinkDas Beispiel war etwas zu schnell abgeschickt. In dieses winzigen Eingabefenster Code zu schreiben muss ich mit einfach abgewöhnen.
Die Felder würde ich nicht im Script erstellen, sonst würde er bei jedem Durchlauf versuchen, die gleichen Felder zu erstellen. falls es doch im Code stehen soll müsste geprüft werden, ob die Felder schon existieren.
hier die verbesserten Codezeilen:
For each rec in TheFtab
unten=theftab.returnvalue(ShpFeld.ReturnExtent.GetBottom ,rec)
links= theftab.returnvalue(ShpFeld.ReturnExtent.GetLeft ,rec)
rechts= theftab.returnvalue(ShpFeld.ReturnExtent.GetRight ,rec )
oben= theftab.returnvalue(ShpFeld.ReturnExtent.GetTop ,rec)
Theftab.setvalue(TheFtab.findfield("Unten"), rec, unten)
Theftab.setvalue(TheFtab.findfield("Links"), rec, links)
Theftab.setvalue(TheFtab.findfield("Rechts"), rec, rechts)
Theftab.setvalue(TheFtab.findfield("Oben"), rec, oben)
end
Theftab.seteditble(false)
Gruß
Jürgen
Gespeichert von Ralph Kuetemeier am Di., 10.02.2004 - 16:12
Permalinkdas haut bei mir irgendwie nicht hin. Ich bekomme immer noch den Fehler "Das Objekt Field kann die Anforderung ReturnExtent nicht erkennen". Was mache ich falsch????
TheFtab=av.getactivedoc.getactivethemes.get(0).getftab
ShpFeld=TheFtab.findfield("Shape")
Theftab.seteditable(true)
For each rec in TheFtab
unten=TheFtab.returnvalue(ShpFeld.ReturnExtent.GetBottom ,rec)
links=TheFtab.returnvalue(ShpFeld.ReturnExtent.GetLeft ,rec)
rechts=TheFtab.returnvalue(ShpFeld.ReturnExtent.GetRight ,rec )
oben=TheFtab.returnvalue(ShpFeld.ReturnExtent.GetTop ,rec)
TheFtab.setvalue(TheFtab.findfield("Unten"), rec, unten)
TheFtab.setvalue(TheFtab.findfield("Links"), rec, links)
TheFtab.setvalue(TheFtab.findfield("Rechts"), rec, rechts)
TheFtab.setvalue(TheFtab.findfield("Oben"), rec, oben)
end
Theftab.seteditble(false)
Gruß Ralph
Gespeichert von Gast am Di., 10.02.2004 - 17:32
Permalinkso schlecht ist die Fehlermeldung doch gar nicht: Du sendest die Anforderung ReturnExtent an ein Field, solltest (und willst) sie aber an ein Shape senden. Sehen wir mal nach: 'ShpFeld.ReturnExtent' und shpFeld = TheFtab.findfield("Shape").
Du musst Dir zuerst aus dem Shape-Feld das Shape rausholen, das hat Jürgen verdreht (wahrscheinlich liegt's an diesem furchtbar kleinem Eingabefenster!!!! ;-):
unten=TheFtab.ReturnValue(ShpFeld ,rec).ReturnExtent.GetBottom
Jörg Thomsen - MapMedia
- in der letzten Zeitel fehlt ein a in setEditable
Gespeichert von Johannes Brinkmann am Di., 10.02.2004 - 19:07
Permalinkich würde das mit dem Calculator machen.
Vier Felder (unten, oben, rechts, links) anlegen, dann jeweils berechnen.
unten = [Shape].ReturnExtent.GetBottom
oben = [Shape].ReturnExtent.GetTop
rechts = [Shape].ReturnExtent.GetRight
links = [Shape].ReturnExtent.GetLeft
Grüße
Johannes
Gespeichert von Juergen Evert am Mi., 11.02.2004 - 07:11
PermalinkIch hab wohl gestern nen schlechten Tag gehabt. Nun sollte es klappen.
unten=TheFtab.returnvalue(ShpFeld,rec).ReturnExtent.GetBottom
links=TheFtab.returnvalue(ShpFeld,rec) .ReturnExtent.GetLeft
rechts=TheFtab.returnvalue(ShpFeld,rec ).ReturnExtent.GetRight
oben=TheFtab.returnvalue(ShpFeld,rec).ReturnExtent.GetTop
Gruß Jürgen
Gespeichert von Ralph Kuetemeier am Mi., 11.02.2004 - 07:23
Permalinkkappt jetzt einwandfrei - vielen Dank!
Gruß Ralph