C#AE投影坐标系变换

 pFeatureLayer为要素图层,gcsType代表坐标代号(例如:4214代表Beijing1954)

 

try
            {
                IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                IGeoDataset pGeoDataset = pFeatureClass as IGeoDataset;
                IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit;
                if (pGeoDatasetSchemaEdit.CanAlterSpatialReference == true)
                {
                    ISpatialReferenceFactory2 pSpaRefFactory = new SpatialReferenceEnvironmentClass();
                    IProjectedCoordinateSystem pNewProSys = pSpaRefFactory.CreateProjectedCoordinateSystem(gcsType);  
                    pGeoDatasetSchemaEdit.AlterSpatialReference(pNewProSys);
                }
            }
            catch (Exception Err)
            {
                MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个示例代码,使用 C# 实现 4326 坐标系(WGS84)到 4547 坐标系的转换: ```csharp using System; namespace CoordinateConversion { class Program { static void Main(string[] args) { // 定义 WGS84 坐标系下的经度和纬度 double longitude = 121.5237; double latitude = 31.2060; // 转换为 4547 坐标系下的 X 和 Y 坐标 double[] xy = WGS84To4547(longitude, latitude); // 输出转换后的坐标值 Console.WriteLine("X: " + xy[0]); Console.WriteLine("Y: " + xy[1]); } static double[] WGS84To4547(double longitude, double latitude) { // 定义一些常量和参数 double a = 6378137.0; // 长轴半径 double f = 1.0 / 298.257222101; // 扁率 double e2 = 2 * f - f * f; // 第一偏心率的平方 double e12 = e2 / (1 - e2); // 第二偏心率的平方 double n = f / (2 - f); // 第三偏心率 double n2 = n * n; double n3 = n2 * n; double n4 = n2 * n2; double n5 = n2 * n3; double n6 = n3 * n3; double A = a / (1 + n) * (1 + 1.0 / 4.0 * n2 + 1.0 / 64.0 * n4 + 1.0 / 256.0 * n6); double alpha = (3.0 / 2.0) * n - (27.0 / 32.0) * n3 + (269.0 / 512.0) * n5 - (66049.0 / 65536.0) * n6; double beta = (21.0 / 16.0) * n2 - (55.0 / 32.0) * n4 + (6759.0 / 4096.0) * n6; double gamma = (15.0 / 16.0) * n3 - (15.0 / 16.0) * n5 + (3465.0 / 8192.0) * n6; double delta = (35.0 / 48.0) * n4 - (175.0 / 144.0) * n6; double epsilon = (315.0 / 512.0) * n5 - (2205.0 / 2048.0) * n6; double lambda = (693.0 / 1280.0) * n6; // 将经度和纬度转换为弧度 double radLon = longitude * Math.PI / 180.0; double radLat = latitude * Math.PI / 180.0; // 计算参数 T 和 C double T = Math.Pow(Math.Tan(radLat), 2); double C = e12 * Math.Pow(Math.Cos(radLat), 2); // 计算坐标系转换后的 X 和 Y 坐标 double X = A * radLon * (1 - T + C) + 500000.0; double Y = A * (alpha * radLat - beta * Math.Sin(2.0 * radLat) + gamma * Math.Sin(4.0 * radLat) - delta * Math.Sin(6.0 * radLat) + epsilon * Math.Sin(8.0 * radLat)) + 5000000.0; return new double[] { X, Y }; } } } ``` 在这个示例中,我们定义了一个 WGS84To4547 方法,它接受 WGS84 坐标系下的经度和纬度作为参数,返回 4547 坐标系下的 X 和 Y 坐标。在方法中,我们使用了一些常量和公式来执行坐标转换。最终,我们将转换后的 X 和 Y 坐标存储在一个 double 数组中,并返回该数组。在 Main 方法中,我们调用 WGS84To4547 方法将经纬度坐标转换为 4547 坐标系下的坐标,并输出转换后的坐标值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值