在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 > );

查看代码:

 public static ProjectedCoordinateSystem WGS84_UTM(int Zone, bool ZoneIsNorth)
{
List<ProjectionParameter> pInfo = new List<ProjectionParameter>();
pInfo.Add(new ProjectionParameter("latitude_of_origin", ));
pInfo.Add(new ProjectionParameter("central_meridian", Zone * - ));
pInfo.Add(new ProjectionParameter("scale_factor", 0.9996));
pInfo.Add(new ProjectionParameter("false_easting", ));
pInfo.Add(new ProjectionParameter("false_northing", ZoneIsNorth ? : ));
//IProjection projection = cFac.CreateProjection("UTM" + Zone.ToString() + (ZoneIsNorth ? "N" : "S"), "Transverse_Mercator", parameters);
Projection proj = new Projection("Transverse_Mercator", pInfo, "UTM" + Zone.ToString(System.Globalization.CultureInfo.InvariantCulture) + (ZoneIsNorth ? "N" : "S"),
"EPSG", + Zone + (ZoneIsNorth ? : ), String.Empty, String.Empty, String.Empty);
System.Collections.Generic.List<AxisInfo> axes = new List<AxisInfo>();
axes.Add(new AxisInfo("East", AxisOrientationEnum.East));
axes.Add(new AxisInfo("North", AxisOrientationEnum.North));
return new ProjectedCoordinateSystem(ProjNet.CoordinateSystems.HorizontalDatum.WGS84,
ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84, ProjNet.CoordinateSystems.LinearUnit.Metre, proj, axes,
"WGS 84 / UTM zone " + Zone.ToString(System.Globalization.CultureInfo.InvariantCulture) + (ZoneIsNorth ? "N" : "S"), "EPSG", + Zone + (ZoneIsNorth ? : ),
String.Empty, "Large and medium scale topographic mapping and engineering survey.", string.Empty);
}

WGS84_UTM

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

 using System;
using System.Collections.Generic;
using System.Text; namespace ProjNet.CoordinateSystems
{
public class SpatialReferenceEnvironmentClass : ISpatialReferenceFactory
{
public IEllipsoid CreateSpheroid(int spheroidType)
{
IEllipsoid ellipsoid = null;
switch (spheroidType)
{
case (int)RgSRSpheroidType.RgSRSpheroid_WGS1984:
ellipsoid = new Ellipsoid(, , 298.257223563, true, LinearUnit.Metre, "WGS 84", "EPSG", , "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).");
break;
case (int)RgSRSpheroidType.RgSRSpheroid_Krasovsky1940:
ellipsoid = new Ellipsoid(, , 298.30000000000001, true, LinearUnit.Metre, "Krasovsky_1940", "EPSG", , "Krasovsky_1940", "", "");
break;
case (int)RgSRSpheroid2Type.RgSRSpheroid_Xian1980:
ellipsoid = new Ellipsoid(, , 298.25700000000001, true, LinearUnit.Metre, "Xian_1980", "EPSG", , "Xian_1980", "", "");
break;
}
return ellipsoid;
} public IHorizontalDatum CreateDatum(int datumType)
{
IHorizontalDatum datum = null;
switch (datumType)
{
case (int)RgSRDatumType.RgSRDatum_WGS1984:
IEllipsoid ellipsoid = this.CreateSpheroid((int)RgSRSpheroidType.RgSRSpheroid_WGS1984);
datum = new HorizontalDatum(ellipsoid, null, DatumType.HD_Geocentric, "World Geodetic System 1984", "EPSG", , 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);
break;
case (int)RgSRDatumType.RgSRDatum_Beijing1954:
IEllipsoid ellipsoid2 = this.CreateSpheroid((int)RgSRSpheroidType.RgSRSpheroid_Krasovsky1940);
datum = new HorizontalDatum(ellipsoid2, null, DatumType.HD_Geocentric, "D_Beijing1954", "EPSG", , String.Empty, "", String.Empty);
break;
case (int)RgSRDatumType.RgSRDatum_Xian1980:
IEllipsoid ellipsoid3 = this.CreateSpheroid((int)RgSRSpheroid2Type.RgSRSpheroid_Xian1980);
datum = new HorizontalDatum(ellipsoid3, null, DatumType.HD_Geocentric, "D_Xian1980", "EPSG", , String.Empty, "", String.Empty);
break;
}
return datum;
} public IGeographicCoordinateSystem CreateGeographicCoordinateSystem(int gcsType)
{
IGeographicCoordinateSystem gcs = null;
switch (gcsType)
{ case (int)RgSRGeoCSType.RgSRGeoCS_WGS1984:// WGS 1984.
List<AxisInfo> axes = new List<AxisInfo>();
axes.Add(new AxisInfo("Lon", AxisOrientationEnum.East));
axes.Add(new AxisInfo("Lat", AxisOrientationEnum.North));
IHorizontalDatum datum = this.CreateDatum((int)RgSRDatumType.RgSRDatum_WGS1984);
gcs = new GeographicCoordinateSystem(CoordinateSystems.AngularUnit.Degrees,
datum, CoordinateSystems.PrimeMeridian.Greenwich, axes,
"WGS1984", "EPSG", , String.Empty, string.Empty, string.Empty);
break;
case (int)RgSRGeoCSType.RgSRGeoCS_Beijing1954:
List<AxisInfo> axes2 = new List<AxisInfo>();
axes2.Add(new AxisInfo("Lon", AxisOrientationEnum.East));
axes2.Add(new AxisInfo("Lat", AxisOrientationEnum.North));
IHorizontalDatum datum2 = this.CreateDatum((int)RgSRDatumType.RgSRDatum_Beijing1954);
gcs = new GeographicCoordinateSystem(CoordinateSystems.AngularUnit.Degrees,
datum2, CoordinateSystems.PrimeMeridian.Greenwich, axes2,
"Beijing1954", "EPSG", , String.Empty, string.Empty, string.Empty);
break;
case (int)RgSRGeoCS3Type.RgSRGeoCS_Xian1980://Xian80.
List<AxisInfo> axes3 = new List<AxisInfo>();
axes3.Add(new AxisInfo("Lon", AxisOrientationEnum.East));
axes3.Add(new AxisInfo("Lat", AxisOrientationEnum.North));
IHorizontalDatum datum3 = this.CreateDatum((int)RgSRDatumType.RgSRDatum_Xian1980);
gcs = new GeographicCoordinateSystem(CoordinateSystems.AngularUnit.Degrees,
datum3, CoordinateSystems.PrimeMeridian.Greenwich, axes3,
"Xian1980", "EPSG", , String.Empty, string.Empty, string.Empty);
break; }
return gcs;
} public IProjectedCoordinateSystem CreateProjectedCoordinateSystem(int pcsType)
{
throw new NotImplementedException();
}
public IProjection CreateProjection(int projectionType)
{
switch (projectionType)
{
case (int)RgSRProjectionType.RgSRProjection_Albers:
break;
case (int)RgSRProjectionType.RgSRProjection_GaussKruger:
break;
case (int)RgSRProjectionType.RgSRProjection_Mercator:
break;
case (int)RgSRProjectionType.RgSRProjection_TransverseMercator:
break;
case (int)RgSRProjectionType.RgSRProjection_LambertConformalConic:
break;
}
return null;
}
}
}

SpatialReferenceEnvironmentClass

使用Proj.Net创建空间参考的更多相关文章

  1. ArcEngine 创建空间参考设置默认域

    ISpatialReferenceFactory3 spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); outSR = ...

  2. ArcGIS Engine开发之旅09--几何对象和空间参考

    原文:ArcGIS Engine开发之旅09--几何对象和空间参考 1.Geometry  Geometry 是 GIS 中使用最为广泛的对象集之一,用户在创建.删除.编辑和进行地理分析的时候,就是处 ...

  3. 空间参考系统与WKT解析

    空间参考系统与WKT解析 1.为什么要空间参考系统? 空间参考系统,也称为坐标系统.在GIS中为地理数据定位的基准,假设给你一个坐标(442281.875,4422651.589).如果不给你空间参考 ...

  4. ArcGIS for qml -关于空间参考如何选择设置

    作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载请获取授权和联系作者 1.关于空间参考 空间参考可以通过众所周知的ID(WKID) - 整数值来引用. 官网指南中也有对此的专门说明 htt ...

  5. ArcGIS空间参考概述

    摘要:在地理数据库中,坐标系和其他相关空间属性被定义为各数据集的空间参考的一部分.空间参考是用于存储各要素类和栅格数据集,以及其他坐标属性(例如,x,y 坐标的坐标分辨率及可选的 z 坐标和测量 (m ...

  6. GIS空间参考及坐标转换

    空间参考(Spatial Reference)是 GIS 数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标. 在同一个地图上显示的地图数据的空间参考必须是一致的,如果两 ...

  7. ArcGIS api for javascript——设置自定义范围和空间参考

    描述 这个示例展示了在创建地图时如果定义一个自定义的范围和空间参考. 在 ArcGIS JavaScript API的1.0和1.1版本,任何要使用的地图服务图层都需要和地图的空间参考一致.1.2版本 ...

  8. ARCGIS切图:TPK文件的空间参考为地理坐标系

    先来吐槽一下,之前习惯了百度地图API,所以一直习惯直接将经纬度点添加到地图上进行显示,目前使用ARCGIS RUNTIME FOR ANDROID进行开发,在地图上加点需要原始点的坐标为投影坐标系, ...

  9. Openlayer3之空间参考扩展

    Openlayers默认了两种空间参考,一个是EPSG4326,一个是EPSG3857,其它的空间参考需要进行扩展才能使用.所以我们初始化时进行了如下操作: 1.将配置数据库中所有的空间参考读取出来, ...

随机推荐

  1. jquery修改a标签的href链接和文字

    可以先体验一下效果:http://keleyi.com/keleyi/phtml/jquery/2.htm 以下修改a标签的href链接和修改文字的代码: <script type=" ...

  2. 如何解包,编辑,重新打包boot images

    HOWTO: Unpack, Edit, and Repack Boot Images http://forum.xda-developers.com/showthread.php?t=443994 ...

  3. c/c++内存调试

    Leaktracer,Valgrind,ElectricFence 内存泄漏分类 以发生的方式来分类,内存泄漏可以分为4类: 常发性 发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存 ...

  4. [故障处理]联想笔记本故障0x0000007B

    同事笔记本故障,莫名其妙的快捷方式就找不到了.开始程序中的内容也无法正常查看. 解决步骤: 1.怀疑用户配置的问题,新建一个用户,没有解决. 2.使用自带的一键恢复ThinkVantage,恢复后,重 ...

  5. 4.PHP内核探索:单进程SAPI生命周期

    CLI/CGI模式的PHP属于单进程的SAPI模式.这类的请求在处理一次请求后就关闭.也就是只会经过如下几个环节: 开始 - 请求开始 - 请求关闭 - 结束 SAPI接口实现就完成了其生命周期. 单 ...

  6. 把Java程序打包成jar文件包并执行

    1.首先要确认自己写的程序有没有报错. 2.第一次我写的是Web Project到现在,我一直没有执行成功,所以最好创建的是java Project 打包步骤: 1.在项目上,右键,选择Export. ...

  7. oracle EBS 资产定义

    一.资产定义也就是江项目任务上的特定(能生成资产的)物料按照一定格式生成资产信息,其中每个独立物料生成一条资产,具体操作步骤如下: 1.省本部库存超级用户系统内生成领料单.审批领料单.最后进行出库处理 ...

  8. yum-config-manager YUM安装遭遇: [Errno 256] No more mirrors to try CentOS yum之$releasever和$basearch

    YUM安装遭遇: [Errno 256] No more mirrors to try createrepo 有问题. CentOS yum之$releasever和$basearch分类: 操作系统 ...

  9. JNI字段描述符-Java Native Interface Field Descriptors

    一.JNI字段描述符 "[I" ---  int[] "[[[D" --- double[][][] 如果以一个L开头的描述符,就是类描述符,它后紧跟着类的字符 ...

  10. Python 时间 日期常见操作

    import datetime,time dtstr = '2014-02-14 21:32:12' a = datetime.datetime.strptime(dtstr, "%Y-%m ...