Ich habe eine Karte von hier . Ich möchte in der Lage sein, einfach ein beliebiges Lon / Lat-Paar in Pixel auf der Karte zu konvertieren (auch die Möglichkeit, eine umgekehrte Konvertierung durchzuführen). Die Karten werden mit .tfw-Datei- und Projektionsinformationen geliefert. Hier ist es:
0.02222222222222
0.00000000000000
0.00000000000000
-0.02222222222222
-180.00000000000000
90.00000000000000
und Projektionsinfo:
Projection: Plate Carree aka Geographic or "LatLong"
Earth ellipsoid: Sphere, radius 6370997 m
Datum: WGS84
Extent: 180 West to 180 East, 90 North to 90 South
Size: 16,200 height samples wide x 8,100 high
Resolution: 2.47 km/pixel
Ich bin völlig neu in kartografischem Material, und soweit ich herausgefunden habe, sollte ich zuerst die Transformation von WGS84 (Lon / Lat-Paar) zu geografischer Projektion durchführen (sind sie nicht gleich?). Es scheint mir, dass sie tatsächlich gleich sind, aber der Kugelradius in den obigen Projektionsinformationen beträgt 6370997 und unterscheidet sich von der Seite "räumlich referenz.com", die ich für die Plate Carree-Projektion gefunden habe. Wie auch immer, ich habe festgestellt, dass die DotSpatial.Projections-Bibliothek dies für mich mit dem folgenden Code tun kann:
var kievCoordinates = new[] { 50.4546600, 30.5238000 };
var z = new[] { 1.0 };
var wgs84 = KnownCoordinateSystems.Geographic.World.WGS1984;
var dest = new ProjectionInfo();
dest.ParseEsriString(
"PROJCS[\"WGS 84 / Plate Carree (deprecated)\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Equidistant_Cylindrical\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]");
Reproject.ReprojectPoints(kievCoordinates, z, wgs84, dest, 0, 1);
Und dann muss ich die resultierenden Koordinaten mithilfe der Weltdatei in Pixel auf der Karte übersetzen. Mir ist folgende Formel bekannt:
Aber es scheint, dass es Grade nicht Meter in der Weltdatei gibt und ich weiß nicht, was ich damit machen soll. Mache ich im Allgemeinen die richtigen Dinge? Oder gibt es angesichts meiner Daten einen einfacheren Weg?
quelle
Antworten:
Es gibt keine Transformation zwischen Koordinaten, sondern zu / von Pixelpositionen wie folgt: Wir gehen davon aus, dass px, py eine Pixelposition in Ihrer Karte ist, während Geox und Geoy Koordinaten der realen Welt sind. Wir haben auch xOff, yOff aus dem tfw mit -180, 90 plus xsize und ysize mit 0,02222222222222, -0,02222222222222
Die obigen zwei Pseudofunktionen geben uns die Geolokalisierung (Geox, Geoy) für eine bestimmte Pixelposition und, glaube ich, die Pixelposition für eine bestimmte Geolokalisierung an. Dies ist nur möglich, weil der "Plate Carree" geografische Grade mit Längen- und Breitengrad als metrische Koordinaten in einer Ebene (innerhalb eines rechteckigen Koordinatensystems) behandelt. Wenn Sie das Raster der Erde zeichnen würden, würden Sie gleich große Quadrate erhalten (und so sieht Ihr Kartenbild aus). Nachdem ich meine Fehler bearbeitet habe, erhalte ich jetzt mit lon / lat (50.4546600, 30.5238000) (10370.459803704598, 2676.42902676429). Wandeln Sie es in eine Ganzzahl um, wenn Sie Pixelindizes benötigen.
quelle
px = (geox + xOff) / xsize
, für Ihr Beispiel wäre(50.4546600 + (-180)) / 0.02222222222222
das negativ und ungefähr gleich5830
. Welches ist nicht2113.3936363636362
. Bitte erläutern Sie weiter oder korrigieren Sie die Antwort.