Hallo,
ich habe folgendes Problem, bei dem ich trotz einiges investierter Zeit, bisher noch zu keiner Lösung gekommen bin.
Ich habe einen Rasterlayer, den ich in einen Polygon Vektor Layer umgewandelt habe. Dort müsste ich nun die relativen Maximas abfragen. Sprich, ich hab in unterschiedlichen Teilen des Layers Peaks, die nicht die höchsten Werte insgesamt darstellen müssen, sondern ich will immer nur die "Bergspitzen" abfragen. D.h. wenn ich Werte von 0-5 für die Polygone habe, ist einmal die Bergspitze 5, also der höchste Werte, was ansich ja nicht schwierig abzufragen ist, im anderen Teil des Layers aber 4 oder gar nur 3, dafür dürfen andere Polygone mit 4 oder 3 nicht ausgewählt werden.
Theoretisch müsste die Abfrage lauten:"Nenn mir alle Polygone, deren Nachbarpolygone kleiner sind", sodass ich nur die "Bergspitzen" raus bekommen. In meiner Attributetabelle habe ich noch Werte für die Flächengröße der Polygone und die mittlere Position der Polygone.
Mir fehlt nur ein Ansatz wie ich das abfragen kann. Ich habe mir alle möglichen Werkzeuge genauer angeschaut, mich mit SQL beschäftigt und mit ArcObjects. Ich komm allerdings nicht weiter.
Vielen Dank!
Mfg
ich habe folgendes Problem, bei dem ich trotz einiges investierter Zeit, bisher noch zu keiner Lösung gekommen bin.
Ich habe einen Rasterlayer, den ich in einen Polygon Vektor Layer umgewandelt habe. Dort müsste ich nun die relativen Maximas abfragen. Sprich, ich hab in unterschiedlichen Teilen des Layers Peaks, die nicht die höchsten Werte insgesamt darstellen müssen, sondern ich will immer nur die "Bergspitzen" abfragen. D.h. wenn ich Werte von 0-5 für die Polygone habe, ist einmal die Bergspitze 5, also der höchste Werte, was ansich ja nicht schwierig abzufragen ist, im anderen Teil des Layers aber 4 oder gar nur 3, dafür dürfen andere Polygone mit 4 oder 3 nicht ausgewählt werden.
Theoretisch müsste die Abfrage lauten:"Nenn mir alle Polygone, deren Nachbarpolygone kleiner sind", sodass ich nur die "Bergspitzen" raus bekommen. In meiner Attributetabelle habe ich noch Werte für die Flächengröße der Polygone und die mittlere Position der Polygone.
Mir fehlt nur ein Ansatz wie ich das abfragen kann. Ich habe mir alle möglichen Werkzeuge genauer angeschaut, mich mit SQL beschäftigt und mit ArcObjects. Ich komm allerdings nicht weiter.
Vielen Dank!
Mfg
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Rena am Fr., 27.06.2008 - 09:39
Permalinkdazu fällt mir als erstes die Frage ein, warum du einen Rasterlayer in einen Polygonlayer umgewandelt hast. Die gewünschte Berechnung geht mit Raster, aber ich wüsste nicht ob auch im Vektor.
Für Raster fallen mir folgende Vorgehensweisen ein:
1. mit den Spatial Analyst tools eine fokale Statistik rechnen. Dabei kann für ein festzugelegendes Umfeld der Rasterzelle (Anzahl der Rasterzellen oder festgelegte Entfernung) eine Statistik (Maximum) errechnet werden.
2. mit den Spatial Analyste tool eine zonale Statistik rechnen. Das geht aber nur, wenn du einen zweiten Layer (RAster oder Vektor) mit Zonenflächen hast, innerhalb derer jeweils das Maximum ermittelt werden soll.
Grüße
Rena
Gespeichert von Chris82 am Fr., 27.06.2008 - 13:20
Permalinkerstmal vielen Dank für deine Tipps!
Ich brauche die Daten später als Polygonlayer und hatte keine Methode gefunden gefunden um mit dem Rasterlayer meine gewünschte Abfrage zu erhalten.
In der Zwischenzeit habe ich allerdings eine Methode gefunden, die mich zumindest erstmal weiter gebracht hat und mit deinem Tipp Nr. 2 konnte ich mich meinem Endergebnis weiter annähern.
Ich habe folgendes gemacht: Mit (Spatial Analyst -->Surface -->Contour List) habe ich über mein Polygonlayer Polylines drüber gelegt, die von ArcGIS vorgegeben in den entsprechenden Polygonen liegen (wichtig für weiteres Vorgehen!!!). Beispiel ich hab Polygone mit Werten von 0 bis 5 und will jetzt immer die relativen Maximas ab 3 haben, so lege ich die Contour Polylines bis 3 fest. Danach mache ich eine Abfrage "Selected by Location" und wählen dann zuerst den Contourlayer mit den Polylines und dann "are completely within"(hier ist die Bedeutung für das "Wichtig" weiter oben) und meinen Polygonlayer. Bei dieser Abfrage erhalte ich nur die relativen Maximas. Problem ist hierbei, ich habe die Polylines Contouren, die in den eigentlich Polygonen liegen die ich haben will, sind also Polylines, die wenn man sie in Polygone wieder umwandeln würde eine kleinere Fläche hätten als die vorherigen Polygone. Nun habe ich deinen 2. Tipp mit der zonalen Statisik angewendet. Dort habe ich als Vektorlayer die abgefragten Polylines verwendet und als Raster Layer den Layer aus welchen ich meine Polygone erstellt habe, beide sind ja identisch. Dann erhalte ich einen Rasterlayer, wo genau meine gewünschten abgefragten Pixel entahlten sind, mit einem Haken und genau da liegt jetzt noch mein Problem! Die Pixel stellen nur eine Umrandung dar, weil ich ja den POLYLINELAYER verwendet habe. Wandel ich also den Rasterlayer wieder in Polygone um, hab ich Polygone mit einem Loch in der Mitte und die Fläche ist kleiner als im Originalpolygonlayer.
Ich bräuchte also nun nur noch ein Tool, welches mir Rasterlayer mit "Loch" oder Polylinelayer in vollständige Polygone umwandelt, die meinen Orignalen entsprechen.
Klingt irgendwie alles etwas sehr umständlich, aber so funktioniert zumindest meine Abfrage.
Gespeichert von Rena am Fr., 27.06.2008 - 15:09
Permalinkehrlich gesagt versteh ich deine Vorgehensweise überhaupt nicht. Vielleicht wären noch ein paar Infos zu deinem eigentlichen Vorhaben ganz hilfreich.
Deine bisherigen Annahmen klingen etwas seltsam: Du hast einen Polygonlayer mit Werten nur zwischen 0 und 5. Alles ab 3 soll schon ein Maxima sein? Wieso brauchst du überhaupt "Maxima" wenn du einfach alle Werte über 3 meinst?
Oder was heißt "Über Polygonlayer Polylines drüber gelegt, die von ArcGIS vorgegeben in den entsprechenden Polygonen liegen" ????
Und nochwas:
du kannst ja die Berechnungen zunächst im Raster machen, und dann erst die Ergebnisse in Polygone umwandeln.
Grüße Rena
Gespeichert von Chris82 am Fr., 27.06.2008 - 15:30
PermalinkDachte mir schon, dass meine Erklärung etwas schlecht verständlich ist.
Ich habe mir mal ein einfaches Beispiel ausgedacht.
Nehmen wir eine Deutschlandkarte (DGM). Dort kann man ja einfach alle Flächen über 2000m oder 1000m oder 500m auswählen. Entsprechnd sind in meiner Auswahl nur die höchsten Höhen der Alpen oder zusätzlich noch die Gipfellagen der Mittelgebirgen oder die mittleren Lagen der Mittelgebirge.
Ich will aber eine Abfrage machen, wo ich z.B. immer die Flächen der Gipfel, die bis 1000m hoch sind haben und dort die ersten 100 Höhenmeter. Zum Beispiel Zugspitzgipfel die Fläche von 2962m bis 2862m (100 Höhenmeter) und Feldberg/Schwarzwald 1493m bis 1392m die Fläche. Das soll in die Abfrage rein, aber raus fallen müssen irgendwelche x beliebige Flächen in den Alpen die 2000m hoch sind, die eben keinen Gipfel darstellen.
In meinem Fall handelt es sich um Niederschlagsradardaten, aber ich denke das Beispiel mit der Deutschlandkarte ist einfacher verständlich.
Mit oben genannter Vorgehensweise ist es mir ja auch gelungen die genannten Flächen abzufragen und zu isolieren, nur habe ich jetzt Rasterdaten, die bedingt durch die Polylinienabfrage in der Mitte umgangssprachlich ein "Loch" haben. Ich benötige aber wieder Polygonflächen, die der Flächengröße der Polygone vor meiner Abfrage entsprechen. Alles etwas kompliziert um das verständlich zu erklären :-(
Ich habe überlegt, Raster mit "Loch" in Polyline oder Polypunkte zu konvertieren und dann mit irgendeinem Tool aus Polypunkte wieder Polygone zu machen. Ich finde nur nirgends so ein Tool, aber eigentlich müsste es sowas doch geben, irgendwas was aus Linien oder Punkten, die einen Fläche umranden wieder ein Polygon machen.
Kann man hier Bilder hochladen, dann könnte ich ja mal ein Beispielbild zeigen.
Gespeichert von Chris82 am Fr., 27.06.2008 - 15:50
PermalinkIm ersten Bild sieht man meine eigentlichen Daten. Hier ein Polygonlayer, den ich aus einem Rasterlayer erzeugt habe.
http://img178.imageshack.us/my.php?image=test1cc7. jpg
Bild zwei zeigt die Polylines die ich drüber gelegt habe. Man sieht, dass die Linen innerhalb der Polygone verlaufen, deswegen funktioniert die Abfrage Selected by Location" und dann "are completely within". Dadurch werden die grauen Polylinie selektiert, welche die relativen Maximas darstellen. Sieht man ja schön, ganz links ist die lila der höchste Wert und unten rechts ist das leichte dunkelblau der höchste Wert und muss markiert werden.
http://img178.imageshack.us/my.php?image=test2hq2. jpg
Mit Hilfe der Zonalstatistik habe ich dann in Bild 3 die selektierten Polylines in Raster umgewandelt und den Rest des Bilds, welcher nicht gebraucht wird, raus geworfen. Nur haben die Raster eben jetzt das Loch und wenn ich diese Raster direkt in Polygone umwandele haben die eben auch das Loch und bestehen nur aus der Rasterumrandung, eigentlich ja auch logisch.
http://img502.imageshack.us/my.php?image=test3sw2. jpg
Eigentlich müsste man ja denken, die umständliche Vorgehensweise von mir, müsste mit einem Tool schnell gemacht sein, aber ich finde keins.
*Edit*
Das hat was mit den Pfaden nicht gestimmt, jetzt sollten die JPEGS funktionieren. Denke die Bilder sollten besser verständlich sein, als meine Erklärungen.
Gespeichert von Rena am Fr., 27.06.2008 - 16:46
PermalinkInsgesamt bleibts schwierig. Ich verstehe dich so, dass du zwei Polygonlayer hast: einen mit den Werten und einen mit den Zonen. Korrekt? Sonst würde ich den Satz "dass die Linen innerhalb der Polygone verlaufen" nicht verstehen. innerhalb welcher Polygone?
Aber ich bleibe dabei, die Aufgabe ist eine Rasteranalyse. Und zwar die zonale Statistik.
Um beim Beispiel zu bleiben: benötigst du nur die Kuppe des Feldberg als höchstem Berg in der "Zone" Schwarzwald (und als nächsten Gipfel die Zugspitze als höchster Punkt der "Zone" Alpen), oder ist quasi jeder Berg seine eigene Zone, und du benötigts jeweils die obersten 100 m? Die Zonen an sich zu ermitteln bzw. festzulegen erscheint mir viel schwieriger als die Berechnung der Maxima pro Zone.
Vielleicht kanns du irgendwie über die Neigung gehen. Maxima (leider auch Minima) haben ja theoretisch die Steigung 0. Wenn du also Neigung (slope) berechnest, könntest du die Werte nahe Null extrahieren. Das wären dann Maxima oder Minima. Über die zonale Statistik liessen sich die Maxima rausfiltern. so irgendwie...