Contexte C'est ma deuxième question concernant le géoréférencement des cartes raster nues afin de les visualiser à nouveau sur différents systèmes de coordonnées et en conjonction avec d'autres couches de données. La question précédente est à Convertir une image de carte arbitraire sans métadonnées en projet QGIS
Problème Mon objectif est de géoréférencer cette carte:
Il ne semble pas s'agir de Plate-Carrée. Donc, dans QGIS, j'ai créé plusieurs points de contrôle raisonnables, que pour l'intégralité j'ai attachés en bas [réf: 1]. Je fournis à QGIS Georeferencer le même SRS cible que mon fichier de projet, EPSG: 4326. J'obtiens des résultats exceptionnellement médiocres avec Helmert et les transformations polynomiales, mais j'obtiens une image raisonnable avec une spline en plaque mince (ce qui fait que la géoestimation résultante passe par mes points de contrôle). Cependant, même ce résultat est médiocre, par exemple aux latitudes plus élevées (voir la côte russe au nord du Japon). Il s'agit d'une capture d'écran de mon écran QGIS utilisant un arrière-plan Natural Earth.
Chemin alternatif J'ai essayé un exercice similaire avec l'outil beaucoup plus facile à utiliser de MapWarper: voir les résultats et les points de contrôle sur http://mapwarper.net/maps/758#Preview_Map_tab où j'obtiens de moins bons résultats (probablement en raison du fait que j'ai ajouté moins de points de contrôle).
Questions en bref
- Y a-t-il des astuces qui me manquent pour obtenir une bonne géoréférence?
- Cette projection est-elle immédiatement reconnaissable?
- Au système de coordonnées inconnu sur l'ancien dessin , il
gdaltransform
est suggéré de transformer plusieurs points de coordonnées en plusieurs SRS cibles, dans le but de découvrir les paramètres de projection utilisés pour générer la carte d'origine. J'ai essayé quelque chose comme ceci: après avoir enregistré ma liste de points QGIS, j'ai effectué un traitement de chaîne pour obtenir une liste de long / lats séparés par un espace viacat eurasian-steppe-gcp.points | tail -n+2 | cut -d, -f1-2 | sed 's/,/ /'> tmp.txt
et entrer le fichier résultant dans gdaltransform:gdaltransform -s_srs EPSG:3785 -t_srs EPSG:4326 < tmp.txt
et basculer les_srs
ett_srs
drapeaux (le projet utilise EPSG: 4326). Je sais que je tourne dans le noir, dans l'espoir d'avoir de la chance, donc je n'ai pas été surpris quand je n'ai pas pu comprendre les sorties. Quelqu'un peut-il expliquer comment j'utiliserais cette méthode pour trouver la meilleure estimation de la projection de la carte source et des paramètres de projection? Ma pensée derrière cela est que plutôt que de jouer avec une myriade de points de contrôle pour une bonne géoréférence, pourrait-il être plus facile d'obtenir une géoréférence presque parfaite avec moins de points de contrôle, en parcourant simplement tous les systèmes de coordonnées communs? Cela implique-t-il une validation croisée de chaque point par rapport à tous les autres, pour chaque CRS testé?
Je voudrais comprendre cet algorithme ou le géoréférencement afin que je puisse automatiser le processus --- Je rencontre ce problème tout le temps, et jusqu'à ce que les créateurs de contenu cessent de traiter leurs cartes comme des créations uniques à ne jamais intégrer avec d'autres contenus, je ne m'attends pas à m'arrêter.
Les références
[ref: 1] Fichier GCP QGIS:
mapX,mapY,pixelX,pixelY,enable
142.632649100000009,54.453595900000003,505.941176470588232,-95.220588235293974,1
154.934252200000003,59.559921699999997,536.411764705882206,-52.779411764705742,1
80.080158100000006,9.657192300000000,291.558823529411711,-322.661764705882206,1
10.448442600000000,57.819128900000003,21.676470588235190,-103.926470588235134,1
34.007173000000002,27.761438299999998,101.117647058823422,-244.852941176470466,1
50.950890399999999,11.862196600000001,171.852941176470495,-313.955882352941046,1
29.713217199999999,60.024133200000001,90.779411764705799,-92.499999999999829,1
60.000000000000000,0.000000000000000,208.308823529411683,-362.382352941176350,1
69.867506500000005,66.639146199999999,224.088235294117567,-33.191176470588061,1
27.276107100000001,71.049154799999997,89.147058823529306,-21.764705882352814,1
140.000000000000000,0.000000000000000,536.955882352941217,-362.926470588235190,1
20.000000000000000,0.000000000000000,43.441176470588132,-362.926470588235190,1
20.196882700000000,31.243024100000000,47.249999999999901,-231.794117647058698,1
9.171861099999999,42.848309999999998,8.073529411764603,-175.205882352941046,1
131.955786100000012,43.196468600000003,481.999999999999943,-162.691176470588090,1
73.813303700000006,45.169367200000003,256.735294117646959,-161.602941176470438,1
50.602731800000001,44.589102900000000,168.044117647058727,-167.588235294117510,1
121.394975900000006,18.941421099999999,455.882352941176407,-284.029411764705742,1
103.987047000000004,1.417439300000000,389.499999999999943,-357.485294117646959,1
109.325478599999997,55.962283100000001,380.249999999999943,-98.485294117646902,1
31.454010100000001,46.562001500000001,95.132352941176379,-158.882352941176322,1
43.639560299999999,68.844150499999998,137.573529411764611,-40.264705882352814,1
Non mise à jour
Analyse de van der Grinten J'ai écrit un outil Python pour adapter les GCP à toute projection prise en charge par Proj4 (via Pyproj) et l'ai appliqué aux quelques projections suggérées dans les réponses. Le code source (quelque peu bâclé, je m'excuse à l'avance) ainsi que les GCP mis à jour sont disponibles sur https://github.com/fasiha/steppe-map
Le van der Grinten n'a qu'un seul paramètre à régler, et voici l'image résultante (en utilisant la dernière image de Britannica, merci beaucoup pour avoir donné une carte aussi haute résolution et mise à jour (bien qu'il manque encore des données de projection)).
Van der Grinten a une erreur relative de 0,035 entre les GCP et les points les mieux ajustés, ce qui est le pire du groupe que j'ai essayé, et la superposition du littoral le confirme qualitativement.
(Cela peut être utile si vous ouvrez cette image dans son propre onglet, elle est assez haute résolution. Vous verrez également des flèches vertes indiquant les points géoréférencés (ils devraient correspondre à des repères significatifs sur l'image) ainsi que des flèches rouges indiquant où ces points sont ajustés (ils doivent correspondre aux mêmes points de repère sur la superposition du littoral) --- l'écart entre les deux peut aider l'œil à voir les différences entre l'image et l'ajustement.)
Analyse de la zone égale d'Albers Essayer la même chose avec la projection de la zone égale Albers (qui est la même que "Conique conforme Albers"? Désolé pour mon ignorance). Cet ajustement, impliquant un ajustement de paramètre à 4 dimensions, est meilleur, avec une erreur relative de 0,025, mais semble assez médiocre néanmoins.
Analyse des projections Robinson et Eckert V J'ai ajusté un certain nombre de projections pseudocylindriques prises en charge par Pyproj (tout ce que j'ai pu trouver qui avait un paramètre libre) et j'ai trouvé que les projections Robinson et Eckert V faisaient le "meilleur" en termes d'erreur relative entre les GCP et les points ajustés, tous deux avec des erreurs relatives de 0,015.
Voici le Robinson:
Et voici l'Eckert V.
Notez les écarts du littoral ajusté par rapport au littoral de l'image. Je pense qu'avec cela, je peux conclure que la carte n'est rien de ce qui précède?
Tripel Winkel: solution possible?
Après avoir essayé séquentiellement chaque projection dans ce manuel Proj de 1990 (mis à jour en 2003) ftp://ftp.remotesensing.org/proj/OF90-284.pdf je suis finalement arrivé à la projection tripel de Winkel. Cela produit les erreurs quantitatives les plus faibles (0,011) et le littoral est uniformément assez bon (ou de manière équivalente, uniformément légèrement mauvais). J'ai lu qu'il s'agit de la projection de la National Geographic Society, ce qui signifie qu'elle est célèbre, et cela ajoute du poids à la candidature de cette projection pour la carte de Britannica. Le SRS équipé: +units=m +lon_0=47.0257707403 +proj=wintri
.
(Toutes mes excuses pour avoir changé la couleur du littoral en gris. Si cela offense quelqu'un, je peux produire une version bleue.)
J'essaierai de modifier mes GCP pour essayer de réduire l'erreur plus bas.