利用proj.net进行投影坐标变换(c#,北京54坐标)
来源:互联网 发布:知与行杂志马克思 编辑:程序博客网 时间:2024/05/29 19:28
using ProjNet.CoordinateSystems;
using ProjNet.Converters.WellKnownText;
using ProjNet.CoordinateSystems.Transformations;
/// <summary>
/// 坐标位置结构体
/// </summary>
public struct stPosition
{
public double X;
public double Y;
public stPosition(double x, double y)
{
X = x;
Y = y;
}
}
/// <summary>
/// 将地理坐标转换为投影坐标
/// </summary>
/// <param name="fromCS">原坐标系</param>
/// <param name="toCS">目标坐标系</param>
/// <param name="pts">原始数据</param>
/// <param name="results">结果数据</param>
/// <returns>成功返回true</returns>
public static bool DegreeToMeter(ICoordinateSystem fromCS, ICoordinateSystem toCS, List<double[]> pts, out List<double[]> results)
{
bool bRes = false;
results = new List<double[]>();
try
{
CoordinateTransformationFactory ctfac = new CoordinateTransformationFactory();
ICoordinateTransformation trans = ctfac.CreateFromCoordinateSystems(toCS, fromCS);
results = trans.MathTransform.TransformList(pts);
bRes = true;
}
catch (SystemException sysEx)
{
}
return bRes;
}
/// <summary>
/// 将投影坐标系数据转换为地理坐标系数据
/// </summary>
/// <param name="fromCS">原坐标系</param>
/// <param name="toCS">目标坐标系</param>
/// <param name="pts">原始数据</param>
/// <param name="results">结果数据</param>
/// <returns>成功返回true</returns>
public static bool MeterToDegree(ICoordinateSystem fromCS, ICoordinateSystem toCS, List<double[]> pts, out List<double[]> results)
{
bool bRes = false;
results = new List<double[]>();
try
{
CoordinateTransformationFactory ctfac = new CoordinateTransformationFactory();
ICoordinateTransformation trans = ctfac.CreateFromCoordinateSystems(fromCS, toCS);
results = trans.MathTransform.TransformList(pts);
bRes = true;
}
catch (SystemException sysEx)
{
}
return bRes;
}
/// <summary>
/// 北京54投影坐标转换为地理坐标/// </summary>
/// <param name="iCodeNum">带号</param>
/// <param name="dCenter_Meridian">中央经线</param>
/// <param name="sourPt">原始投影坐标数据</param>
/// <param name="destPt">转换后地理坐标</param>
public static void BJ54PrjToGeo(int iCodeNum, double dCenter_Meridian, stPosition sourPt, out stPosition destPt)
{
destPt = new stPosition(0, 0);
try
{
//高斯克吕格投影类型|横轴莫卡托投影类型
string bj1954Lcc = string.Format("PROJCS[\"hejl\","
+ "GEOGCS[\"GCS_Beijing_1954\","
+ "DATUM[\"D_Beijing_1954\", SPHEROID[\"Krasovsky_1940\", 6378245.0, 298.3]],"
+ "PRIMEM[\"Greenwich\", 0.0],"
+ "UNIT[\"Degree\", 0.017453292519943299]],"
+ "PROJECTION[\"Transverse Mercator\"],"
+ "PARAMETER[\"False_Easting\", {0}500000.0],"
+ "PARAMETER[\"False_Northing\", 0.0],"
+ "PARAMETER[\"Central_Meridian\", {1} ],"
+ "PARAMETER[\"Scale_Factor\", 1],"
+ "PARAMETER[\"Latitude_Of_Origin\", 0],"
+ "UNIT[\"Meter\", 1]];", iCodeNum, dCenter_Meridian);
IProjectedCoordinateSystem fromCS = CoordinateSystemWktReader.Parse(bj1954Lcc) as IProjectedCoordinateSystem;
GeographicCoordinateSystem toCS = (GeographicCoordinateSystem)fromCS.GeographicCoordinateSystem;
List<double[]> pts = new List<double[]>();
double[] xy = new double[] { sourPt.X, sourPt.Y };
pts.Add(xy);
List<double[]> results = new List<double[]>();
//执行转换函数
MeterToDegree(fromCS, toCS, pts, out results);
destPt.X = results[0][0];
destPt.Y = results[0][1];
}
catch (SystemException sysEx)
{
}
}
/// <summary>
/// 北京54地理坐标转换为投影坐标,批量转换
/// </summary>
/// <param name="iCodeNum">带号</param>
/// <param name="dCenter_Meridian">中央经线</param>
/// <param name="sourPt">原始投影坐标数据</param>
/// <param name="destPt">转换后地理坐标</param>
public static void GeoToBJ54Prj(int iCodeNum, double dCenter_Meridian, stPosition sourPt, out stPosition destPt)
{
destPt = new stPosition(0, 0);
try
{
//高斯克吕格投影类型|横轴莫卡托投影类型
string bj1954Lcc = string.Format("PROJCS[\"hejl\","
+ "GEOGCS[\"GCS_Beijing_1954\","
+ "DATUM[\"D_Beijing_1954\", SPHEROID[\"Krasovsky_1940\", 6378245.0, 298.3]],"
+ "PRIMEM[\"Greenwich\", 0.0],"
+ "UNIT[\"Degree\", 0.017453292519943299]],"
+ "PROJECTION[\"Transverse Mercator\"],"
+ "PARAMETER[\"False_Easting\", {0}500000.0],"
+ "PARAMETER[\"False_Northing\", 0.0],"
+ "PARAMETER[\"Central_Meridian\", {1} ],"
+ "PARAMETER[\"Scale_Factor\", 1],"
+ "PARAMETER[\"Latitude_Of_Origin\", 0],"
+ "UNIT[\"Meter\", 1]];", iCodeNum, dCenter_Meridian);
IProjectedCoordinateSystem fromCS = CoordinateSystemWktReader.Parse(bj1954Lcc) as IProjectedCoordinateSystem;
GeographicCoordinateSystem toCS = (GeographicCoordinateSystem)fromCS.GeographicCoordinateSystem;
List<double[]> pts = new List<double[]>();
double[] xy = new double[] { sourPt.X, sourPt.Y };
pts.Add(xy);
List<double[]> results = new List<double[]>();
//执行转换函数
DegreeToMeter(fromCS, toCS, pts, out results);
destPt.X = results[0][0];
destPt.Y = results[0][1];
}
catch (SystemException sysEx)
{
}
}
- 利用proj.net进行投影坐标变换(c#,北京54坐标)
- 关于坐标系(大地坐标、平面坐标、投影、北京54、西安80、WGS84)的一些理解
- 关于坐标系(大地坐标、平面坐标、投影、北京54、西安80、WGS84)的一些理解
- 关于坐标系(大地坐标、平面坐标、投影、北京54、西安80、WGS84)的一些理解
- 关于坐标系(大地坐标、平面坐标、投影、北京54、西安80、WGS84)的一些理解
- 如何用arcgis进行WGS84的投影坐标变换
- 空间坐标变换与投影
- 常见坐标变换和投影
- 如何将卫星影像进行投影转换转换成北京54坐标
- Polar坐标投影(C++)
- 用Proj.4进行坐标系转换(以北京54坐标系转WGS84投影坐标系为例)
- 矢量等高线如何投影转换为北京54坐标
- 使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换
- 使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换
- 使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换
- WGS84经纬度坐标到北京54高斯投影坐标的转换
- [转]使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换
- GDI+坐标变换(C#)
- Mac下安装redis
- microDEM软件介绍
- Linux一些常用(还有一部分给力的)的命令(一)(综合整理)
- 四个社会化电商初创公司 改变在线购物方式
- Log4Net五步走
- 利用proj.net进行投影坐标变换(c#,北京54坐标)
- 根据路径获取文件的两种方式
- Javascript匿名函数
- 应用服务器一些问题解答
- arm AAPCS(程序调用标准)
- Android权限大全
- 15件事造就有理想的程序员
- Processor Architecture: CISC, RISC, VLIW
- 投影知识的认知