Zum Inhalt springen
AI Agent
QGIS
Tutorial

Karte oder Bild in QGIS georeferenzieren

Published

Eine USGS-Topografiekarte von San Francisco aus dem Jahr 1947, geteilt in zwei Hälften: links der reine Scan, rechts dieselbe Karte georeferenziert und über OpenStreetMap gelegt, die Bay Bridge setzt sich über den Kartenrand fort, mit dem Titel „Georeferencing in QGIS“.
Das Kartenblatt San Francisco North von 1947, vorher und nachher. Karte: USGS, gemeinfrei. Basemap: OpenStreetMap-Mitwirkende.

Um eine Karte oder ein Bild in QGIS zu georeferenzieren, öffnen Sie Layer > Georeferencer, laden den Scan mit Open Raster, klicken Sie mindestens vier Punkte an, die Sie eindeutig erkennen können, und geben ihre echten Koordinaten ein, wählen Sie in Transformation Settings Polynomial 1 und ein projiziertes Ziel-CRS und drücken dann Start Georeferencing. QGIS schreibt einen GeoTIFF und fügt ihn Ihrem Projekt hinzu.

Das Setzen der Punkte ist der einfache Teil. Der Teil, den die meisten Tutorials auslassen, ist die Bewertung des Ergebnisses, denn die Zahl, die Ihnen QGIS anzeigt, kann null sein, während die Karte hunderte Meter danebenliegt. Ich habe eine USGS-Karte von San Francisco aus dem Jahr 1947 georeferenziert und jedes Ergebnis gegen Punkte gemessen, die die Anpassung nie gesehen hat. Die Zahlen unten stammen aus diesem Test.

Die kurze Antwort

Ihr AusgangsmaterialMethodeZeit oder Kosten
Ein Scan mit aufgedruckten Koordinaten (Gradnetz, Gitterstriche, Eckwerte)Methode 1, gedruckte Werte eintippenKostenlos. 8 Punkte, danach 34 s Entzerrung bei einem 6,888 x 8,933 px Scan
Ein Scan ohne Koordinaten oder ein Foto einer KarteMethode 1, From Map Canvas auf einer BasemapKostenlos. Planen Sie 10 oder mehr Punkte ein
Eine GeoPDF vom USGS oder einer anderen BehördeDirekt öffnen, sie ist bereits verortetKostenlos, null Punkte
Punkte bereits abgelesen, und Sie möchten die Anpassung geprüft bekommenMethode 2, ein AI-Agent1 Nachricht, 99 s in meinem Test
Eine schnelle visuelle Überlagerung, keine Genauigkeit nötigMethode 3, das Plugin „Freehand raster georeferencer“Kostenloses Plugin

Bevor Sie beginnen

Sie benötigen QGIS 3.26 oder neuer, wo der Georeferencer im Menü Layer sitzt. Ich habe QGIS 3.44.7 verwendet. Ältere Tutorials schicken Sie zu Raster > Georeferencer, wo er früher als GDAL-Georeferencer-Plugin lebte.

Bevor Sie irgendetwas anklicken, lesen Sie den Kartenrand ab. Er verrät Ihnen drei Dinge, die Sie später eintippen werden: das Koordinatensystem der gedruckten Werte, das Datum und den Maßstab. Mein Beispiel ist das Kartenblatt San Francisco North, CA des USGS von 1947 im Maßstab 1:24,000, das jeder von topoView herunterladen kann. An seinem Kartenrand steht „Polyconic projection. 1927 North American datum“, und an den Ecken stehen Breiten- und Längengrade alle 7'30". Historische USGS-Karten sind gemeinfrei.

Um den Test ehrlich zu halten, nahm ich den eigenen GeoTIFF des USGS von diesem Kartenblatt und entfernte seine Georeferenzierung, sodass das, was ich in QGIS lud, ein schlichtes JPEG mit 9.2 MB und 6,888 x 8,933 Pixeln war. Das sind etwa 300 dpi oder 2.03 m Boden pro Pixel. Die Georeferenzierung des USGS blieb als Musterlösung an der Seite stehen.

Wo das Internet hier falschliegt

„Je niedriger der RMSE, desto besser das Ergebnis.“ Nicht bei einem Thin-Plate-Spline. Diese Transformation verformt das Bild, bis es exakt durch jeden Punkt verläuft, sodass ihre Residuen immer null sind. Ich habe absichtlich einen Breitengrad falsch eingetippt, 37°47' statt 37°47'30", und beide Transformationen mit denselben acht Punkten ausgeführt. Polynomial 1 zeigte einen RMSE von 297 m und schob 762 m davon auf den falschen Punkt. Der Thin-Plate-Spline zeigte 0.00 m, und die Karte lag an Punkten, die er nicht erhalten hatte, bis zu 594 m daneben.

„Geben Sie die Koordinaten in WGS 84 ein.“ Die gedruckten Werte auf älteren US-Karten sind oft NAD27, und genau das sagt der Kartenrand. In San Francisco liegen dieselben Breiten- und Längengrade in NAD27 und in WGS 84 93 m auseinander, davon 92 m von Ost nach West. Geben Sie sie als EPSG:4326 ein, landet das ganze Kartenblatt einen Block daneben, mit Residuen, die perfekt aussehen, weil sich alle Punkte gemeinsam bewegt haben. Setzen Sie im Dialog „Enter Map Coordinates“ das CRS der Punkte auf das, was der Kartenrand sagt: EPSG:4267 für NAD27.

„Lassen Sie das Ziel-CRS in Grad.“ Sie können das, aber eine flache affine Anpassung in Breiten- und Längengraden passt nicht dazu, wie eine projizierte Karte gezeichnet wurde. Mit denselben acht Punkten ergab Polynomial 1 einen RMSE von 2.98 m mit EPSG:4267 als Ziel und 0.72 m mit NAD27 / UTM-Zone 10N (EPSG:26710). Wählen Sie ein projiziertes CRS auf dem Datum der Karte, dann wird die Anpassung ebenfalls in Metern angezeigt.

Methode 1: Der QGIS-Georeferencer

Das ist das integrierte Werkzeug und das, das man zuerst lernen sollte. Es funktioniert für Scans mit gedruckten Koordinaten und für Scans ohne.

Scan öffnen

Layer > Georeferencer, danach File > Open Raster und das Bild auswählen. JPEG, PNG und TIFF funktionieren alle.

Einen Passpunkt hinzufügen

Klicken Sie auf Add GCP Point, zoomen Sie hinein und klicken Sie eine Stelle an, die Sie exakt identifizieren können: eine Ecke des Kartenrahmens, ein Gradnetz-Kreuz, ein Gitterstrich. Der Dialog „Enter Map Coordinates“ öffnet sich. Geben Sie die gedruckte Koordinate ein. Er akzeptiert Grad, Minuten und Sekunden mit Leerzeichen (-122 25 0), Dezimalgrade oder projektierte Meter. Setzen Sie das CRS unter den Feldern auf das, das der Kartenrand nennt.

Oder die Koordinate von der Kartenansicht übernehmen

Wenn der Scan keine Koordinaten hat, laden Sie zuerst eine Basemap im Hauptfenster von QGIS (die Basemap-Anleitung enthält die Klicks), drücken Sie dann From Map Canvas und klicken Sie dieselbe Stelle darauf an. QGIS füllt die Koordinaten und das CRS für Sie aus.

Die Punkte verteilen

Setzen Sie einen nahe jeder Ecke und einige in die Mitte. Punkte, die in einem Bereich gebündelt sind, passen sich diesem Bereich an und lassen den Rest des Kartenblatts abdriften. Ich habe die vier Ecken des Kartenrahmens und die vier Gradnetz-Kreuze darin verwendet.

Oben: der Georeferencer, gezoomt auf den 25-Minuten-Strich des Kartenrahmens, ein grüner Punkt auf dem Strich. Unten: der Enter-Map-Coordinates-Dialog mit eingegebenem -122 25 0 und 37 52 30 und ausgewähltem EPSG:4267 NAD27.
Ein Klick auf den 25'-Strich der oberen Kante, danach der gedruckte Wert in Grad, Minuten und Sekunden eingegeben, in NAD27.

Jeder Punkt, den Sie hinzufügen, landet in einer .points-Datei neben dem Bild. Behalten Sie sie: Der Georeferencer lädt sie von selbst, wenn Sie denselben Scan das nächste Mal öffnen, und Sie können einen Punkt korrigieren, statt von vorn zu beginnen.

Die Transformation wählen

Settings > Transformation Settings enthält die Entscheidung, die am meisten zählt. Das QGIS-3.44-Handbuch listet sieben Transformationen mit diesen Mindestpunktzahlen auf:

TransformationMindestpunkteVerwendung
Linear2Einen sauberen Scan, der nur eine Verschiebung und eine Skalierung braucht. Schreibt eine World-Datei, ohne Entzerrung
Helmert2Dasselbe plus eine Rotation
Polynomial 13Die meisten flachen Scans gedruckter Karten. Gerade Linien bleiben gerade
Projective4Ein Foto einer Karte, das aus einem Winkel aufgenommen wurde
Polynomial 26Ein eingerolltes oder verbogenes Kartenblatt. Verzerrt die Ränder über Ihre Punkte hinaus
Polynomial 310Dasselbe, stärker. Selten lohnenswert
Thin plate spline10 laut HandbuchBeschädigte oder handgezeichnete Karten mit vielen Punkten. Versteckt Fehler, siehe oben

Meine Faustregel: Beginnen Sie mit Polynomial 1. Wechseln Sie zu etwas Flexiblerem nur dann, wenn die Residuen ein Muster zeigen, etwa dass alle Punkte auf einer Seite in dieselbe Richtung ziehen, und niemals, weil eine höhere Zahl schlechter aussah.

Der Dialog „Transformation Settings“ mit Polynomial 1, Ziel-CRS EPSG:26710 NAD27 / UTM-Zone 10N, einer Ausgabedatei, die auf _modified.tif endet, und Kubischem Resampling.
Die Einstellungen, die ich verwendet habe: Polynomial 1, das eigene Datum der Karte in einem projizierten CRS, kubisches Resampling für einen weicheren Scan.

Zwei Einstellungen in diesem Dialog ersparen später Ärger. Resampling method ändert, wie die entzerrten Pixel aussehen: Nächster Nachbar behält die Originalfarben, Kubisch liest sich auf einem Scan besser. Und die Ausgabe ist standardmäßig unkomprimiert: Aus meinem 9.2 MB großen JPEG wurde ein 187 MB großer GeoTIFF. Öffnen Sie Raster creation options und wählen Sie ein Komprimierungsprofil, wenn die Datei weitergegeben werden soll.

Die Residuen ablesen

Sobald Sie mehr Punkte haben, als die Transformation braucht, zeigt QGIS das Residuum jedes Punkts in der GCP-Tabelle und einen mittleren Fehler in der Statusleiste an, beide in Pixeln bei einem Scan ohne Koordinaten.

Das Georeferencer-Fenster mit dem Scan von San Francisco North 1947 und acht roten Passpunkten, die GCP-Tabelle mit Quell- und Zielkoordinaten und Residuen zwischen 0.15 und 0.46 Pixeln sowie der Statusleiste mit „Transform: Polynomial 1 Mean error: 0.447243“.
Acht Punkte, Polynomial 1: Residuen von 0.15 bis 0.46 Pixeln und ein mittlerer Fehler von 0.447 Pixeln, etwa 0.9 m am Boden.

Um eine Pixelangabe zu beurteilen, rechnen Sie sie in Meter um und vergleichen Sie sie mit dem, was die Karte selbst leisten kann.

  1. Meter pro Pixel. Multiplizieren Sie den Maßstabsnenner mit der Größe eines gescannten Pixels. Bei 300 dpi ist ein Pixel 0.0847 mm groß, also deckt es auf einer Karte im Maßstab 1:24,000 2.03 m ab. Meine 0.447 Pixel sind 0.9 m.
  2. Was die Karte versprechen kann. Die US National Map Accuracy Standards verlangen, dass 90 Prozent der klar definierten Punkte auf einem Kartenblatt im Maßstab 1:24,000 innerhalb von 1/50 Zoll liegen, was das USGS mit 12.2 m angibt. Eine strengere Faustregel ist die Breite einer gezeichneten Linie, 0.2 mm auf dem Kartenblatt, was bei 1:24,000 4.8 m sind.
  3. Punkte, die die Anpassung nie gesehen hat. Ein Residuum sagt nur, dass die Punkte untereinander übereinstimmen. Ich habe die acht Gradnetz-Striche an den Rändern aus der Anpassung herausgehalten und gemessen, wohin das Ergebnis sie setzte: im Mittel 1.0 m daneben, im schlimmsten Fall 1.6 m.

Die Georeferenzierung hat also etwa einen Meter Fehler zu einer Karte hinzugefügt, die nur 12 m verspricht. Bei einem alten Kartenblatt ist fast immer die Karte die Grenze, nicht Ihre Klicks.

Danach schrieb Start Georeferencing den GeoTIFF in 34 Sekunden und fügte ihn dem Projekt hinzu. Auf OpenStreetMap landen die Straßen von 1947 auf den heutigen:

OpenStreetMap des Marina District und von Fort Mason in San Francisco, danach dieselbe Ansicht mit der georeferenzierten USGS-Karte von 1947 bei 55 Prozent Deckkraft, Lombard Street und Küstenlinie richten sich aus (after)
OpenStreetMap des Marina District und von Fort Mason in San Francisco, danach dieselbe Ansicht mit der georeferenzierten USGS-Karte von 1947 bei 55 Prozent Deckkraft, Lombard Street und Küstenlinie richten sich aus (before)
OpenStreetMapKarte von 1947
Zum Vergleichen ziehen
The Marina und Fort Mason, San Francisco. Ziehen Sie den Regler, um das Kartenblatt von 1947 über die heutige Karte zu legen.

Verwenden Sie es, wenn: Sie ein Ergebnis wollen, das Sie verteidigen können, mit Residuen, einer .points-Datei und einem GeoTIFF, den jede GIS-Software liest.

Überspringen Sie es, wenn: Sie nur für ein paar Minuten eine grobe Hintergrundkulisse brauchen. Methode 3 ist dafür schneller.

Methode 2: Passpunkte von einem AI-Agenten geprüft

Wir entwickeln AI Agent, ein kostenloses QGIS-Plugin mit einem Chat-Panel, das die Schritte in Ihrem geöffneten Projekt ausführt. Dieser Abschnitt handelt von unserem eigenen Werkzeug. Es enthält ein Georeferenzierungs-Werkzeug, das Passpunkte als Pixel- und Koordinatenpaare entgegennimmt, eine der Transformationen des Georeferencers über GDAL anpasst und das Residuum jedes Punkts in Metern zurückgibt, bewertet anhand des Kartenmaßstabs.

Es kann auch einen Scan ganz ohne Punkte verorten, indem es seine Ortsnamen liest und ihn mit Referenzkarten abgleicht: Eine alte Karte von Edinburgh in der AI-Agent-Anleitung landete mit einem Median-Fehler von 5.9 m. Dafür braucht es lesbare Namen, und sehr alte Kartenblätter scheitern oft. Bei einer Karte mit aufgedrucktem Gradnetz sind die Punkte der sicherere Weg, und das Ablesen geht schnell: Ein Bild ohne Koordinaten liegt in QGIS mit der Pixelspalte als x und minus der Zeile als y, sodass die Statusleiste das Pixel unter Ihrem Cursor anzeigt. Ich lud den Scan, behielt den Tippfehler aus dem Test oben in Punkt 8 bei und schickte eine Nachricht:

Georeferenziere den Layer sf-north-1947-scan. Es ist das Kartenblatt San Francisco North des USGS von 1947, Maßstab 1:24,000, Koordinaten in NAD27. Ich habe diese Passpunkte auf dem Scan abgelesen (Pixelspalte, Zeile → Breitengrad, Längengrad): 1. 1022, 792 → 37°52'30"N, 122°30'W (NW-Ecke) [...] 8. 4632, 5344 → 37°47'N, 122°25'W. Ist das Ergebnis für eine Karte im Maßstab 1:24,000 genau genug?

Der Lauf dauerte 99 Sekunden, im Panel als 14 Aktionen angezeigt. Der Agent las den Layer, passte die acht Punkte in Python an, um sie zu prüfen, stellte fest, dass Punkt 8 925 m von der Position entfernt war, an die seine Zeile ihn setzte, ließ ihn aus und schrieb den GeoTIFF aus den anderen sieben in NAD27 / UTM-Zone 10N.

Es fragte einmal nach, bevor es seine eigene Python-Prüfung ausführte. Seine Antwort ergab einen RMSE von 0.73 m mit einem Maximum von 0.95 m gegenüber einer Toleranz von 4.8 m und ergänzte, dass dies die Übereinstimmung zwischen den Punkten misst, nicht die absolute Genauigkeit der Karte.

QGIS mit der georeferenzierten San-Francisco-Karte von 1947 bei 72 Prozent Deckkraft über OpenStreetMap und dem AI-Agent-Panel rechts, das erklärt, dass Punkt 8 ausgeschlossen wurde, weil er etwa 925 m danebenlag, mit dem RMS-Fehler von 0.73 m und der Toleranz von 4.8 m.
Eine Nachricht, 99 Sekunden: Der Tippfehler in Punkt 8 erkannt und verworfen, 0.73 m RMSE bei den anderen sieben, das Ergebnis auf der Basemap.

Ich habe seinen GeoTIFF auf dieselbe Weise geprüft wie meinen, an den acht Randstrichen, die er nie gesehen hat: im Mittel 1.0 m daneben, im schlimmsten Fall 1.6 m, genau wie beim Georeferencer. Der Unterschied ist der Tippfehler. Beim Georeferencer hätte ich ihn selbst in der Residuen-Spalte entdecken müssen, und bei einem Thin-Plate-Spline hätte ich ihn überhaupt nicht entdeckt.

Es hinterließ die Punkte zudem als .points-Datei neben der Ausgabe, sodass sich dieselbe Anpassung im Georeferencer öffnet, wenn Sie einen Punkt von Hand verschieben möchten. Jede Nachricht hinterlässt einen Checkpoint im Panel, und ein Klick macht den gesamten Lauf rückgängig. Der kostenlose Plan umfasst 10 Nachrichten pro Monat, ohne API-Schlüssel und ohne Karte.

Verwenden Sie es, wenn: Sie die Punkte haben und die Anpassung, die Ausreißer-Prüfung und das Urteil in einem Schritt wollen, oder wenn Sie Kartenblätter einer Serie georeferenzieren.

Überspringen Sie es, wenn: die Karte weder lesbare Ortsnamen noch Punkte hat, die Sie ablesen können, etwa bei einer handgezeichneten Skizze. Das manuelle Setzen der Punkte in Methode 1 ist dann der einzige Weg.

AI Agent in QGIS kostenlos testen

Methode 3: Eine freihändige Überlagerung mit einem Plugin

Das Plugin Freehand raster georeferencer, Version 0.8.3, als ich seine Dokumentation gelesen habe, lässt Sie ein Bild auf die Karte legen und es von Hand verschieben, drehen und skalieren, bis es ausgerichtet ist, so wie Sie es in Google Earth tun würden. Das Ergebnis erscheint sofort über Ihren anderen Layern, und das Plugin exportiert das Bild mit einer World-Datei, wenn Sie fertig sind.

Seine README ist eindeutig zu den Grenzen: nur affine Transformationen, kein Rubber-Sheeting, keine Residuen und nur BMP-, JPEG-, PNG- und TIFF-Dateien. Sie erhalten keine Zahl, die angibt, wie weit Sie danebenliegen.

Verwenden Sie es, wenn: Sie einen gescannten Plan grob an Ort und Stelle brauchen, um ein paar Objekte nachzuzeichnen oder einem Kunden zu zeigen, wo sich etwas befand.

Überspringen Sie es, wenn: jemand auf dem Ergebnis messen wird. Verwenden Sie Methode 1.

Was Sie sich merken sollten

  • In QGIS 3.26 und neuer ist das Werkzeug unter Layer > Georeferencer. Beginnen Sie mit vier gut verteilten Punkten, Polynomial 1 und einem projizierten Ziel-CRS auf dem eigenen Datum der Karte.
  • Ein RMSE von null beweist nichts: Ein Thin-Plate-Spline erreicht ihn immer, und in meinem Test tat er das bei einer Karte, die 594 m danebenlag.
  • Rechnen Sie Residuen in Meter um (Pixel x Bodengröße eines Pixels) und vergleichen Sie sie mit dem, was die Karte verspricht, 12.2 m für ein USGS-Kartenblatt im Maßstab 1:24,000.
  • Prüfen Sie das Ergebnis an Punkten, die Sie aus der Anpassung ausgeschlossen haben. Meine lagen beim Kartenblatt von San Francisco 1947 im Mittel 1.0 m daneben.
  • Geben Sie die Punkte in dem Datum ein, das der Kartenrand nennt. NAD27 liegt in San Francisco 93 m von WGS 84 entfernt, also benötigt ein USGS-Kartenblatt von 1947 EPSG:4267.

Häufige Fragen

Wo befindet sich der Georeferencer in QGIS?

In QGIS 3.26 und neuer befindet er sich unter Layer > Georeferencer. In älteren Versionen war es Raster > Georeferencer, bereitgestellt vom GDAL-Georeferencer-Plugin, das im Plugin-Manager aktiviert werden musste. Wenn in keinem der beiden Menüs zu sehen ist, haben womöglich ein Plugin oder ein Anpassungsprofil Ihre Menüs verändert.

Wie viele Passpunkte brauche ich?

Das Minimum ist 2 für Linear und Helmert, 3 für Polynomial 1, 4 für Projective, 6 für Polynomial 2 und 10 für Polynomial 3, und das QGIS-Handbuch verlangt 10 oder mehr für einen Thin-Plate-Spline. In der Praxis verwenden Sie etwa das Doppelte des Minimums, verteilt auf die Ecken, und halten Sie einige weitere als Kontrollpunkte zurück. Ich habe 8 für Polynomial 1 verwendet und 8 weitere zur Prüfung.

Polynomial, Helmert oder Thin Plate Spline: welche?

Helmert für einen sauberen, flachen Scan, der nur gedreht und skaliert werden muss. Polynomial 1 für fast jede gedruckte Karte, da es auch eine kleine Scherung durch den Scanner aufnimmt. Thin Plate Spline nur für eine beschädigte oder handgezeichnete Karte mit vielen guten Punkten, und dann prüfen Sie es an Punkten, die Sie nicht verwendet haben, denn seine Residuen sind immer null.

Was ist ein guter RMSE?

Einer, der klein ist im Vergleich zu dem, was die Karte leisten kann. Rechnen Sie ihn in Meter um und vergleichen Sie ihn mit 0.2 mm mal Maßstabsnenner (4.8 m bei 1:24,000) oder mit dem offiziellen Standard der Karte (12.2 m für USGS-Kartenblätter im Maßstab 1:24,000). Unter einem Pixel bei einem sauberen Scan ist normal. Ein einzelner Punkt mit einem Residuum weit über den anderen ist meist ein Tippfehler oder ein falscher Klick, keine schlechte Karte.

Wie georeferenziere ich ein PDF?

Prüfen Sie zuerst, ob es das bereits ist. USGS-Topografiekarten und viele Behördenpläne sind GeoPDFs, und QGIS öffnet sie direkt an Ort und Stelle: Das San-Francisco-PDF von 1947 wurde mit seinen Koordinaten und ohne Passpunkte geladen, von GDAL mit 150 dpi gerendert, sofern Sie GDAL_PDF_DPI nicht höher setzen. Ein reines PDF hat keine Koordinaten: Exportieren Sie die Seite mit 300 dpi als PNG oder TIFF und verwenden Sie dann Methode 1.

Wie georeferenziere ich eine Karte ohne Koordinaten?

Verwenden Sie Objekte, die sich seit dem Zeichnen der Karte nicht bewegt haben, etwa Straßenkreuzungen, Brücken, Kirchen und Küstenlinien-Ecken, und übernehmen Sie ihre Koordinaten mit From Map Canvas auf einer Basemap oder auf Ihrem nationalen Orthofoto. Verteilen Sie 10 oder mehr davon über das Kartenblatt. Erwarten Sie größere Residuen als bei einem aufgedruckten Gitternetz, denn die alte Karte und die heutige Welt stimmen nicht mehr überall überein.

Der QGIS-AI-Hub sammelt, was KI in QGIS kann und nicht kann, und die AI-Agent-Anleitung behandelt den Rest des Plugins. Sobald die alte Karte an Ort und Stelle liegt, können Sie OpenStreetMap-Daten herunterladen, um sie mit den heutigen Straßen zu vergleichen, ein Sentinel-2-Bild derselben Gegend holen oder den Scan in Vektoren umwandeln.

AI Agent in QGIS kostenlos testen