2009-03-12 5 views
5

Ich arbeite gerade an einem Datenvisualisierungsprojekt. Mein Ziel ist es, Konturlinien, also Isolinien, aus Rasterdaten zu erzeugen. Daten können Temperatur, Wetterdaten oder jede andere Art sein andere Umweltparameter, sondern nur Bedingung ist es muss regelmäßig beabstandet sein. Ich suchte im Internet, aber ich konnte keinen guten Algorithmus, Pseudo-Code oder Quellcode zum Erzeugen von Konturlinien aus Gittern finden. Kennt jemand eine Bibliothek, einen Quellcode oder einen Algorithmus zum Erzeugen von Konturlinien aus gerasterten Daten? wird es gut sein, wenn Ihr Vorschlag eine gute Laufzeit Leistung, ich will nicht meine Benutzer warten, so viel :)Erzeugen von Konturlinien aus regelmäßig verteilten Daten

Edit: Dank für die Antwort, aber isolines hat einige Constraints, wie sie nicht so gerade schneidet sollen Das Erzeugen von Bezierkurven erreicht mein Ziel nicht.

+0

Siehe meine Antwort unter http://stackoverflow.com/questions/3180401/net-open-source-contour-plotting/13296170 – ProfNimrod

Antwort

1

In GNUplot gibt es einige ziemlich gute Konturen, wenn Sie GPL-Code verwenden können, der Ihnen helfen kann.

4

Sehen Sie diese Frage: How to approximate a vector contour from an elevation raster?

Es ist ein nahes Duplikat, verwendet aber ganz andere Terminologie. Sie werden feststellen, dass Kartographie und Computergrafik viele der gleichen Probleme lösen, aber unterschiedliche Terminologie für sie verwenden.

+0

Das ist ein Duplikat. "Rasterdaten" <=> "Rasterdaten", "Daten" <=> "Elevation" usw. –

0

Wie die Verbindung von Paul Tomblin andeutet, sind Bezier-Kurven (die eine Teilmenge von B-Splines sind) eine reife Lösung für Ihr Problem. Wenn die Laufzeitleistung ein Problem darstellt, haben Bezier-Kurven den zusätzlichen Vorteil, dass sie über den sehr schnellen de Casteljau-Algorithmus konstruierbar sind, anstatt sie gemäß den parametrischen Gleichungen zu zeichnen. Für den Fall, dass Sie mit DirectX arbeiten, hat es eine Bibliotheksfunktion für den Casteljau, aber es sollte keine Herausforderung sein, einen selbst zu erstellen, indem Sie die 1001 Webseiten verwenden, die es beschreiben.

0

Wenn Ihre Daten in regelmäßigen Abständen gespeichert werden, kann dies relativ einfach durchgeführt werden (vorausgesetzt, dass ich Ihr Problem richtig verstanden habe). Zuerst müssen Sie bestimmen, in welchem ​​Intervall Ihre Konturen liegen sollen. Als Nächstes erstellen Sie das Raster, das Sie verwenden werden, um die Konturinformationen zu speichern (ich nehme an, dass nur ein einfaches An/Aus oder eine Anhebung bei dieser Datenart auf Konturebene erfolgt), die ein Intervall kleiner als die Quelldaten sein sollte.

Jetzt ist der Trick hier, um die 2 Raster um ein Intervall 1/2 (wird nicht tatsächlich in Code wie folgt, aber es ist das Konzept, mit dem ich hier bin), und vergleichen Sie die 4 Koordinaten der Umgebung aktueller Punkt im Konturdatengitter, das Sie berechnen. Wenn einer der 4 Punkte in einem anderen Intervallbereich liegt, sollte dieser "Pixel" im Konturraster auf "true" gesetzt werden (oder der Wert des Konturbereichs wird überschritten).

Bei dieser Methode tritt ein Problem auf, wenn das Intervall zu klein ist und mehrere Konturen sich überlappen.