Saya punya peta dari sini . Saya ingin dapat dengan mudah mengkonversi pasangan lon / lat sewenang-wenang ke piksel pada peta (juga kemampuan untuk melakukan konversi balik). Peta datang dengan file .tfw dan info proyeksi, ini dia:
0.02222222222222
0.00000000000000
0.00000000000000
-0.02222222222222
-180.00000000000000
90.00000000000000
dan info proyeksi:
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
Saya benar-benar baru dalam hal-hal yang berkaitan dengan kartografi, dan sejauh yang saya tahu saya harus terlebih dahulu melakukan transformasi dari WGS84 (pasangan lon / lat) ke proyeksi Geografis (bukankah sama?). Sepertinya saya sama, sebenarnya, tetapi radius sphere dalam info proyeksi di atas adalah 6370997 dan berbeda dari halaman spatialreference.com yang saya temukan untuk proyeksi Plate Carree. Lagi pula, saya menemukan perpustakaan DotSpatial.Projections dapat melakukan ini untuk saya, dengan kode berikut:
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);
Dan kemudian saya harus menerjemahkan koordinat yang dihasilkan ke piksel pada peta menggunakan file dunia. Saya mengetahui rumus berikut:
Tetapi tampaknya ada derajat bukan meter dalam arsip dunia dan saya tidak tahu apa yang harus dilakukan dengan mereka. Secara umum, apakah saya melakukan hal yang benar? Atau ada cara yang lebih mudah, mengingat data saya?
sumber
Jawaban:
Tidak ada transformasi antara koordinat tetapi ke / dari posisi piksel, seperti ini: kami menganggap px, py adalah posisi piksel di peta Anda, sementara geox dan geoy adalah koordinat dunia nyata. Kami juga memiliki xOff, yOff diambil dari tfw, dengan -180, 90 plus xsize dan ysize, dengan 0,02222222222222, -0,02222222222222
dua fungsi pseudo di atas memberi tahu kami geolokasi (geox, geoy) untuk posisi piksel yang diberikan, dan, saya pikir itulah yang Anda minta, posisi piksel untuk geolokasi yang diberikan. Ini hanya mungkin, karena "plat carree" memperlakukan derajat geografis dengan garis bujur dan garis lintang sebagai koordinat metrik pada bidang (dalam sistem koordinat persegi panjang). Jika Anda akan menggambar graticule bumi, Anda akan mendapatkan kotak berukuran sama (dan seperti itulah gambar peta Anda suka). Setelah mengedit kesalahan saya, sekarang saya dapatkan dengan lon / lat (50.4546600, 30.5238000) saya dapatkan (10370.459803704598, 2676.42902676429). Keluarkan ke integer, jika Anda membutuhkan piksel.
sumber
px = (geox + xOff) / xsize
, untuk contoh Anda akan(50.4546600 + (-180)) / 0.02222222222222
yang negatif dan kira-kira sama5830
. Yang mana tidak2113.3936363636362
. Tolong, jelaskan lebih lanjut, atau koreksi jawabannya.