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?
źródło
Odpowiedzi:
Nie ma transformacji między współrzędnymi, ale do / z pozycji pikseli, tak: zakładamy px, py jest pozycją piksela na twojej mapie, podczas gdy geox i geoy są współrzędnymi świata rzeczywistego. Mamy również xOff, yOff pobrane z TFW, z -180, 90 plus xsize i ysize, z 0,02222222222222, -0,02222222222222
powyższe dwie pseudo-funkcje informują nas o geolokalizacji (geox, geoy) dla danej pozycji w pikselach i, myślę, że o to prosili, w pikselach dla danej geolokalizacji. Jest to możliwe tylko dlatego, że „carree płytowy” traktuje stopnie geograficzne o długości i szerokości geograficznej jako współrzędne metryczne na płaszczyźnie (w prostokątnym układzie współrzędnych). Jeśli narysujesz siatkę ziemi, dostaniesz kwadraty o równej wielkości (i tak właśnie wygląda twój obraz mapy). Po edycji moich błędów, teraz dostaję z lon / lat (50.4546600, 30.5238000) Dostaję (10370.459803704598, 2676.42902676429). Rzuć go na liczbę całkowitą, jeśli potrzebujesz indeksu pikseli.
źródło
px = (geox + xOff) / xsize
, na przykład, który byłby(50.4546600 + (-180)) / 0.02222222222222
ujemny i mniej więcej równy5830
. Który nie jest2113.3936363636362
. Proszę wyjaśnić dalej lub poprawić odpowiedź.