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);

}

posted @ 2020-02-28 16:26  PIESAT  阅读(468)  评论(0编辑  收藏  举报