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

    }

  • 相关阅读:
    SpringBoot,来实现MySQL读写分离技术
    range范围
    tuple元组
    序列通用操作及可变序列通用操作
    list列表
    数据
    python基础知识
    charm写代码时添加快捷键
    2、添加到项目里 在⚙图标里选择Add Remote...charm初期设置(远程服务器)
    5、优化
  • 原文地址:https://www.cnblogs.com/PIESat/p/12377766.html
Copyright © 2020-2023  润新知