C# AE 自定义投影坐标

这篇博客探讨了GIS中的坐标系统,包括CGCS2000坐标系和3度Gauss-Kruger投影。文章详细解释了WKID和WKT两种坐标系表示方式,并提供了创建自定义投影坐标系统的代码示例,包括在ArcGIS中进行不同坐标系间的转换方法。此外,还讨论了EPSG和WKID在空间参考中的作用以及投影变换的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文献

(25条消息) GIS入门——说说坐标系的事儿_巫行云的博客-优快云博客_cgcs2000 gk zone

CGCS2000 / 3-degree Gauss-Kruger CM 84E - EPSG:4537

http://t.csdn.cn/kaZ2L

空间参考系统与WKT解析 - pangbangb - 博客园 (cnblogs.com)

EPSG是什么?WKT是什么?SRID是什么?EPSG、WKT、SRID概念 - 知乎 (zhihu.com)

WKT - JackGIS - 博客园 (cnblogs.com)

(25条消息) ArcGIS中我国常用的坐标系统WKID列表_鱿小鱼儿的博客-优快云博客_arcgis用什么坐标系

(25条消息) EPSG和WKID空间参考之--坐标系简单理解_GIS哼哈哈的博客-优快云博客_epsg

(25条消息) ArcGIS中3度带和6度带投影变换方法及跨带投影问题_巫行云的博客-优快云博客_arcgis3度带转6度带

在ArcGIS中不同坐标系之间的转换 - 知乎 (zhihu.com)

(25条消息) ArcGIS教程:如何为跨带数据投影_地理国情监测云平台的博客-优快云博客

1、wkid

wkid 是AE可以转换成投影坐标系的一种字符串格式。(注意投影坐标系和地理坐标系的不同!)

 

PROJCS["CGCS2000 / 3-degree Gauss-Kruger CM 75E",
    GEOGCS["China Geodetic Coordinate System 2000",
        DATUM["China_2000",
            SPHEROID["CGCS2000",6378137,298.257222101,
                AUTHORITY["EPSG","1024"]],
            AUTHORITY["EPSG","1043"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4490"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",75],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","4534"]]

使用上述字符串来定义投影

 public static ISpatialReference CreateSpatialRefFromPrjContent(double central_meridian)
        {
             string prjContent = "PROJCS[\"CGCS2000Gauss-Kruger \"," +
              "GEOGCS[\"GCS_China Geodetic Coordinate System 2000\"," +
              "DATUM[\"D_China_2000\",SPHEROID[\"CGCS2000\",6378137,298.257222101]]," +
              "PRIMEM[\"Greenwich\",0]," +
              "UNIT[\"Degree\",0.017453292519943295]]," +
              "PROJECTION[\"Gauss_Kruger\"]," +
              "PARAMETER[\"latitude_of_origin\",0]," +
              "PARAMETER[\"central_meridian\"," +
              central_meridian +
              "]," +
              "PARAMETER[\"scale_factor\",1]," +
              "PARAMETER[\"false_easting\",500000]," +
              "PARAMETER[\"false_northing\",0]," +
              "UNIT[\"Meter\",1]]";

            ISpatialReferenceFactory srf = new SpatialReferenceEnvironmentClass();
            srf.CreateESRISpatialReference(prjContent, out ISpatialReference spaRef, out int cBytesRead);
            return spaRef;
        }

2、还可以使用AE自带函数,代码定义投影(不过使用中报错,找不出原因,贴出AE自带的实例代码

 

#region //创建一个自定义投影坐标系统
        public static IProjectedCoordinateSystem CreateCustomProjectedCoordinateSystem()
        {
            ISpatialReferenceFactory2 pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            IProjectionGEN pProjection = pSpatialReferenceFactory.CreateProjection((int)esriSRProjectionType.esriSRProjection_GaussKruger) as IProjectionGEN;
            IGeographicCoordinateSystem pGeographicCoordinateSystem = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
            ILinearUnit pUnit = pSpatialReferenceFactory.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter) as ILinearUnit;
            IParameter[] pParameters = pProjection.GetDefaultParameters();

            IProjectedCoordinateSystemEdit pProjectedCoordinateSystemEdit = new ProjectedCoordinateSystemClass();
            object pName = "WGS-1984";
            object pAlias = "WGS-1984";
            object pAbbreviation = "WGS-1984";
            object pRemarks = "WGS-1984";
            object pUsage = " ";
            object pGeographicCoordinateSystemObject = pGeographicCoordinateSystem as object;
            object pUnitObject = pUnit as object;
            object pProjectionObject = pProjection as object;
            object pParametersObject = pParameters as object;

            try
            {
                pProjectedCoordinateSystemEdit.Define(ref pName,
              ref pAlias, ref pAbbreviation, ref pRemarks, ref pUsage,
              ref pGeographicCoordinateSystemObject, ref pUnitObject,
              ref pProjectionObject, ref pParametersObject);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + ex.InnerException.Message);
            }
            //设置缩放比和偏移
            IProjectedCoordinateSystem5 pProjectedCoordinateSystem = pProjectedCoordinateSystemEdit as IProjectedCoordinateSystem5;
            pProjectedCoordinateSystem.FalseEasting = 500000;
            pProjectedCoordinateSystem.LatitudeOfOrigin = 0;
            pProjectedCoordinateSystem.set_CentralMeridian(true, 69);
            pProjectedCoordinateSystem.ScaleFactor = 2;
            pProjectedCoordinateSystem.FalseNorthing = 0;
            return pProjectedCoordinateSystem;
        }
        #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值