Mehr

Kanalnetz generieren (Regenwasserabfluss) – welcher Algorithmus ist der beste?


Ich möchte DEM für ein ganzes Land berechnen (ca. 79 000 km²) und muss so viel hydrologisch korrekt wie möglich sein. Danach muss ich für dieses korrekte DEM die Entwässerungslinien des Oberflächenabflusses berechnen. Ich kann das 4G-Modell verwenden, das eine Wolke aus diskreten Punkten von 5 x 5 m ist. Aber das ist zweitrangig. Welchen Algorithmus soll ich verwenden, um das zu lösen?

An Beispieldaten habe ich TauDEM getestet, was ein wirklich gutes Werkzeug zu sein scheint, aber wenn es ein Raster mit Entwässerungslinien erstellen soll, hat das Ausgabe-Raster nur einen Wert (ganz schwarz). Ich habe es unter ArcGIS 10.2 und 9.3 (unter Win 7) ausprobiert. Beide waren gleich, erste Schritte OK, dann schwarzes Raster. Ich habe versucht, TauDEM in QGIS zu verwenden, aber es ist ein Fehler aufgetreten:

"Ooops! Die folgenden Ausgabeebenen konnten nicht geöffnet werden"…

Ich habe die Pfade zur Toolbox überprüft und alles war in Ordnung. Das nächste Tool, das ich ausprobiert habe, war die ArcHydro-Toolbox, aber dieses Tool scheint sehr ungenau zu sein.

Kennt jemand ein gutes Tool um Entwässerungsleitungen zu simulieren? Oder warum kann ich das mit TauDEM nicht?

BEARBEITEN: Als Endergebnis benötige ich ein Shapefile von Ablauflinien. Ich habe bereits einige, aber es gibt viele Fehler wie das Überkreuzen von Linien, Linien werden nicht am nächsten Segment eingerastet und so weiter. Jetzt versuche ich sie erneut ohne diese Fehler zu berechnen.

Beispiel für Ablauflinien:


Die Wahl des richtigen Algorithmus zur hydrologischen Korrektur eines DEM hängt wirklich von Ihrer speziellen Anwendung ab. Die DEM-Größe ist sicherlich ein Problem, wie Sie festgestellt haben. Wenn Sie ein massives DEM haben, gibt es nur wenige Algorithmen, die für Ihre Anwendung funktionieren. Eine weitere wichtige Überlegung ist, ob alle topografischen Vertiefungen in Ihrem DEM tatsächlich Artefakte sind oder nicht und ob eine der realen Vertiefungen, die sich in Ihrem DEM befinden können, für den zu modellierenden Prozess (in Ihrem Fall die Modellierung des Oberflächenflusses) von Bedeutung sind. . Wenn echte Features vorhanden sind und diese von Bedeutung sind, sollten Sie nach einer Möglichkeit suchen, diese Features in Ihrem DEM beizubehalten. Dann gibt es noch die Frage, ob Depressionen ausfüllen oder eine Depression durchbrechen. Es stellt sich heraus, dass, obwohl viele Algorithmen zum Füllen von Vertiefungen verfügbar sind, alle zur gleichen Lösung führen (siehe diese Frage). Wichtig ist, dass das Füllen von Senken fast immer zu weitaus größeren Auswirkungen auf das DEM führt (d. h. mehr Modifikationen der ursprünglichen Höhenwerte) als das Durchbrechen von Senken. Ich empfehle fast immer Lösungen, die Depressionen durchbrechen, anstatt zu füllen.

Nun also zum wirklich kniffligen Teil. Sie haben nach einem Tool gefragt, das Sie empfehlen können. Als vollständige Offenlegung bin ich der leitende Entwickler der Open-Source-GIS Whitebox Geospatial Analysis Tools. Whitebox GAT bietet mehrere Werkzeuge zum Entfernen von Vertiefungen in der DEM-Vorverarbeitungs-Toolbox, die in der Hydrological Tools-Toolbox enthalten ist. Es gibt zum Beispiel Tools, die den Planchon- und Darboux-Algorithmus implementieren, der für die Verwendung mit massiven DEMs geeignet ist, sowie den Füllalgorithmus von Wang und Liu (2006), der viel schneller ist, aber für massive DEMs nicht geeignet ist. Es enthält auch Tools zum Durchbrechen von Depressionen, was eine sehr gute Lösung für massive DEMs mit feiner Auflösung ist. Ich habe gerade ein Werkzeug geschrieben, das Depressionen sehr effizient durchbricht (so schnell wie der Wang- und Liu-Algorithmus), aber es ist nicht so geeignet für massive DEMs. Da gibt es also viele Möglichkeiten. Willkommen in den trüben Gewässern der DEM-Vorverarbeitung! Ich denke, viele Leute verwenden einfach jedes Werkzeug, das in ArcGIS verfügbar ist, ohne viel darüber nachzudenken, wie stark es die Ergebnisse der Analyse beeinflussen kann.

BEARBEITEN: Okay, wenn Sie nach Kanallinien suchen, gibt es wirklich zwei allgemeine Ansätze, um diese Aufgabe zu erfüllen. Der erste Ansatz besteht darin, einen morphologisch basierten Ansatz zu verwenden. Diese Techniken basieren auf den frühen Arbeiten von Peucker und Douglas (1975) und Johnston und Rosenfeld (1975) und basieren auf dem Auffinden von v-förmigen Profilen, einem Maß für die Schwellenkrümmung oder einer niedrigen topographischen Position. Sie haben den Vorteil, dass sie kein Auffüllen von Vertiefungen oder das Entfernen von flachen Bereichen erfordern und sie können sehr gut für hochgenaue, fein aufgelöste DEMs in Bereichen mit relativ hohem topografischem Relief arbeiten. Sie haben den Nachteil, dass sie nicht unbedingt kontinuierliche, einzellige Wide-Channel-Netzwerke erzeugen und daher eine erhebliche Nachbearbeitung erfordern. Sie können auch stark vom Umfang des Betriebs beeinflusst werden, wie die Auswirkungen von DEM-Glättungsfiltern zeigen. In Whitebox GAT finden Sie die Täler finden Reihe von Werkzeugen in der Stream Network Analysis-Toolbox, die verwendet werden können, um diese Art von Kanalzuordnung durchzuführen.

Der zweite allgemeine Ansatz basiert auf der Messung der bergaufwärts beitragenden Fläche. Diese Techniken gehen alle auf die Arbeit von O'Callaghan und Mark und den D8-Flow-Algorithmus zurück, obwohl es seitdem zahlreiche Studien gegeben hat. Die allgemeine Idee ist, dass Sie das DEM als Mittel zum Erkennen von Fließwegen und zum Messen der an der Steigung beitragenden Fläche verwenden können. In Wirklichkeit besteht die Bedeutung der bergaufwärts beitragenden Fläche darin, dass sie ein Surrogat für die Einleitung ist (je größer die Fläche, die zu einem Standort entwässert, desto größer ist die Wassermenge, die von dem Standort abgeführt wird). Während Einzugsgebiet und Abfluss für die meisten Einzugsgebiete recht gut korrelieren, handelt es sich im Allgemeinen um eine nichtlineare Beziehung. Da das DEM sowohl das Strömungsrichtungsproblem als auch das Upslope-Bereich/Abflussmaß behandelt, wird das Problem zu einem der Definition von Kanalköpfen, d. h. es handelt sich um ein Kanalinitiierungsproblem im Zusammenhang mit der Erosion von Oberflächenmaterialien. Im Allgemeinen finden wir dies einfach heraus, indem wir einen konstanten landschaftsinvarianten Schwellenwert auf die beitragende Gebietskarte anwenden, obwohl es eine ganze Reihe von Untersuchungen gibt, die zeigen, dass ein solcher konstanter Schwellenwert tatsächlich nicht existiert und dass er von lokalen Neigungen und Oberflächenmaterialien abhängt (siehe die Werk von Montgomery). Aus diesem Grund müssen Sie im Allgemeinen mit verschiedenen Schwellenwerten experimentieren, bevor Sie einen geeigneten finden. Wie auch immer, Sie können in Whitebox GAT einen der verschiedenen Strömungsführungsalgorithmen verwenden, die in der Toolbox Hydrologische Analyse verfügbar sind, um den Hangbereich zu messen. Denken Sie jedoch daran, dass diese Techniken das Entfernen von Vertiefungen und flachen Bereichen erfordern, um richtig zu funktionieren. Siehe auch die Streams extrahieren in der Toolbox Stream Network Analysis. Der Hauptvorteil dieser bereichsbasierten Verfahren besteht darin, dass sie kontinuierliche, einzellige Wide-Channel-Netzwerke erzeugen können, die einer Stream-Netzwerkanalyse zugänglich sind. Die Werkzeuge in der Toolbox Stream Network Analysis können verwendet werden, um alle Arten der analytischen Verarbeitung von aus DEMs extrahierten Raster-Stream-Netzwerken durchzuführen, einschließlich Stream-Klassifizierung und -Ordnung, Kanalneigungsanalyse, Profilkartierung, Identifizierung von Hauptkanälen usw. Wichtig für Sie, da ist ein Werkzeug namens Raster-Streams zu Vektor Dadurch wird Ihr Raster-Stream in ein Shapefile umgewandelt, das Sie dann für Anzeigezwecke verwenden können.


Genaue Definition der durchschnittlichen Zeitkomplexität?

Jetzt habe ich einen mathematischen Hintergrund und fand die Definition der CS-Leute der durchschnittlichen Zeitkomplexität ein bisschen. verwirrend, um es gelinde auszudrücken.

Hier ist eine Definition, mit der ich mich wohl fühle:

Betrachten Sie eine Menge $A$ von finiten Elementen, wobei jedes $ain A$ einzelne Eingabefälle angibt. Es existiert eine Funktion $T(a)mapsto tinmathbb$, d. h., Laufzeit für Einzelfälle. Jetzt können wir die durchschnittliche Laufzeit des Eingabesatzes einfach als $overline . definieren(A)=fracT(a)><#A>,$ wobei $#A$ für steht Anzahl der Elemente in $$. In QuickSort lassen wir beispielsweise $A_n=< ext>=mathbb^n$.

Aber jetzt müssen wir einen zusätzlichen Schritt tun. Eine ganze Zahl kann ein annehmen unendlich eine Menge von Werten, also betrachten wir natürlich die Speicherbeschränkung und beschränken stattdessen jede ganze Zahl $i$ auf $Lle ile U$ . Jetzt $#(A_n)=(U-L+1)^n$ , und wir haben ein klar definiertes $T(cdot)$ , und wir können versuchen, $overline(A_n)$ , obwohl dies a . ist sehr schwieriges Kombinatorikproblem.

Wir können $i$ auch als beschränkte reelle Zahl betrachten, mit der Modifikation $#(A_n)=mu_< ext>(A_n)=(U-L)^n$ und $ overline(A_n)=frac<1><(U-L)^n>intlimits_T(a),mathrmmu_< ext>. $

Was die CS-Leute stattdessen taten, war die Angabe von $T(a) le T( ext)+T( ext)+cn$ für einige $c$ , dann einfach $T( ext)$ und $T( ext)$ für unterschiedliche Kopf- oder Schwanzlängen. Dies besagt, dass implizit unterschiedliche Kopf- (oder Schwanz-) Längen "gleich wahrscheinlich" sind, ohne die Einschränkung zu berücksichtigen, die $A_n$ endlich macht. Das ist, als würde man sagen, man kann eine ungerade Zahl aus der Menge aller ganzen Zahlen mit einer "50\%$-Wahrscheinlichkeit" auswählen, ohne sich die Mühe machen zu müssen, zu definieren, was diese "Wahrscheinlichkeit" bedeutet!

Wie also wird diese durchschnittliche Zeitkomplexität streng über eine unendliche, abzählbare Anzahl von Fällen definiert?

Wenn die durchschnittliche Zeitkomplexität von einer Reihe von Regeln abhängt, mit denen klar definierte Rekursionen jedes Mal in eine im Wesentlichen intuitive Ad-hoc-Definition übersetzt werden, wie können wir dann die durchschnittliche Zeitkomplexität für beliebigen Code definieren?


2 Antworten 2

Wenn Sie eine Open-Source-Black-Box-Lösung suchen, schauen Sie sich Weka an, eine Java-Bibliothek von ML-Algorithmen. Dieser Typ hat auch Covolutional Layers in Weka verwendet und Sie könnten seinen Klassifizierungscode bearbeiten, um ihn an eine Zeitreihen-Klassifizierungsaufgabe anzupassen.

Was die eigene Codierung angeht. Ich arbeite an dem gleichen Problem mit der Python-Bibliothek Theano (ich werde diesen Beitrag mit einem Link zu meinem Code bearbeiten, wenn ich ihn bald knacke). Hier ist eine umfassende Liste aller Papiere, die ich verwenden werde, um mir nach einer guten Stunde der Suche im Internet zu helfen:

Als Ausgangspunkt können Sie den hier gefundenen Code bearbeiten, um ihn nach einer anderen Anzahl von Kategorien zu klassifizieren, oder ihn von der Klassifizierung zur Regression bearbeiten - ich habe dies getan, indem ich die letzte Softmax-Schicht entfernt und nur einen Ausgabeknoten erstellt habe. Ich habe es testweise auf Slices einer Funktion wie y=sin(x) trainiert.

Es ist durchaus möglich, ein CNN zu verwenden, um Zeitreihenvorhersagen zu machen, sei es Regression oder Klassifizierung. CNNs sind gut darin, lokale Muster zu finden, und tatsächlich arbeiten CNNs mit der Annahme, dass lokale Muster überall relevant sind. Auch die Faltung ist eine bekannte Operation in der Zeitreihen- und Signalverarbeitung. Ein weiterer Vorteil gegenüber RNNs besteht darin, dass sie sehr schnell zu berechnen sind, da sie im Gegensatz zur sequentiellen Natur des RNN parallelisiert werden können.

Im folgenden Code werde ich eine Fallstudie demonstrieren, in der es möglich ist, den Strombedarf in R mithilfe von Keras vorherzusagen. Beachten Sie, dass dies kein Klassifizierungsproblem ist (ich hatte kein Beispiel zur Hand), aber es ist nicht schwierig, den Code zu ändern, um ein Klassifizierungsproblem zu behandeln (verwenden Sie eine Softmax-Ausgabe anstelle einer linearen Ausgabe und eines Kreuzentropieverlusts).

Der Datensatz ist in der fpp2-Bibliothek verfügbar:

Als nächstes erstellen wir einen Datengenerator. Dies wird zum Erstellen von Batches von Trainings- und Validierungsdaten verwendet, die während des Trainingsprozesses verwendet werden. Beachten Sie, dass dieser Code eine einfachere Version eines Datengenerators ist, der im Buch "Deep Learning with R" (und der Videoversion davon "Deep Learning with R in Motion") von Manning-Publikationen zu finden ist.

Als nächstes geben wir einige Parameter an, die an unsere Datengeneratoren übergeben werden sollen (wir erstellen zwei Generatoren, einen für das Training und einen für die Validierung).

Der Lookback-Parameter gibt an, wie weit in die Vergangenheit wir schauen möchten und der Lookahead, wie weit in die Zukunft wir vorhersagen wollen.

Als nächstes teilen wir unseren Datensatz auf und erstellen zwei Generatoren:

Als nächstes erstellen wir ein neuronales Netz mit einer Faltungsschicht und trainieren das Modell:

Schließlich können wir mit einem einfachen Verfahren, das in den R-Kommentaren erläutert wird, Code erstellen, um eine Sequenz von 24 Datenpunkten vorherzusagen.


2 Antworten 2

Die Art und Weise, wie das Perzeptron die Ausgabe in jeder Iteration vorhersagt, ist, indem es der Gleichung folgt:

Wie gesagt, dein Gewicht $vec$ enthält einen Bias-Term $w_<0>$. Daher müssen Sie $1$ in die Eingabe einfügen, um die Abmessungen im Punktprodukt beizubehalten.

Normalerweise beginnen Sie mit einem Spaltenvektor für die Gewichte, also einem $n imes 1$-Vektor. Per Definition erfordert das Skalarprodukt, dass Sie diesen Vektor transponieren, um einen $1 x n$ Gewichtsvektor zu erhalten, und um dieses Skalarprodukt zu ergänzen, benötigen Sie einen $n x 1$ Eingabevektor. Aus diesem Grund habe ich in der obigen Gleichung den Wechsel zwischen Matrixnotation und Vektornotation hervorgehoben, damit Sie sehen können, wie die Notation Ihnen die richtigen Dimensionen vorschlägt.

Denken Sie daran, dass dies für jede Eingabe im Trainingssatz erfolgt. Aktualisieren Sie danach den Gewichtsvektor, um den Fehler zwischen der vorhergesagten Ausgabe und der realen Ausgabe zu korrigieren.

Was die Entscheidungsgrenze betrifft, hier ist eine Modifikation des Scikit-Lerncodes, den ich hier gefunden habe:

was zu folgendem Plot führt:

Grundsätzlich besteht die Idee darin, einen Wert für jeden Punkt in einem Netz, das jeden Punkt abdeckt, vorherzusagen und jede Vorhersage mit einer geeigneten Farbe unter Verwendung von contourf darzustellen.


Diese Methode misst den Abstand von Punkten in einem Cluster zu den anderen Clustern. Dann haben Sie optisch Silhouettendiagramme, in denen Sie K wählen können.

K=2 , Silhouette ähnlicher Höhe, aber unterschiedlicher Größe. Also potentieller Kandidat.

K=3 , Silhouetten unterschiedlicher Höhe. Also schlechter Kandidat.

K=4 , Silhouette ähnlicher Höhen und Größen. Bester Kandidat.


Oberflächenabfluss und Wasserkreislauf

Abfluss ist nichts anderes als Wasser, das von der Landoberfläche „abläuft“. So wie das Wasser, mit dem Sie Ihr Auto waschen, während der Arbeit die Auffahrt hinunterläuft, fließt auch der Regen, mit dem Mutter Natur die Landschaft bedeckt, bergab (aufgrund der Schwerkraft). Der Abfluss ist ein wichtiger Bestandteil des natürlichen Wasserkreislaufs.

Hinweis: Dieser Abschnitt der Water Science School befasst sich mit dem "natürlichen" Wasserkreislauf der Erde ohne menschliche Einmischung.

Komponenten des Wasserkreislaufs » Atmosphäre · Kondensation · Verdunstung · Verdunstung · Süßwasserseen und Flüsse · Grundwasserfluss · Grundwasserspeicherung · Eis und Schnee · Infiltration · Ozeane · Niederschlag · Schneeschmelze · Federn · Streamflow · Sublimation · Oberflächenabfluss

Oberflächenabfluss ist Niederschlagsabfluss über die Landschaft

Undurchlässige Bereiche verursachen übermäßigen Abfluss.

In unserer Rubrik über Wasserspeicherung in den Ozeanen Wir beschreiben, wie die Ozeane als großer Wasserspeicher wirken, der verdunstet werden Luftfeuchtigkeit. Die Ozeane werden voll gehalten von Niederschlag und auch durch Abfluss und Abfluss aus Flüssen und der Boden. Viele Leute haben wahrscheinlich eine zu vereinfachte Vorstellung, dass Niederschläge auf das Land fallen, über Land fließen (abfließen) und mündet in Flüsse, die dann in die Ozeane. Das sei "zu stark vereinfacht", weil auch Flüsse Wasser aufnehmen und an den Boden abgeben. Dennoch ist es wahr, dass ein Großteil des Wassers in Flüssen direkt von Abfluss von der Landoberfläche, der als Oberflächenabfluss definiert ist.

Wann Regen trifft gesättigt oder undurchlässiger Boden es beginnt, über Land bergab zu fließen. Es ist leicht zu erkennen, ob es Ihre Auffahrt hinunter zum Bordstein und in einen Regenwasserkanal fließt, aber es ist schwieriger zu bemerken, dass es in einer natürlichen Umgebung über Land fließt. Bei starkem Regen können Sie kleine Wasserbäche bemerken, die bergab fließen. Wasser fließt entlang von Kanälen, wenn es sich in größere Bäche, Bäche und Flüsse. Dieses Bild zeigt ein grafisches Beispiel dafür, wie Oberflächenabfluss (hier von einer Straße abfließend) in einen kleinen Bach eintritt. Der Abfluss fließt in diesem Fall über den nackten Boden und setzt sich ab Sediment in den Fluss (nicht gut für Wasserqualität). Der Abfluss, der in diesen Bach eindringt, beginnt seine Reise zurück zum Ozean.

Ein Großteil des Wassers in Flüssen stammt direkt aus Niederschlagsabflüssen aus der Landschaft.

Bildnachweis: Galen Hoogestraat, USGS

Wie bei allen Aspekten des Wasserkreislaufs variiert die Wechselwirkung zwischen Niederschlag und Oberflächenabfluss je nach Zeit und Geografie. Ähnliche Stürme, die im Amazonas-Dschungel und in der Wüste im Südwesten der Vereinigten Staaten auftreten, werden unterschiedliche Oberflächenabflusseffekte erzeugen. Der Oberflächenabfluss wird sowohl von meteorologischen Faktoren als auch von der physikalischen Geologie und Topographie des Landes beeinflusst. Nur etwa ein Drittel des Niederschlags, der über Land fällt, fließt in Bäche und Flüsse und wird in die Ozeane zurückgeführt. Die anderen zwei Drittel werden verdampft, passierte, oder tränkt (infiltriert) in Grundwasser. Oberflächenabfluss kann auch vom Menschen für eigene Zwecke abgeleitet werden.

Der im Bild oben gezeigte kleine Bach wird mit einem anderen Bach zusammenfließen und schließlich in einen größeren Fluss münden. Somit ist dieser Bach ein Nebenfluss eines Flusses irgendwo flussabwärts, und das Wasser in diesem Fluss wird schließlich in einen Ozean fließen. Das Konzept unterscheidet sich nicht sehr von den kleinen Kapillaren in Ihrem Körper, die Blut zu größeren Arterien transportieren und schließlich, analog zum Ozean, Ihren Weg zu Ihrem Herzen finden.

Meteorologische Faktoren, die den Abfluss beeinflussen:

  • Art der Niederschlag (Regen, Schnee, Graupel usw.)
  • Niederschlagsintensität
  • Niederschlagsmenge
  • Niederschlagsdauer
  • Niederschlagsverteilung über die Entwässerungsbecken
  • Richtung der Sturmbewegung
  • Früher aufgetretene Niederschläge und daraus resultierende Bodenfeuchte
  • Andere meteorologische und klimatische Bedingungen, die die Evapotranspiration beeinflussen, wie Temperatur, Wind, relative Luftfeuchtigkeit und Jahreszeit

Physikalische Eigenschaften, die den Abfluss beeinflussen:

  • Landnutzung
  • Vegetation
  • Bodenart
  • Entwässerungsbereich
  • Beckenform
  • Elevation
  • Topographie, insbesondere die Neigung des Landes
  • Entwässerungsnetzmuster
  • Teiche, Seen, Stauseen, Senken etc. im Becken, die einen weiteren Abfluss flussabwärts verhindern oder verzögern

Menschliche Aktivitäten können den Abfluss beeinflussen

Schwere Erosion kann auftreten, wenn Menschen die Landschaft manipulieren, ohne darauf zu achten, wie fließender Niederschlag den freigelegten Boden erodiert.

Bildnachweis: Howard Perlman, USGS

Da immer mehr Menschen die Erde bewohnen und mehr Entwicklung und Urbanisierung stattfinden, wird mehr von der Naturlandschaft durch landscape ersetzt undurchlässige Oberflächen, wie Straßen, Häuser, Parkplätze und Gebäude, die das Eindringen von Wasser in den Boden reduzieren und den Abfluss in Gräben und Bäche beschleunigen. Neben der Erhöhung der Dichtigkeit erhöhen das Entfernen von Vegetation und Boden, das Planieren der Landoberfläche und der Bau von Entwässerungsnetzen die Abflussmengen und verkürzen die Abflusszeit in Bäche durch Regen und Schneeschmelze. Infolgedessen nehmen der Spitzenabfluss, das Volumen und die Häufigkeit von Überschwemmungen in nahegelegenen Bächen zu.

Stadtentwicklung und Hochwasser

Urbanisierung können einen großen Einfluss auf hydrologische Prozesse haben, wie beispielsweise Oberflächenabflussmuster. Stellen Sie sich das so vor: Stellen Sie sich in einer natürlichen Umgebung das Land in der Wasserscheide neben einem Bach als einen Schwamm (genauer gesagt als Schichten von Schwämmen mit unterschiedlicher Porosität) vor, die vom Bach weg bergauf abfallen. Bei Regen wird etwas Wasser in den Schwamm aufgenommen (Infiltration) und etwas läuft von der Schwammoberfläche in den Bach (Abfluss). Angenommen, es kommt zu einem einstündigen Sturm und die Hälfte des Niederschlags gelangt in den Bach und der Rest wird von den Schwämmen absorbiert. Jetzt ist hier immer noch die Schwerkraft im Spiel, so dass sich das Wasser in den Schwämmen in eine allgemeine Abwärtsrichtung bewegt, wobei das meiste davon in den nächsten ein oder zwei Tagen in die Bachbänke sickert.

Stellen Sie sich als Nächstes vor, dass Straßen und Gebäude den größten Teil der Wassereinzugsfläche ersetzt haben. Wenn dieser Zentimeter Niederschlag auftritt, kann er diese undurchlässigen Oberflächen nicht infiltrieren und wird direkt in den Bach abfließen, und zwar sehr schnell! Das Ergebnis ist eine sehr schnelle und kurzlebige städtische Überschwemmung und kein allmählicher Anstieg und Abfall des Flusses. Dennoch reicht eine Flut von nur 10 Minuten aus, um Ihren Keller zu ruinieren.

Dieses Konzept wird durch diese Ganglinie eines ländlichen (Newaukum Creek - blaue Linie) und eines städtischen (Mercer Creek - grüne Linie) Baches im Bundesstaat Washington veranschaulicht. Wenn Sie die Fläche unter beiden Kurven (die Gesamtwassermenge, die während des auf der X-Achse angezeigten Zeitraums durch die Messstelle geflossen ist) im Diagramm gemessen haben, können sie gleich sein. Aber im Stadtstrom ist das Wasser am Messung Der Standort stieg viel stärker an und erreichte eine viel höhere Stufe (Höhe) als der ländliche Bach. Die hohe, steile Kurve des Mercer Creek zeigte, dass im Stadtbach viel höhere Abflüsse auftraten. Das städtische Bachstadium fiel auch viel schneller in Richtung Grundwasser zurück, was darauf hindeutet, dass es nicht viel aus dem Grundwasser versickert. "Grunddurchfluss" ist die anhaltende Strömung eines Baches ohne direkten Abfluss. Sie umfasst natürliche und vom Menschen verursachte Bachströmungen. Die natürliche Grundströmung wird hauptsächlich aufrechterhalten durch Grundwassereinleitungen.

Der ländliche Bach stieg viel langsamer an und erreichte einen niedrigeren Höhepunkt, was bedeutet, dass er möglicherweise überhaupt nicht überflutet wurde. Es dauerte länger, bis das Grundwasser wieder auf den Grundwasserspiegel zurückfiel, da im Laufe der nächsten Woche langsam Grundwasser in die Bachbänke sickerte.


Kanalnetz generieren (Regenwasserabfluss) – welcher Algorithmus ist der beste? - Geografisches Informationssystem

Seite wird geladen - Bitte warten.

Entwässerungsbereich

Der Begriff "Entwässerungsgebiet" ist definiert als das Landgebiet, in dem Niederschlag in Bäche, Bäche, Flüsse, Seen und Stauseen abfällt. Es ist ein Landmerkmal, das identifiziert werden kann, indem man eine Linie entlang der höchsten Erhebung zwischen zwei Gebieten auf einer Karte zieht, oft ein Bergrücken. Größere Einzugsgebiete, wie die Gebiete, die in den Columbia River münden, enthalten viele kleinere Einzugsgebiete, die oft als Wasserscheiden bezeichnet werden. Das Einzugsgebiet eines Flusseinzugsgebiets wird in einer horizontalen Ebene gemessen, die von der das Einzugsgebiet umgebenden Entwässerungsscheide eingeschlossen wird. In einigen Fällen können Flusseinzugsgebiete nicht beitragende Teileinzugsgebiete oder allgemein geschlossene Einzugsgebiete genannt haben, in denen der Abfluss innerhalb des Einzugsgebiets bleibt und nicht zu dem größeren Einzugsgebiet um das eingeschlossene Einzugsgebiet beiträgt.

Historisch wurden Einzugsgebiete mit Planimetern abgegrenzt. In jüngerer Zeit werden Einzugsgebiete mithilfe des Geographischen Informationssystems (GIS) abgegrenzt. Die Genauigkeit der Einzugsgebietsberechnung hängt unter anderem vom Kartenmaßstab, der Technik, der Abgrenzung der Entwässerungsscheiden ab. Darüber hinaus kann die Meldung von Einzugsgebieten umschlossene Einzugsgebiete umfassen oder nicht, und die Verwendung des Wertes bei der Einzugsgebietsanalyse sollte jegliche Umleitung oder Rückführung von Einleitungen in das größere Einzugsgebiet oder in das/aus dem Einzugsgebiet selbst berücksichtigen.

In einigen Fällen wird das Einzugsgebiet entweder als "unbekannt" oder "unbestimmt" gemeldet. Dies bedeutet, dass entweder die Entwässerung nicht festgelegt wurde, wie es bei neuen Stationen üblich ist, bei denen wir das Gebiet bestimmen und in zukünftigen Veröffentlichungen melden werden, oder es bedeutet, dass das Entwässerungsgebiet keine relative Bedeutung hat, wenn die Station ein Umleitungs-, Rücklauf-, Bewässerungskanal ist, See oder ähnliche hydrologische Merkmale, bei denen der Bachlauf oder der Seeinhalt nicht mit einem Einzugsgebiet und seinem Einzugsgebiet in Verbindung gebracht werden können.

Link zur Webseite über Planimeter, die mit Genehmigung von Dr. Robert Foote, Department of Mathematics and Computer Science, Wabash College verwendet wird.


4 Antworten 4

Was Sie tun könnten, ist zufällig eine Voronoi-Karte wie folgt zu generieren:

  1. Wählen Sie zufällige Mittelpunkte (siehe die schwarzen Punkte) und entscheiden Sie zufällig, ob es sich um Gras oder Schmutz handelt.
  2. Überprüfen Sie dann für alle Fliesen, ob sie einem Mittelpunkt von Schmutz oder Gras am nächsten sind.
  3. Getan!

Wenn Sie zuvor für jede Kachel (Rauschen) eine Münze geworfen haben, liefert das Erstellen eines Voronoi-Diagramms ein viel besseres Ergebnis.

Sie könnten dies verbessern, indem Sie die Mittelpunkte mit einem Algorithmus in Inseln unterteilen, der:

  1. Wählt eine kleine Gruppe von Mittelpunkten aus und bestimmt sie als Leiter.
  2. Fügt iterativ in jeder Runde einen zufälligen angrenzenden unentschiedenen Mittelpunkt hinzu.
  3. Getan!

Sie könnten Perlin-Rauschen verwenden, das normalerweise für die Heightmap-Generierung verwendet wird. Perlin-Rauschen in Spielen

Dann könnten Sie die Höhen als Ratgeber verwenden, wie hoch die Wahrscheinlichkeit ist, dass in einem Bereich der Karte Gras/Schmutz auftritt.

Beispiel (Perlin-Rauschwerte von 0-256): Wenn der Wert über 200 liegt, beträgt die Wahrscheinlichkeit, dass Gras platziert wird, 80% (Schmutz 20%). Bei einem Wert zwischen 100 und 200 beträgt die Wahrscheinlichkeit, dass Gras platziert wird, 50% (Schmutz ebenfalls 50%). Bei einem Wert unter 100 beträgt die Wahrscheinlichkeit, dass Gras platziert wird, 20 % (Schmutz 80 %).

Hier ist meine Version der zellulären Automaten-Methode. Beginnen Sie damit, das Raster mit Zufallszahlen zu füllen, und führen Sie dann diese zellularen Automatenregeln ein paar Mal darauf aus

  • Hat eine lebende Zelle weniger als zwei lebende Nachbarn, stirbt sie.
  • Wenn eine lebende Zelle zwei oder drei lebende Nachbarn hat, bleibt sie am Leben.
  • Hat eine lebende Zelle mehr als drei lebende Nachbarn, stirbt sie.
  • Hat eine tote Zelle genau drei lebende Nachbarn, wird sie lebendig.

und am Ende sieht es aus wie eine Höhle

der Index kann mit diesem Code in die x&y-Position und zurück konvertiert werden

Ich gebe nur eine Liste von Bools zurück, weil ich diese Liste für viele Dinge verwende: Höhlen, Bäume, Blumen, Gras, Nebel, Wasser Sie können hier sogar mehrere Listen auf verschiedene Weise kombinieren. Ich entferne zuerst alle kleineren Höhlen und vereinige dann zwei zufällige Listen


Ab OpenSSL 1.1.1 wird die direkte Angabe von subjectAltName in der Befehlszeile viel einfacher, mit der Einführung des Flags -addext in openssl req (über diesen Commit).

Der Commit fügt der Manpage openssl req ein Beispiel hinzu:

Dieser wurde in den master-Zweig des openssl-Befehls auf Github zusammengeführt und kann ab dem 18. April 2018 über git pull + compilieren (oder über Homebrew bei OS X: brew install --devel [email protected] ) installiert werden.

Beachten Sie, dass, wenn Sie das Konfigurationsattribut "req_extensions" im Abschnitt "[req]" in openssl.cfg gesetzt haben, der Befehlszeilenparameter ignoriert wird

Basierend auf dem Link von DarkLighting ist hier der Befehl, den ich mit verschachtelten Subshells entwickelt habe.

Meine Lösung bestand darin, subjectAltName über eine Umgebungsvariable zu übergeben.

Lassen Sie dies zuerst zu openssl.conf hinzufügen:

Legen Sie dann die Umgebungsvariable fest, bevor Sie openssl aufrufen:

Hinweis: Der Parameter -extensions san_env muss sowohl beim Signieren des CSR als auch beim Generieren vorhanden sein. Fügen Sie daher für CA-signierte CSRs auch -extensions san_env zum Befehl openssl ca hinzu.

Dies ist meine Lösung, um endlich ein funktionierendes selbstsigniertes Zertifikat zu generieren, basierend auf den obigen Antworten (Die akzeptierte Antwort funktioniert bei mir nicht):

openssl x509 -in server.crt -text -noout :

Repro-Schritt für "Die akzeptierte Antwort funktioniert bei mir nicht" (auf OSX 10.12.4, mit System openssl):

Der folgende Befehl zeigt, wie Sie ein selbstsigniertes Zertifikat mit SAN für example.com und example.net generieren.

Es ist in dem Sinne portabel, dass wir nicht mit dem Speicherort der Datei openssl.cnf herumspielen müssen (oder sogar darüber Bescheid wissen):

Der Trick hier besteht darin, einen minimalen [req]-Abschnitt einzufügen, der für OpenSSL gut genug ist, um ohne die Hauptdatei openssl.cnf auszukommen.

In OpenSSL ≥ 1.1.1 kann dies verkürzt werden auf:

Hier verwenden wir die neue Option -addext, also brauchen wir -extensions und -config nicht mehr.

Vergessen Sie nicht, den Inhalt des generierten Zertifikats zu überprüfen:

Ich hatte also eine verdammt lange Zeit, das alles richtig zu machen und überhaupt Ansible zu installieren. Da das Befehlsmodul von Ansible keine Dateiumleitungen ( <(. ) ) zulässt, musste ich eine kleine .cnf-Datei als Vorlage verwenden, aber jetzt funktioniert alles. Folgendes habe ich getan, damit es funktioniert:

Die san.cnf-Vorlage (generiert für jedes CSR/CRT-Paar):

Einige Variablen

Diese Ansible-Variablen werden in den folgenden Befehlen verwendet, können jedoch nach Bedarf in Ihren Skripten ersetzt werden:

key ssl_certs_local_caserial_path: Die Seriennummerndatei der Zertifizierungsstelle ssl_certs_local_cert_path: Die endgültig generierte Zertifikatsdatei.

Das CSR-Generierungskommando

Selbstsignieren des CSR, um das Zertifikat zu erstellen

So überprüfen Sie das Ergebnis

Das sollte einen Abschnitt enthalten, der wie folgt aussieht:

Der zweite Beitrag in diesem Link besagt, dass dies nicht nur über die Befehlszeile möglich ist, aber der vierte Beitrag im selben Link bietet eine Problemumgehung, die die Fähigkeit von bash nutzt, auf Daten zu verweisen, als ob sie in einer Datei wären.

Bei genauerem Hinsehen hat jemand das erwähnt Anfragen Parameter zum Hinzufügen von Ergänzungen zur Zertifikatsanforderung. Dieser Blog verwendet bashs env als Ansatz dazu.

Aber ich versuche nur zu helfen. Habe selbst nichts davon getestet.

Getestet für RHEL7 (Erstellen eines selbstsignierten Zertifikats mit einem SAN)

Ich wollte einen einzeiligen Befehl zum Erstellen eines CSR - funktionierte perfekt ohne conf-Dateien, generierte jedoch keinen SubjAltName-Eintrag. Diese Version habe ich verwendet Verwenden von read -p zum Anfordern von FQDN Ich wollte, dass dies auch mit einem SAN-Eintrag funktioniert - hier ist eine funktionierende Lösung.

Es besteht eine Abhängigkeit von der Openssl-Version, muss mindestens 1.1.1 sein. weil Sie -addext brauchen.

Kein Durcheinander mit conf-Dateien auf diese Weise.

Meine Lösung für dieses Problem bestand darin, eine temporäre cnf-Datei zu erstellen und darauf zu verweisen, indem ich meine über die Befehlszeile gesammelten subjectAltName-Informationen anhängte.

Ich musste dies tun, um selbstsignierte Zertifikate für lokale Tests zu erstellen, wollte aber auch mehrere Parameter für Erweiterungen übergeben können, nicht nur für SAN. Ich entdeckte, dass das Ausführen mehrerer -extfile-Befehle sich gegenseitig zu überschreiben schien und nur der letzte -extfile-Wert in cert landete.


Glatte Schattierungsnormalen

Nach der Beleuchtung mit Normalen, die wie oben berechnet wurden, werden Sie feststellen, dass Dreieckskanten sichtbar sind. Wenn dies nicht erwünscht ist, können Sie stattdessen glatte Normalen berechnen, indem Sie alle Flächen mit demselben Scheitelpunkt berücksichtigen.

Die Idee ist, dass, wenn ein gleicher Scheitelpunkt beispielsweise von drei Dreiecken $T1$, $T2$ und $T3$ geteilt wird, das normale $N$ der Durchschnitt von $N1$, $N2$ und $N3$ ist. Außerdem, wenn $T1$ ein großes Dreieck und $T2$ ein kleines Dreieck ist, möchten Sie wahrscheinlich, dass $N$ stärker von $N1$ beeinflusst wird als von $N2$.

Erinnern Sie sich, wie das Kreuzprodukt proportional zur Fläche ist? Wenn Sie die Kreuzprodukte addieren und dann die Summe normalisieren, ergibt sich genau die gewichtete Summe, die wir wollen. Der Algorithmus wird also:

Diese Technik wird in diesem Artikel von Iñigo Quilez ausführlicher erklärt: clevere Normalisierung eines Netzes.