PIE SDK坐标转换算法
1.算法功能简介
数据坐标转换是空间实体位置的位置描述,是从一种坐标系统变换到另一坐标系统的过程。通过建立两个坐标系之间一一对应关系来实现。是各种比例尺地图测量和编绘中建立地图数学基础必不可少的步骤。两个及以上的坐标转换是由极坐标参照确定维数空间。
目前国内常见的坐标转换有以下5种:大地坐标(BLH)对平面直角坐标(XYZ)、北京54、西安80及WGS84坐标的相互转换、任意两空间坐标系的转换、十进制角度和度分秒格式之间进行转换、经纬度和UTM坐标之间进行转换。
转换的方法分二维转换和三维转换;二维转换放缓是将平面坐标转换到另一个坐标系统;三维转换该方法基本操作步骤是利用公共点,也就是同时具有WGS84直角坐标和地方坐标的直角坐标的点位,一般需要3个以上重合点,通过布尔莎模型(或其他模型)进行计算,得到从一个系统转换到另一个系统中的平移参数、旋转参数和比例因子。三维转换方法可使你确定最多7个转换参数(3个平移参数,3个旋转参数和1个比例因子)。用户也可以选择确定几个参数。对于三维转换方法,可以仅用3个公共点来计算转换参数,但使用4个以上点可得到更多的观测值并且可以计算残差。用这种方法计算转换参数的优点在于能够保持GPS测量的精度,只要地方坐标精度足够(包括高程),这种方法能适用任何区域。
PIE支持坐标算法功能的执行,下面对该算法功能进行介绍。
2.算法功能实现说明
2.1 实现步骤
第一步 |
算法参数设置 |
第二步 |
算法执行 |
第三步 |
结果显示 |
2.2 算法参数
C#算法DLL |
PIE.CommonAlgo.dll |
|
C#算法名称 |
PIE.CommonAlgo.RasterToContourContructAlgo |
|
参数结构体 |
RasterToContourContruct_Exchange_Info |
|
参数说明 |
||
BandIndex |
Int |
波段 |
BAutoSetStartEndValue |
bool |
是否自动计算起始终止值 |
BClosed |
bool |
是否闭合 |
BGenerateContourFace |
bool |
是否生成等值面 |
BGenerateContourLine |
bool |
是否生成等值线 |
EndValue |
double |
终止值 |
InputRasterDataset |
IRasterDataset |
输入栅格数据集 |
OutputContourFaceFDataset |
IFeatureDataset |
输出等值面(内存) |
OutputContourLineFDataset |
IFeatureDataset |
输出等值线 (内存) |
SampleRatio |
int |
采样比 |
StartValue |
double |
起始值 |
ValueInterval |
double |
间隔 |
2.3 示例代码
数据路径 |
百度云盘地址下/ PIE示例数据/栅格数据/04.World/World.tif |
示例代码 |
|
1 /// <summary> 2 /// 投影转换 本例子采用的FY4A其中一个通道 坐标系位标称投影 将标称投影转换位WGS-1984坐标系 3 /// </summary> 4 public void ProjectionTrans() 5 { 6 PIE.AxControls.DataPrjTransDialog frmDataPrjTrans = new AxControls.DataPrjTransDialog(); //数据坐标转换界面 7 if (frmDataPrjTrans.ShowDialog() != 1) return; 8 9 PIE.CommonAlgo.DataProjectTrans_Exchange_Info info = new CommonAlgo.DataProjectTrans_Exchange_Info(frmDataPrjTrans.GetParams()); //数据坐标转换参数 10 if (info == null) return; 11 12 string strExt = System.IO.Path.GetExtension(info.strInputFile); 13 PIE.SystemAlgo.ISystemAlgo algo = null; 14 PIE.DataSource.IDataset dataset = PIE.DataSource.DatasetFactory.OpenDataset(info.strInputFile, DataSource.OpenMode.ReadOnly); 15 if (dataset == null) return; 16 17 //判断数据坐标转换是栅格还是矢量数据 18 if (dataset is PIE.DataSource.IRasterDataset) 19 { 20 algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImgProjectTransAlgo"); 21 } 22 else if (dataset is PIE.DataSource.IFeatureDataset) 23 { 24 algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ShapeDataCoordTransformAlgo"); 25 } 26 (dataset as IDisposable).Dispose(); 27 dataset = null; 28 if (algo == null) return; 29 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents; 30 algo.Name = "数据坐标转换"; 31 algo.Params = info; 32 bool result = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo); 33 if (result) 34 { 35 MessageBox.Show("执行成功"); 36 ILayer layer = LayerFactory.CreateDefaultLayer(info.strOutputFile); 37 if (layer == null) return; 38 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); 39 m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 40 } 41 } |
2.4 示例截图
图1:源数据坐标系统信息
图2:数据坐标转换功能界面
图3:坐标转换后空间参考系统
图4:结果图
注意:坐标转换需要设置参数,可以在图2 界面最下面的其参数设置七参数,不知道可以选默认Default,最好设置七参数,本示例用的是标称投影Geostationary_Satellite转WGS-1984,七参数设置默认。