Buradan bir haritam var . Sadece rastgele lon / lat çifti harita üzerinde piksel dönüştürmek istiyorum (ayrıca ters dönüşüm yapmak için yeteneği). Haritalar .tfw dosyası ve projeksiyon bilgisi ile birlikte gelir, işte burada:
0.02222222222222
0.00000000000000
0.00000000000000
-0.02222222222222
-180.00000000000000
90.00000000000000
ve projeksiyon bilgisi:
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
Haritacılıkla ilgili şeylerde tamamen yeniyim ve anladığım kadarıyla, önce WGS84'den (lon / lat çifti) Coğrafi projeksiyona (aynı değil mi?) Dönüşümü yapmalıyım. Bana öyle geliyor ki, aslında yukarıdaki projeksiyon bilgisinde küre yarıçapı 6370997 ve Plate Carree projeksiyonu için bulduğum spatialreference.com sayfasından farklı. Her neyse, DotSpatial.Projections kütüphanesinin aşağıdaki kodla benim için yapabileceğini buldum:
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);
Ve sonra ortaya çıkan koordinatları dünya dosyasını kullanarak haritadaki piksele çevirmeliyim. Aşağıdaki formülün farkındayım:
Ama öyle görünüyor ki dünya dosyasında metre olmayan dereceler var ve onlarla ne yapacağımı bilmiyorum. Genel olarak doğru şeyleri mi yapıyorum? Yoksa verilerim göz önüne alındığında daha kolay bir yol var mı?