Mam stąd mapę . Chcę być w stanie po prostu przekonwertować dowolną parę lon / lat na piksele na mapie (także możliwość wykonania odwrotnej konwersji). Mapy zawierają plik .tfw i informacje o projekcji, oto:
0.02222222222222
0.00000000000000
0.00000000000000
-0.02222222222222
-180.00000000000000
90.00000000000000
i informacje o projekcji:
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
Jestem całkowicie nowy w sprawach związanych z kartografią i, o ile się zorientowałem, powinienem najpierw dokonać transformacji z WGS84 (para lon / lat) do projekcji geograficznej (czyż nie są one takie same?). Wydaje mi się, że są one w rzeczywistości takie same, ale promień kuli w powyższych informacjach o projekcji wynosi 6370997 i różni się od strony spatialreference.com, którą znalazłem dla projekcji Plate Carree. W każdym razie znalazłem, że biblioteka DotSpatial.Projections może to dla mnie zrobić za pomocą następującego kodu:
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);
A potem muszę przetłumaczyć wynikowe współrzędne na piksele na mapie za pomocą pliku świata. Mam świadomość następującej formuły:
Ale wydaje się, że w pliku świata są stopnie, a nie metry i nie wiem, co z nimi zrobić. Czy ogólnie robię właściwe rzeczy? Czy istnieje łatwiejszy sposób, biorąc pod uwagę moje dane?