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格式包括一些基本的几何对象,例如点、线、多边形和圆形,以及一些复合对象,例如多边形集合和几何对象集合。
下面是这个字符串的各个部分:
-
GEOGCS
:表示这是一个地理坐标系(Geographic Coordinate System)。地理坐标系使用经纬度来定义地球表面上的位置。 -
"MyGCS84"
:是这个地理坐标系的名称,由用户自定义。 -
DATUM
:表示基准面,它定义了如何将椭球体与地球实际位置对应起来。这里使用的基准面是"D_WGS_1984"
。 -
SPHEROID
:表示椭球体,它定义了地球的形状。这里使用的椭球体是"WGS_1984"
,其长半轴(赤道半径)为6378137.0米,扁率倒数(即1/f)为298.257223563(因此扁率f=1/298.257223563)。这个椭球体是WGS84坐标系的标准椭球体。 -
PRIMEM
:表示本初子午线(Prime Meridian)。这里设置为"Greenwich"
(格林尼治),其经度为0.0度。 -
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】