在RGEOS项目中,投影变换是通过Proj.Net来实现的。

支持的投影主要包括AlbersProjection、TransverseMercator、Mercator、Krovak、Lambert Conformal Conic 2SP,自己扩展了一个GaussKruger投影。

以下实现了一个WGS84椭球的UTM投影(TransverseMercator)

 ICoordinateSystem utm = ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WGS84_UTM(zone, pGeo.Y > 0);

查看代码:

 1 public static ProjectedCoordinateSystem WGS84_UTM(int Zone, bool ZoneIsNorth)
 2         {
 3             List<ProjectionParameter> pInfo = new List<ProjectionParameter>();
 4             pInfo.Add(new ProjectionParameter("latitude_of_origin", 0));
 5             pInfo.Add(new ProjectionParameter("central_meridian", Zone * 6 - 183));
 6             pInfo.Add(new ProjectionParameter("scale_factor", 0.9996));
 7             pInfo.Add(new ProjectionParameter("false_easting", 500000));
 8             pInfo.Add(new ProjectionParameter("false_northing", ZoneIsNorth ? 0 : 10000000));
 9             //IProjection projection = cFac.CreateProjection("UTM" + Zone.ToString() + (ZoneIsNorth ? "N" : "S"), "Transverse_Mercator", parameters);
10             Projection proj = new Projection("Transverse_Mercator", pInfo, "UTM" + Zone.ToString(System.Globalization.CultureInfo.InvariantCulture) + (ZoneIsNorth ? "N" : "S"),
11                 "EPSG", 32600 + Zone + (ZoneIsNorth ? 0 : 100), String.Empty, String.Empty, String.Empty);
12             System.Collections.Generic.List<AxisInfo> axes = new List<AxisInfo>();
13             axes.Add(new AxisInfo("East", AxisOrientationEnum.East));
14             axes.Add(new AxisInfo("North", AxisOrientationEnum.North));
15             return new ProjectedCoordinateSystem(ProjNet.CoordinateSystems.HorizontalDatum.WGS84,
16                 ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84, ProjNet.CoordinateSystems.LinearUnit.Metre, proj, axes,
17                 "WGS 84 / UTM zone " + Zone.ToString(System.Globalization.CultureInfo.InvariantCulture) + (ZoneIsNorth ? "N" : "S"), "EPSG", 32600 + Zone + (ZoneIsNorth ? 0 : 100),
18                 String.Empty, "Large and medium scale topographic mapping and engineering survey.", string.Empty);
19         }

WGS84_UTM

自己尝试写一个工厂没有写完全:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4
  5 namespace ProjNet.CoordinateSystems
  6 {
  7     public class SpatialReferenceEnvironmentClass : ISpatialReferenceFactory
  8     {
  9         public IEllipsoid CreateSpheroid(int spheroidType)
 10         {
 11             IEllipsoid ellipsoid = null;
 12             switch (spheroidType)
 13             {
 14                 case (int)RgSRSpheroidType.RgSRSpheroid_WGS1984:
 15                     ellipsoid = new Ellipsoid(6378137, 0, 298.257223563, true, LinearUnit.Metre, "WGS 84", "EPSG", 7030, "WGS 84", "", "Inverse flattening derived from four defining parameters (semi-major axis; C20 = -484.16685*10e-6; earth's angular velocity w = 7292115e11 rad/sec; gravitational constant GM = 3986005e8 m*m*m/s/s).");
 16                     break;
 17                 case (int)RgSRSpheroidType.RgSRSpheroid_Krasovsky1940:
 18                     ellipsoid = new Ellipsoid(6378245, 0, 298.30000000000001, true, LinearUnit.Metre, "Krasovsky_1940", "EPSG", 7024, "Krasovsky_1940", "", "");
 19                     break;
 20                 case (int)RgSRSpheroid2Type.RgSRSpheroid_Xian1980:
 21                     ellipsoid = new Ellipsoid(6378140, 0, 298.25700000000001, true, LinearUnit.Metre, "Xian_1980", "EPSG", 7049, "Xian_1980", "", "");
 22                     break;
 23             }
 24             return ellipsoid;
 25         }
 26
 27         public IHorizontalDatum CreateDatum(int datumType)
 28         {
 29             IHorizontalDatum datum = null;
 30             switch (datumType)
 31             {
 32                 case (int)RgSRDatumType.RgSRDatum_WGS1984:
 33                     IEllipsoid ellipsoid = this.CreateSpheroid((int)RgSRSpheroidType.RgSRSpheroid_WGS1984);
 34                     datum = new HorizontalDatum(ellipsoid, null, DatumType.HD_Geocentric, "World Geodetic System 1984", "EPSG", 6326, String.Empty, "EPSG's WGS 84 datum has been the then current realisation. No distinction is made between the original WGS 84 frame, WGS 84 (G730), WGS 84 (G873) and WGS 84 (G1150). Since 1997, WGS 84 has been maintained within 10cm of the then current ITRF.", String.Empty);
 35                     break;
 36                 case (int)RgSRDatumType.RgSRDatum_Beijing1954:
 37                     IEllipsoid ellipsoid2 = this.CreateSpheroid((int)RgSRSpheroidType.RgSRSpheroid_Krasovsky1940);
 38                     datum = new HorizontalDatum(ellipsoid2, null, DatumType.HD_Geocentric, "D_Beijing1954", "EPSG", 6214, String.Empty, "", String.Empty);
 39                     break;
 40                 case (int)RgSRDatumType.RgSRDatum_Xian1980:
 41                     IEllipsoid ellipsoid3 = this.CreateSpheroid((int)RgSRSpheroid2Type.RgSRSpheroid_Xian1980);
 42                     datum = new HorizontalDatum(ellipsoid3, null, DatumType.HD_Geocentric, "D_Xian1980", "EPSG", 6610, String.Empty, "", String.Empty);
 43                     break;
 44             }
 45             return datum;
 46         }
 47
 48         public IGeographicCoordinateSystem CreateGeographicCoordinateSystem(int gcsType)
 49         {
 50             IGeographicCoordinateSystem gcs = null;
 51             switch (gcsType)
 52             {
 53
 54                 case (int)RgSRGeoCSType.RgSRGeoCS_WGS1984:// WGS 1984.
 55                     List<AxisInfo> axes = new List<AxisInfo>(2);
 56                     axes.Add(new AxisInfo("Lon", AxisOrientationEnum.East));
 57                     axes.Add(new AxisInfo("Lat", AxisOrientationEnum.North));
 58                     IHorizontalDatum datum = this.CreateDatum((int)RgSRDatumType.RgSRDatum_WGS1984);
 59                     gcs = new GeographicCoordinateSystem(CoordinateSystems.AngularUnit.Degrees,
 60                         datum, CoordinateSystems.PrimeMeridian.Greenwich, axes,
 61                         "WGS1984", "EPSG", 4326, String.Empty, string.Empty, string.Empty);
 62                     break;
 63                 case (int)RgSRGeoCSType.RgSRGeoCS_Beijing1954:
 64                     List<AxisInfo> axes2 = new List<AxisInfo>(2);
 65                     axes2.Add(new AxisInfo("Lon", AxisOrientationEnum.East));
 66                     axes2.Add(new AxisInfo("Lat", AxisOrientationEnum.North));
 67                     IHorizontalDatum datum2 = this.CreateDatum((int)RgSRDatumType.RgSRDatum_Beijing1954);
 68                     gcs = new GeographicCoordinateSystem(CoordinateSystems.AngularUnit.Degrees,
 69                         datum2, CoordinateSystems.PrimeMeridian.Greenwich, axes2,
 70                         "Beijing1954", "EPSG", 4214, String.Empty, string.Empty, string.Empty);
 71                     break;
 72                 case (int)RgSRGeoCS3Type.RgSRGeoCS_Xian1980://Xian80.
 73                     List<AxisInfo> axes3 = new List<AxisInfo>(2);
 74                     axes3.Add(new AxisInfo("Lon", AxisOrientationEnum.East));
 75                     axes3.Add(new AxisInfo("Lat", AxisOrientationEnum.North));
 76                     IHorizontalDatum datum3 = this.CreateDatum((int)RgSRDatumType.RgSRDatum_Xian1980);
 77                     gcs = new GeographicCoordinateSystem(CoordinateSystems.AngularUnit.Degrees,
 78                         datum3, CoordinateSystems.PrimeMeridian.Greenwich, axes3,
 79                         "Xian1980", "EPSG", 4610, String.Empty, string.Empty, string.Empty);
 80                     break;
 81
 82             }
 83             return gcs;
 84         }
 85
 86         public IProjectedCoordinateSystem CreateProjectedCoordinateSystem(int pcsType)
 87         {
 88             throw new NotImplementedException();
 89         }
 90         public IProjection CreateProjection(int projectionType)
 91         {
 92             switch (projectionType)
 93             {
 94                 case (int)RgSRProjectionType.RgSRProjection_Albers:
 95                     break;
 96                 case (int)RgSRProjectionType.RgSRProjection_GaussKruger:
 97                     break;
 98                 case (int)RgSRProjectionType.RgSRProjection_Mercator:
 99                     break;
100                 case (int)RgSRProjectionType.RgSRProjection_TransverseMercator:
101                     break;
102                 case (int)RgSRProjectionType.RgSRProjection_LambertConformalConic:
103                     break;
104             }
105             return null;
106         }
107     }
108 }

SpatialReferenceEnvironmentClass

使用Proj.Net创建空间参考相关推荐

  1. arcpy投影(二)——基准面变换概念及参数、空间参考对象获取、变换关系获取方法梳理与解析(Spatial Reference、ListTransformations)

    arcpy投影这一个专题从文件位置.文件含义.空间参照获取.转换关系查询.投影定义.自定义转换关系.投影变换这几个角度上系统的进行了介绍,整理出了: arcpy投影(一)--prj.gtf文件定义.路 ...

  2. ArcGis 中打开 shp 文件时 未知的空间参考 警告

    平常我们难免会遇到各种奇奇怪怪的数据,今天博主在这记录一下关于如何给一份未定义坐标参考系的shp文件定义空间参考及投影的过程.话不多说,马上开始~! 1. 首先看一下打开文件时弹出的警告.如下图 当我 ...

  3. gis中开始编辑之后显示空间参考_空间参考—帮助 | ArcGIS Desktop

    空间参考包括一个 x.y.z 值的坐标系.在企业级地理数据库中,空间参考还包含容差值和分辨率值.所有这些信息组合在一起将有助于指示平面地图上的形状表示地球上的哪个位置. 各空间参考还包括一个标识符(通 ...

  4. QI实例-改变空间参考

    学习AE一段时间了,总是对QI不是很理解,今天一晚上写了QI实例,尝试理解下. 首先想到的是→改变空间参考→alter.SpatialReference→alterSpatialReference,输 ...

  5. 使用 ArcGIS Pro 对一幅没有空间参考的老照片进行配准

    栅格数据可通过卫星影像.航空摄像机和扫描地图等多种来源获取.现代化的卫星影像和航空摄像机往往具有相对准确的位置信息,只需进行轻微调整,就能与其他 GIS 数据对齐. 扫描地图和历史数据通常不包含空间参 ...

  6. GIS基础(1)空间参考

    1 前言 基本了解了WebGIS的一个框架后,我准备先把GIS的基础再过一遍,主要集中在坐标系和数据两大块,这一篇从坐标系入手. 当我们拿到一份空间数据,我们立马会问的一个问题应该是:这数据是什么坐标 ...

  7. 零基础学Arcgis(八)|空间参考

    写在前面的话: B站搜索"中图地信"便可观看全套71章节详细操作视频(有操作数据获取,同步学习) (一)新建Shapefile文件 [1]启动ArcMap,新建空白地图文档: [2 ...

  8. 【Oracle实战经验一】:OracleSpatial自定义空间参考

    OracleSpatial自定义空间参考 1.如何判断OracleSpatial中是否存在该空间参考 2.怎么向OracleSpatial中插入自定义的空间参考 2.1插入地理坐标系统 2.1.1权限 ...

  9. 关于ArcMap提示空间参考与数据框不匹配引发的一系列问题

    每次打开编辑要素,总会有弹框提示"空间参考与数据框不匹配",一般就直接忽略,然后不管,接着编辑要素去了,然后这两天一直遇到一个问题,首先,在合并要素的时候,要素的弧线变成直线了 看 ...

  10. 转载:如何区分空间参考、坐标系统、投影、基准面和椭圆体?

    如何区分空间参考.坐标系统.投影.基准面和椭圆体? 作者:巫细波 2007.12.06 空间参考(Spatial Reference)    坐标系统(Coordinate System)    投影 ...

最新文章

  1. linux下安装mysql57_Linux——CentOS7之mysql5.7安装与配置
  2. 中怎么均化走线_PCB板上多长的走线才是传输线?答案是……
  3. 加解密技术(Cryptography)基本概念
  4. jQuery EasyUI 下拉菜单获取日期,最高年份为当前年份,最低年份为当前年份向前推10年...
  5. pyhive 安装sasl
  6. 可视化——统计图表介绍
  7. 盛唐气象:李白的诗与酒
  8. 破解网易云js加密,爬虫获取网易云评论
  9. [APP资讯] 开发一个App要多少钱?有免费开发App的网站吗?
  10. HR提出的面试问题参考答案
  11. Android Studio 基础控件飘红 处理办法
  12. sklearn之pipeline:pipeline函数/make_pipeline函数的简介及其区别联系、使用技巧、案例应用之详细攻略
  13. 三阶线性自抗扰控制matlab实现
  14. PY-NumPy | 蓝色妖姬
  15. 北航2021届计组 - 支持中断的CPU
  16. VMware Horizon 8 2111 部署系列(五)配置事件数据库
  17. c语言实现家谱(孩子兄弟树)数据结构
  18. ESP8266作为服务器配置方法
  19. ignore的音标_ignore是什么意思中文翻译
  20. 无线网卡 无线上网卡 的介绍

热门文章

  1. Tensorflow:可视化学习TensorBoard
  2. openstack实例启动失败_Nokia NESC,这是世界上最大的OpenStack私有云之一
  3. spring 处理带有特殊字符的请求_Spring爸爸又给Spring MVC生了个弟弟叫Spring WebFlux...
  4. 蓝桥杯2019年第十届C/C++省赛A组第三题-最大降雨量
  5. Java ==和equals有什么区别?
  6. Flutter进阶第13篇: 打开外部浏览器、打开外部应用、拨打电话、发送短信
  7. Dart基础第10篇:类 静态成员 操作符 类的继承
  8. Linux input输入子系统demo驱动
  9. 《JavaScript 高级程序设计》第三章:基本概念
  10. HotSpot VM运行时02---VM生命周期