【ArcGIS Pro二次开发】设置坐标系和自定义坐标

GIS操作中,坐标系是基础设置。本文将通过代码示例说明如何设置坐标系并创建自定义坐标系。感兴趣的可加入【QQ群:208277188】讨论ArcGIS Pro SDK及其二次开发。

一、使用坐标系ID(WKT)进行设置

1、直接使用Builder构造器进行设置,此方法不需要在MCT中运行:

SpatialReference _zbx = SpatialReferenceBuilder.CreateSpatialReference(3857);//3857为坐标系对应的ID

2、在构造函数中进行设置,此方法需要在MCT中运行:

QueuedTask.Run(() =>
{
    using (SpatialReferenceBuilder srBuilder = new SpatialReferenceBuilder(3857))
    {
        _zbx = srBuilder.ToSpatialReference();
    }
});

二、使用WKT字符串进行设置

首先对坐标系相关参数进行设置。

string wkt = "GEOGCS[\"MyGCS84\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Radian\",1.0]]";//定义参数

以上各参数主要含义如下:

WKT格式是一种文本格式,用于描述二维和三维几何对象的空间特征。WKT是“Well-Known Text”的缩写,是一种开放的国际标准,由Open Geospatial Consortium(OGC)定义和维护。WKT格式通常用于在计算机系统之间交换空间数据,例如在GIS(地理信息系统)软件和数据库之间。WKT格式包括一些基本的几何对象,例如点、线、多边形和圆形,以及一些复合对象,例如多边形集合和几何对象集合。

下面是这个字符串的各个部分:

  1. GEOGCS‌:表示这是一个地理坐标系(Geographic Coordinate System)。地理坐标系使用经纬度来定义地球表面上的位置。

  2. "MyGCS84"‌:是这个地理坐标系的名称,由用户自定义。

  3. DATUM‌:表示基准面,它定义了如何将椭球体与地球实际位置对应起来。这里使用的基准面是"D_WGS_1984"

  4. SPHEROID‌:表示椭球体,它定义了地球的形状。这里使用的椭球体是"WGS_1984",其长半轴(赤道半径)为6378137.0米,扁率倒数(即1/f)为298.257223563(因此扁率f=1/298.257223563)。这个椭球体是WGS84坐标系的标准椭球体。

  5. PRIMEM‌:表示本初子午线(Prime Meridian)。这里设置为"Greenwich"(格林尼治),其经度为0.0度。

  6. UNIT‌:表示坐标的单位。这里设置为"Radian"(弧度),并且转换因子为1.0。这意味着该坐标系中的经纬度值是以弧度(而非度)为单位。

1、直接使用Builder构造器进行设置,此方法不需要在MCT中运行:

SpatialReference _zbx = SpatialReferenceBuilder.CreateSpatialReference(wkt);

2、在构造函数中进行设置,此方法需要在MCT中运行:

QueuedTask.Run(() =>
{
    using (SpatialReferenceBuilder builder = new SpatialReferenceBuilder(wkt))
    {
        SpatialReference _zbx = builder.ToSpatialReference();
    }
});

三、默认WGS84坐标系使用

SpatialReference _zbxwgs84 = SpatialReferences.WGS84;

四、创建直角坐标系

1、直接使用Builder构造器进行设置,此方法不需要在MCT中运行:

SpatialReference _tyxbz = SpatialReferenceBuilder.CreateSpatialReference(4326, 115700);

 2、在构造函数中进行设置,此方法需要在MCT中运行:

QueuedTask.Run(() =>
 {
     using (SpatialReferenceBuilder sb = new SpatialReferenceBuilder(4326, 115700))
     {
         _tyzbx = sb.ToSpatialReference();
     }
 });
  • 参数含义:
  • 4326:WGS84地理坐标系(EPSG代码)
  • 115700:EGM2008高程基准(EPSG代码)

五、使用WKT字符串进行直角坐标系设置

1、定义相应参数:

string custom_tyzbxWkt = @"VERTCS[""SHD_height"",VDATUM[""Singapore_Height_Datum""],PARAMETER[""Vertical_Shift"",-1.23],PARAMETER[""Direction"",-1.0],UNIT[""Meter"",1.0]]";

2、直接使用Builder构造器进行设置,此方法不需要在MCT中运行:

SpatialReference _tyzbx = SpatialReferenceBuilder.CreateSpatialReference(4326, custom_tyzbxWkt);

3、在构造函数中进行设置,此方法需要在MCT中运行:

QueuedTask.Run(() =>
 {
     using (SpatialReferenceBuilder sb = new SpatialReferenceBuilder(4326, custom_tyzbxWkt))
     {
         _tyzbx = sb.ToSpatialReference();
     }
 });

 参数含义:

坐标系类型VERTCS垂直坐标系(Vertical Coordinate System)
坐标系名称"SHD_height""SHD高程"(Singapore Height的缩写)
垂直基准VDATUM["Singapore_Height_Datum"]新加坡高程基准(新加坡本地化垂直参考系)
垂直偏移参数PARAMETER["Vertical_Shift",-1.23]垂直校正值:‌-1.23米‌(相对于某个参考面的高度调整量)
方向参数PARAMETER["Direction",-1.0]高程方向:‌-1.0‌(表示高程值与实际地形方向一致,即正数=海拔升高)
单位UNIT["Meter",1.0]高程单位:‌‌(国际标准单位)

 六、使用字符串创建投影坐标系

1、定义参数

string custom_tyzbxWkt = "PROJCS[\"WebMercatorMile\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Mercator_Auxiliary_Sphere\"],PARAMETER[\"False_Easting\",0.0],PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",0.0],PARAMETER[\"Standard_Parallel_1\",0.0],PARAMETER[\"Auxiliary_Sphere_Type\",0.0],UNIT[\"Mile\",1609.344000614692]]";

2、直接使用Builder构造器进行设置,此方法不需要在MCT中运行:

SpatialReference spatialReference = SpatialReferenceBuilder.CreateSpatialReference(custom_tyzbxWkt);

将此投影转为地埋坐标系: 

SpatialReference gcs = spatialReference.Gcs;

 3、在构造函数中进行设置,此方法需要在MCT中运行:

QueuedTask.Run(() =>
{
    using (SpatialReferenceBuilder sb = new SpatialReferenceBuilder(custom_tyzbxWkt))
    {
        spatialReference = sb.ToSpatialReference();
    }
});

4、参数含义:

string custom_tyzbxWkt = "PROJCS[\"WebMercatorMile\", // 投影坐标系名称:'Web墨卡托英里'
    GEOGCS[\"GCS_WGS_1984\",         // 地理坐标系:WGS84
        DATUM[\"D_WGS_1984\",        // 基准面:WGS1984
            SPHEROID[\"WGS_1984\",6378137.0,298.257223563] // 椭球体:长半轴6378137m,扁率倒数298.257
        ],
        PRIMEM[\"Greenwich\",0.0],   // 本初子午线:格林尼治
        UNIT[\"Degree\",0.0174532925199433] // 角度单位:度(弧度换算系数)
    ],
    PROJECTION[\"Mercator_Auxiliary_Sphere\"], // 投影类型:辅助球墨卡托
    PARAMETER[\"False_Easting\",0.0],          // 东伪偏移:0
    PARAMETER[\"False_Northing\",0.0],         // 北伪偏移:0
    PARAMETER[\"Central_Meridian\",0.0],       // 中央经线:0°(格林尼治)
    PARAMETER[\"Standard_Parallel_1\",0.0],    // 标准纬线:0°(赤道)
    PARAMETER[\"Auxiliary_Sphere_Type\",0.0],  // 辅助球类型:0(使用椭球体长半轴)
    UNIT[\"Mile\",1609.344000614692]           // 线性单位:英里(1英里=1609.344m)
]";

以上方法主要使用ArcGIS Pro SDK进行相关坐标系的设置。后续文章将会更新坐标系的相应属性的使用方法。【QQ群:208277188

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值