C++ GDAL自带了GIS的坐标系转换功能,可以在 EPSG系统之内相互转换
以下举例 EPSG 4545 和 EPSG 4326 之间的互转
目录(Contents)
EPSG 4545 转换 EPSG 4326
bool EPSG_4545_To_4326(double X, double Y, double& Longitude, double& Latitude)
{
OGRSpatialReference SrcSpatialRef, DstSpatialRef;
SrcSpatialRef.importFromEPSG(4545);
DstSpatialRef.importFromEPSG(4326);
OGRCoordinateTransformation* CoordTransform = OGRCreateCoordinateTransformation(&SrcSpatialRef, &DstSpatialRef);
const int Succeed = CoordTransform->Transform(1, &Y, &X);
OGRCoordinateTransformation::DestroyCT(CoordTransform);
Longitude = X;
Latitude = Y;
return Succeed != 0;
}
EPSG 4326 转换 EPSG 4545
bool EPSG_4326_To_4545(double Longitude, double Latitude, double & X, double & Y)
{
OGRSpatialReference SrcSpatialRef, DstSpatialRef;
SrcSpatialRef.importFromEPSG(4326);
DstSpatialRef.importFromEPSG(4545);
OGRCoordinateTransformation* coordTransform = OGRCreateCoordinateTransformation(&SrcSpatialRef, &DstSpatialRef);
const int Succeed = coordTransform->Transform(1, &Latitude, &Longitude);
OGRCoordinateTransformation::DestroyCT(coordTransform);
X = Longitude;
Y = Latitude;
return Succeed != 0;
}