PIE-SDK For C++ Geometry的坐标转换

1. 基于SpatialReference对象的坐标转换

1.1 示例简介

        Geometry类是所有几何形体对象的父类,它是一个抽象类,IGeometry接口定义了所有的几何对象都有的方法和属性。

下面介绍基于Geometry对象的坐标转换的主要接口。

Transform方法

函数原型:

bool Transform(ISpatialReference spatialReference);

bool Transform(CoordinateTransformation coordTransform);

函数说明:

 该方法用于几何体的投影转换,当参数为坐标转换对象时投影转换过程中会忽略原来的空间参考。

参数说明:

名称

说明

spatialReference

空间参考对象

coordTransform

坐标转换对象

返回值

投影转换成功时为true,否则为false

1.2 示例代码

项目路径

百度云盘地址下/PIE示例程序/SpatialReference. CoordinateTransform

视频路径

百度云盘地址下/PIE视频教程/ Geometry的坐标转换avi

示例代码

void PIEMainWindow::On_ActionCoordinateTransform_Triggered(bool checked)

{

    SysGeometry::SpatialReferencePtr webMercator= SysGeometry::SpatialReferenceFactory::CreateSpatialReference(900913); // Web墨卡托投影

    SysGeometry::SpatialReferencePtr wgs = SysGeometry::SpatialReferenceFactory::CreateSpatialReference(4326); // WGS84

 

    SysGeometry::PointPtr m_Point = new SysGeometry::Point();

    m_Point->SetSpatialReference(wgs);

    m_Point->SetX(116.40);

    m_Point->SetY(39.90);

    SysGeometry::GeometryPtr geometryPtr = m_Point;

    bool flag=geometryPtr->Transform(webMercator);

}

2. 基于CoordinateTransformation对象的坐标转换

2.1 示例简介

   同一个地图上显示的地理数据的空间参考必须是一致的,因此需要实现空间坐标系的相互转换。CoordinateTransformation主要实现了获取源坐标系统和目标坐标系统、实现坐标转换的方法。

   下面对基于CoordinateTransformation对象的坐标转换的方法进行介绍。

   TransformEx方法

函数原型:

    bool TransformEx(int count, double* pX, double* pY, double* pZ=nullptr, int* pSuccess=nullptr);

   函数说明:

     该方法用于坐标系统的坐标转换。

参数说明:

名称

说明

count

要转换的个数

pX

X坐标

pY

Y坐标

pZ

Z坐标

pSuccess

转换结果数组

返回值

坐标转换是否成功,转换成功返回1,否则返回0

2.2 示例代码

示例代码

private void CoordinateTransformationTest()

{

QString NOMINAL = "PROJCS["Geostationary_Satellite",GEOGCS["GCS_unnamed ellipse",DATUM["D_unknown",SPHEROID["Unknown",6378137,298.2570248822731]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Geostationary_Satellite"],PARAMETER["central_meridian",104.7],PARAMETER["satellite_height",35785863],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1]]";

    QString WG84 = "GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]";

 

    SysGeometry::SpatialReferencePtr nom = SysGeometry::SpatialReferenceFactory::CreateSpatialReference(NOMINAL);

    SysGeometry::SpatialReferencePtr wgs = SysGeometry::SpatialReferenceFactory::CreateSpatialReference(WG84);

 

    SysGeometry::CoordinateTransformationPtr ptrCT = new SysGeometry::CoordinateTransformation(wgs,nom);

    double* sourceX = new double[2];

    sourceX[0] = 116.40; sourceX[1] = 121.47;

    double* sourceY = new double[2];

    sourceY[0] = 39.90; sourceY[1] = 31.23;

    double* sourceZ = new double[2];

    sourceZ[0] = 0; sourceZ[1] = 0;

    bool flag= ptrCT->TransformEx(2, sourceX, sourceY, sourceZ);

}

原文地址:https://www.cnblogs.com/PIESat/p/12377766.html