Интересно, что один клиент предоставил входной параметр epsg:2180 тогда все взорвалось.
Похоже, что для нескольких преобразований epsg вывод меняется местами. Вот команды, которые я использовал, чтобы это доказать:
Сначала получите строку проекции:
Код: Выделить всё
$ projinfo epsg:2180
PROJ.4 string:
+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs
Код: Выделить всё
echo "55.12578267 16.77291767" | cs2cs epsg:4326 +to +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs -f %.4f
358037,8085
809219,1725
0,0000
Однако, если я использую простую команду:
Код: Выделить всё
echo "55.12578267 16.77291767" | cs2cs epsg:4326 epsg:2180 -f %.4f
809219.1725
358037.8085
0.0000
Проблема на этом не заканчивается: в C++ я использую ту же библиотеку, та же проблема. Вопрос в том, как я могу убедиться, что Easting будет первым параметром?
Я уже пробовал использовать proj_normalize_for_visualization, поскольку в документации предполагается, что это будет делать замена координат, но на самом деле это не меняет результат.
Код: Выделить всё
#include
#include
#include
int main(int argc, char** argv)
{
PJ_CONTEXT* projContext_m = proj_context_create();
// hardcode epsg (in reality it is user defined)
int epsg_p = 2180;
char _buff[100];
snprintf(_buff, sizeof (_buff), "EPSG:%d", epsg_p);
PJ* projEPSG_m = proj_create_crs_to_crs(projContext_m,
"EPSG:4326",
_buff, NULL);
if (projEPSG_m != nullptr)
{
proj_normalize_for_visualization(projContext_m, projEPSG_m);
}
// fake input (in reality it is user defined)
PJ_COORD input_p;
input_p.xy.x = 55.12578267;
input_p.xy.y = 16.77291767;
PJ_COORD result = proj_trans(projEPSG_m, PJ_FWD, input_p); // input_p is the coordinate we need to transform
// we assume `result.x` is the Easting
printf("Easting: %f, Northing %f", result.xy.x, result.xy.y);
return 0;
}
Восточное положение: 809219.172518, северное 358037.808510
Что мне следует сделать, чтобы заставить result.x всегда быть восточным?
Подробнее здесь: https://stackoverflow.com/questions/791 ... oordinates
Мобильная версия