Zu 1)
Das ist garnicht mal sooo trivial. Eine schnell geschossene Idee: Du legst die zunächst ein weiteres Array an, in dem einfach nur alle möglichen Punkte vorkommen, die theoretisch möglich sind. (Die Verbindungspunkte der Strecken die bei dem Verfahren herauskommen.)
Dann eine Datenstruktur, die für bis zwei Strecken je zwei Referenzen auf die betreffenden Punkte in unserem ersten Array enthalten, die Start und Ende der Strecke markieren. Diese Datenstruktur dann wiederum als 2D Array, so dass sie nun alle "Squares" Repräsentiert. (Ich würde noch einen Zähler mitliefern, der angibt wie viele Strecken tatsächlich hinterlegt sind.) Zudem müssten in diese Struktur noch zwei Flags, mit denen man nachher signalisieren kann, ob eine Strecke bereits bearbeitet wurde.
Im ersten Ansatz dann einfach nach Anwendung von Marching Squares diese durchgehen, und sobald irgendwo eine Strecke vorkommt, an dieser weiter machen. Die Punkte merken, und an den 4 möglichen umliegenden prüfen, ob die letzte Strecke dort fortgesetzt wird, und ob diese Strecke noch nicht anderweitig bearbeitet wurde. Das wird dann duch einen einfachen Vergleich der Referenzen auf die Punkte möglich. (Rein theoretisch reicht auch eine Nummerierung der Punkte, jeodch müsste man dann jedes Mal die Koordinaten anhand des Index neu berechnen.)
Dann noch das Bearbeitet-Flag setzen, und so lange so weiter machen, bis sich keine freie Fortsetzung mehr angrenzend findet.
Alle Punkte die man auf diesem Weg dann findet, einfach in eine Liste speichern, und schwupps hast du eine sortierte (wenn auch nicht richtungsdefinierte) Liste von Punkten die eine Isobare beschreiben.
Das alles machen, bis man für alle Squares weiss, dass sie entweder keine Strecken mehr enthalten, oder alle bereits bedacht sind.
Zu 2)
Hängt voll und ganz davon ab, wie genau du es haben willst. Wenn du aber das Raster größer als die Samples wählst, solltest du den Mittelwert aller in einem Square befindlichen Samples als Grundlage nehmen. Mehr gibt es da glaube ich nicht zu bedenken.
Wie sinnvoll eine grobere Rasterung ist, hängt nur davon ab ob dein
RAM ausreicht (o.g. Methode ist zugegebenerweise nicht grad Mr. Speichersparer *hüstel*), bzw. wie genau du es nun haben musst.
Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel