Eine etwas seltsame Frage, aber lassen Sie mich vor meinen eigentlichen Fragen eine kurze Erklärung des Hintergrunds geben:
Die Rasterkraftmikroskopie (AFM) ist eine Methode, mit der Forscher (und meines Wissens nach) Bereiche im Mikro- und Nanobereich scannen können. Es funktioniert, indem ein Bereich mit einer Art Sonde "gescannt" wird. Mehr ist für mich schwer zu erklären, da ich kein wirkliches Verständnis dafür habe. Was ich weiß und was meine Neugierde auslöste, war, dass das Ergebnis tatsächlich ein "Gitter" von "Höhen" -Werten ist (eine Matrix von beispielsweise 512 x 512 Werten, die die Höhe der Sonde an diesem Punkt beschreiben).
Ich dachte dann: Naja, abgesehen von der Skala ist dies tatsächlich ein digitales Höhenmodell! Das bedeutet, dass ich eine GIS-Analyse darauf anwenden kann, wenn ich eine DEM-Datei erstellen kann, wie sie von GIS-Tools verstanden wird!
So wie es ist, arbeitet mein Lebensgefährte in einem Labor, das eine AFM-Maschine hat, und verwendet sie in einem ihrer Projekte. Ich habe einige Scandateien von ihr erhalten und habe es mit Python (struct und numpy) geschafft, diese Binärdateien zu analysieren. Was ich jetzt habe, ist ein numpy-Array der Größe 512x512, das mit int16-Werten gefüllt ist.
Was ich als nächstes vorhabe und bei dem ich Hilfe brauche, ist die "Zuordnung zu einem richtigen DEM" -Teil. Ich habe einige Kenntnisse über DEMS, aber wenn es um die tatsächliche Erzeugung von DEMS geht, bin ich ziemlich neu.
Was ich denke ist, dass ich meine Daten in irgendeiner Weise georeferenzieren muss und dafür ein benutzerdefiniertes (planares) Koordinatensystem benötige. Ich stelle mir vor, mein Koordinatensystem würde Mikro- oder Nanometer als Einheiten verwenden. Dann geht es nur noch darum, die Größe des mit dem AFM gescannten Bereichs zu ermitteln (dies ist meines Erachtens irgendwo in der Binärdatei enthalten, vorausgesetzt, dies ist bekannt).
Update : Ich habe auch mehrere Scans mit unterschiedlichen Auflösungen, aber aus dem gleichen Bereich. Zum Beispiel habe ich diese Informationen über zwei Scans:
größeres Bild:
Scan Size: 51443.5 nm
X Offset: 0 nm
Y Offset: 0 nm
kleineres (detail) bild:
Scan Size: 5907.44 nm
X Offset: 8776.47 nm
Y Offset: 1486.78 nm
Ich denke, mein benutzerdefiniertes Koordinatensystem sollte einen Ursprung in 0,0 haben, und für das größere Bild kann ich Pixel 0,0 den Koordinatenwert (0,0) und Pixel 512.512 den Koordinatenwert (51443,5, 51443,5) zuweisen ) (Vermutlich bekommst du das Bild für die anderen benötigten Punkte).
Dann würde das größere Bild Pixel (0,0) auf (8776,47, 1486,78) und (512,512) auf (8776,47 + 5907,44, 1486,78 + 5907,44) abbilden.
1. Frage ist dann : Wie erstelle ich ein proj4 def für ein solches Koordinatensystem? Dh, wie ordne ich diese "realen Weltkoordinaten" meinem benutzerdefinierten Koordinatensystem zu (oder, wenn ich dem Vorschlag von Whubers folge und ein lokales Koordinatensystem verwende und über Einheiten lüge (dh meine Nanometer als Kilometer behandle)
Dann muss ich mein numpy 2-dimensionales Array in ein georeferenziertes DEM-Dateiformat übertragen. Ich habe darüber nachgedacht, GDAL (oder besser gesagt die Python-Bindungen) zu verwenden.
2. Frage ist dann : Wie erstelle ich ein georeferenziertes DEM aus "beliebigen" Daten wie meinen? Am besten in Python und unter Verwendung von Open Source-Bibliotheken.
Der Rest sollte dann ziemlich einfach sein, nur eine Frage der Verwendung der richtigen Analysewerkzeuge. Das Problem ist, dass diese Aufgabe von meiner eigenen Neugier angetrieben wird, und ich bin mir nicht ganz sicher, was ich mit einem nanoskaligen DEM eigentlich tun soll. Das bittet den
3. Frage : Was tun mit einem nanoskaligen DEM? Welche Art von Analyse kann durchgeführt werden, welche Tools eignen sich für die DEM-Analyse und schließlich: Ist es möglich, aus diesen Daten eine Karte mit Schatten und Höhenlinien zu erstellen? :)
Ich begrüße alle Vorschläge und Hinweise, denke aber daran, dass ich nach freien Alternativen suche, da es sich um ein rein hobbybasiertes Projekt ohne Budget oder Finanzierung handelt (und ich keinen Zugriff auf lizenzierte GIS-Anwendungen habe). Außerdem weiß ich, dass Bruker, das Unternehmen, das diese AFM-Geräte verkauft, eine Software ausliefert, die aber keinen Spaß machen würde.
quelle
Antworten:
Nun, es scheint, als hätte ich zumindest die Probleme 1 und 2 gelöst. Vollständiger Quellcode bei Github , aber einige Erläuterungen hier:
Für ein benutzerdefiniertes CRS entschied ich mich (nach Whubers Vorschlag) zu "schummeln" und Meter als Einheit zu verwenden. Ich habe ein "lokales crs" bei apatialreference.org gefunden ( SR-ORG: 6707 ):
Mit Python und GDAL ist dies ziemlich einfach zu lesen:
Außerdem war es ziemlich unkompliziert, ein DEM mit GDAL zu erstellen (am Ende hatte ich einen Single-Band-Geotiff). Die Zeile parser.read_layer (0) gibt meine zuvor beschriebene 512x512-Matrix zurück.
Der schwierigste Teil war, herauszufinden, wie man meine Datei richtig "georeferenziert". Am Ende benutzte ich SetGeoTransform und erhielt die folgenden Parameter:
Dieser letzte Teil ist wahrscheinlich der, bei dem ich mir am unsichersten bin. Was ich wirklich gesucht habe, war eine Zeile * gdal_transform -ullr *, aber ich konnte keinen Weg finden, dies programmatisch zu tun.
Ich kann mein GeoTIFF in Qgis öffnen und anzeigen (und es visuell mit dem Ergebnis des Bruker-Programms vergleichen, es sieht richtig aus), aber ich habe meine Frage 3 nicht wirklich beantwortet. Was tun mit diesen Daten? Also, hier bin ich offen für Vorschläge!
quelle