Polygonrechteck ermitteln

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
Hallo Ralph,
[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
Hallo Johannes,

das 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
Hallo Ralph,

Johannes' 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
Hallo Jürgen,

vielen 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
hallo ralph,

Das 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
Hallo Jürgen,

das 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
Hallo Ralph,

so 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
Also, ich weiß ja nicht ob schon alles gelöst wurde,
ich 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
Hallo Ralph,

Ich 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
Hallo Jörg, Johannes und Jürgen,

kappt jetzt einwandfrei - vielen Dank!

Gruß Ralph