Tengo un mapa de aquí . Quiero poder convertir simplemente pares arbitrarios de lon / lat a píxeles en el mapa (también la capacidad de realizar conversiones inversas). Los mapas vienen con el archivo .tfw y la información de proyección, aquí está:
0.02222222222222
0.00000000000000
0.00000000000000
-0.02222222222222
-180.00000000000000
90.00000000000000
e información de proyección:
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
Soy completamente nuevo en cosas relacionadas con la cartografía, y por lo que descubrí, primero debería hacer la transformación de WGS84 (par lon / lat) a proyección geográfica (¿no son lo mismo?). Me parece que son iguales, en realidad, pero el radio de la esfera en la información de proyección anterior es 6370997 y es diferente de la página spatialreference.com que encontré para la proyección Plate Carree. De todos modos, encontré la biblioteca DotSpatial.Projections puede hacer esto por mí, con el siguiente código:
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);
Y luego debo traducir las coordenadas resultantes a píxeles en el mapa usando el archivo mundial. Soy consciente de la siguiente fórmula:
Pero parece que hay grados, no metros en el archivo mundial y no sé qué hacer con ellos. En general, ¿estoy haciendo las cosas bien? ¿O hay una manera más fácil, dados mis datos?
fuente
Respuestas:
No hay transformación entre las coordenadas, sino hacia / desde las posiciones de píxeles, de esta manera: asumimos que px, py es una posición de píxeles en su mapa, mientras que geox y geoy son coordenadas del mundo real. También tenemos xOff, yOff tomado del tfw, con -180, 90 plus xsize e ysize, con 0.02222222222222, -0.02222222222222
las dos pseudo funciones anteriores nos dicen la geolocalización (geox, geoy) para una posición de píxel dada y, creo que eso es lo que solicitó, la posición de píxel para una geolocalización dada. Esto solo es posible, porque la "placa de placa" trata los grados geográficos con longitud y latitud como coordenadas métricas en un plano (dentro de un sistema de coordenadas rectangular). Si dibujaras la retícula de la tierra, obtendrías cuadrados de igual tamaño (y así es como se ve tu imagen del mapa). Después de editar mis errores, ahora obtengo con lon / lat (50.4546600, 30.5238000) obtengo (10370.459803704598, 2676.42902676429). Conviértalo a entero, si necesita píxeles indizados.
fuente
px = (geox + xOff) / xsize
, por ejemplo, sería(50.4546600 + (-180)) / 0.02222222222222
negativo y aproximadamente igual5830
. Que no es2113.3936363636362
. Por favor, explique más o corrija la respuesta.