if (!string.IsNullOrEmpty(XZB) && Convert.ToDouble(XZB) < 360 && !string.IsNullOrEmpty(YZB) && Convert.ToDouble(YZB) < 360) //x坐标和y坐标小于360的是球面坐标
{
ESRI.ArcGIS.Client.Geometry.MapPoint mp = new ESRI.ArcGIS.Client.Geometry.MapPoint
{
X = Convert.ToDouble(XZB),
Y = Convert.ToDouble(YZB)
};
ESRI.ArcGIS.Client.Geometry.MapPoint mpNew = CoordinateTrans.Wgs84ToXian80(mp);
}

///
/// 84经纬度坐标转西安80平面坐标
///
///
///
///
public static MapPoint Wgs84ToXian80(MapPoint sourcePoint, Param4 param = null, int ProjNo = 0)
{
if (sourcePoint == null)
{
throw new ArgumentNullException(“sourcePoint”);
}
MapPoint targetPoint = GaussProjCal(sourcePoint, EarthParam.WGS84, ProjNo);
if (param != null && param.PX != 0 && param.SX != 0)
{
return Tras4Param(targetPoint, param);
}
else
{
return targetPoint;
}
}
///
/// 高斯投影正算
///
///
///
///
public static MapPoint GaussProjCal(MapPoint sourcePoint, EarthParam param, int ProjNo = 0)
{
double x, y;
GaussProjCal(sourcePoint.X, sourcePoint.Y, param.A, param.F, out x, out y, ProjNo);
return new MapPoint(x, y);
}
//高斯投影正、反算
//3度带宽
//高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres)
private static void GaussProjCal(double longitude, double latitude, double a, double f, out double X, out double Y, int ProjNo = 0)
{
//int ProjNo = 0;
int ZoneWide; 带宽
double longitude1, latitude1, longitude0, latitude0, X0, Y0, xval, yval;
double e2, ee, NN, T, C, A, M, iPI;
iPI = Math.PI / 180; 3.1415926535898/180.0;
ZoneWide = 3; 3度带宽
//a = 6378245.0; f = 1.0 / 298.3; //54年北京坐标系参数
//a=6378140.0; f=1/298.257; //80年西安坐标系参数
//a=6378137m;f=1/298.257223563;//WGS-84坐标系
if (ProjNo == 0)
{
ProjNo = (int)Math.Round(longitude / ZoneWide);
}
longitude0 = ProjNo * ZoneWide;
longitude0 = longitude0 * iPI;
latitude0 = 0;
longitude1 = longitude * iPI; //经度转换为弧度
latitude1 = latitude * iPI; //纬度转换为弧度
e2 = 2 * f - f * f;
ee = e2 * (1.0 - e2);
NN = a / Math.Sqrt(1.0 - e2 * Math.Sin(latitude1) * Math.Sin(latitude1));
T = Math.Tan(latitude1) * Math.Tan(latitude1);
C = ee * Math.Cos(latitude1) * Math.Cos(latitude1);
A = (longitude1 - longitude0) * Math.Cos(latitude1);
M = a * ((1 - e2 / 4 - 3 * e2 * e2 / 64 - 5 * e2 * e2 * e2 / 256) * latitude1 - (3 * e2 / 8 + 3 * e2 * e2 / 32 + 45 * e2 * e2 * e2 / 1024) * Math.Sin(2 * latitude1)
+ (15 * e2 * e2 / 256 + 45 * e2 * e2 * e2 / 1024) * Math.Sin(4 * latitude1) - (35 * e2 * e2 * e2 / 3072) * Math.Sin(6 * latitude1));
xval = NN * (A + (1 - T + C) * A * A * A / 6 + (5 - 18 * T + T * T + 72 * C - 58 * ee) * A * A * A * A * A / 120);
yval = M + NN * Math.Tan(latitude1) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24
+ (61 - 58 * T + T * T + 600 * C - 330 * ee) * A * A * A * A * A * A / 720);
X0 = 1000000L * (ProjNo) + 500000L;
Y0 = 0;
xval = xval + X0; yval = yval + Y0;
X = xval;
Y = yval;
}
///
/// 平面四参数转换方法
///
///
///
///
public static MapPoint Tras4Param(MapPoint sourcePoint, Param4 param4)
{
return Tras4Param(new MapPoint[] { sourcePoint }, param4)[0];
}
public static MapPoint[] Tras4Param(MapPoint[] sourcePoints, Param4 param4)
{
if (sourcePoints == null || sourcePoints.Length == 0)
throw new ArgumentNullException(“sourcePoints”);
if (param4 == null)
throw new ArgumentNullException(“param4”);
double[][] parameter = new double[4][];
parameter[0] = new double[] { param4.PX };
parameter[1] = new double[] { param4.PY };
parameter[2] = new double[] { param4.SX };
parameter[3] = new double[] { param4.SY };
int m = sourcePoints.Length;
double[][] oldp = new double[m][];
for (int i = 0; i < m; i++)
{
oldp[i] = new double[] { sourcePoints[i].X, sourcePoints[i].Y };
}
double[][] newp = Tras4Param(oldp, parameter, m);
MapPoint[] targetPoints = new MapPoint[m];
for (int i = 0; i < m; i++)
{
targetPoints[i] = new MapPoint(newp[i][0], newp[i][1]);
}
return targetPoints;
}
public class EarthParam
{
///
/// 长轴 eg:6378137
///
public double A { get; set; }
///
/// 扁心率 eg:1 / 298.257223563
///
public double F { get; set; }

    public static EarthParam WGS84 { get; private set; }public static EarthParam XIAN80 { get; private set; }public static EarthParam BJ54 { get; private set; }static EarthParam(){WGS84 = new EarthParam() { A = 6378137, F = 1 / 298.257223563 };XIAN80 = new EarthParam() { A = 6378140, F = 1.0 / 298.3 };BJ54 = new EarthParam() { A = 6378245.0, F = 1 / 298.257 };}
}

arcgis 将2000球面坐标转换成平面坐标相关推荐

  1. 高德GPS坐标转换成平面坐标(C#代码实现方式)

    根据高德地图js代码翻译而成,废话不多说直接上代码 const double VV = 0.15915494309189535;const double kW = 0.5;const double y ...

  2. arcgis 坐标系 2000坐标系_干货 | 关于投影和坐标系那些事,你是否都已还给了老师?...

    很多新接触GIS的人员对地图投影以及坐标系统很难理解,甚至做GIS开发做了好几年的人也有这方面的疑惑,地球仪式的地图是如何变成纸上的平面地图的?平面的二维地图是如何在三维GIS里面进行展示的,因为三维 ...

  3. ArcGis将2000国家大地坐标系转WGS84

    初始准备 只包含有坐标系的txt, ArcGis 10.4.1,excel2016 问题及需求 如题 解决方案 首先明确概念,CGS2000是地理坐标系(epsg:4490),WGS_1984 也是地 ...

  4. MATLAB程序实现经纬度转换成平面坐标

    近期搜了下经纬度坐标转换成直角坐标的程序和原理啥的,哎,真难啊,其实道理都懂吧,下面直接贴代码, 主要是加了个for循环而言,优化输出效果. %%%MATLAB程序实现经纬度转换成平面尔坐标: M_P ...

  5. ArcGIS中的坐标系统和投影变换

    ArcGIS中的坐标系统和投影变换 主要内容 一.地球椭球体(Ellipsoid) 二.大地基准面(Geodetic datum) 三.空间参考系统(Spatial Reference) 四.坐标系统 ...

  6. pixhawk px4 commander.cpp

    对于复杂的函数,要做的就是看函数的输入是什么.来自哪里,经过处理后得到什么.给谁用,这样就可以把程序逻辑理清(中间的分析就是看函数如何处理的) extern "C" __EXPOR ...

  7. 深入浅出谈GIS - 坐标体系

    零.综述 要搞懂坐标系,就从"地球模型 -> 坐标系 -> 平面投影"这三个方面来学习 1.地球模型: 价值:对于不规则的地球,选择一个曲面尽量逼近当地大地体的椭球作为 ...

  8. 地图球形显示html,球形的地球怎么表示在平面地图上

    大家都知道地球是圆的,但是日常生活中我们看到的地图却都是平的.二维的地图当然方便人们携带使用,可如果你把一只橘子剥开,并把它的表皮平铺在桌面上,你会发现橘皮有些地方会起褶皱,有些地方则会破裂.那么,地 ...

  9. 2000坐标系高程与85高程转换_科普 | 如何在大疆智图中设置坐标系

    点击上方 蓝字 关注我们 在大疆智图"输出坐标系设置"中可设置坐标系,例如选择WGS 84/ UTM zone 49N或CGCS2000(2000国家大地坐标系)/Gauss-Kr ...

  10. js GPS 百度地图坐标转换

    2019独角兽企业重金招聘Python工程师标准>>> 首先要引用百度地图的 <scrtipt>: <script type="text/javascri ...

最新文章

  1. 利用window.navigator.userAgent判断当前是否微信内置浏览器
  2. Mybatis的第三章动态sql总结
  3. 计算机硬盘冒烟了,电脑硬盘冒烟损坏了怎么办?
  4. 享受Android应用程序的Java技术盛宴
  5. python后台返回cookie_Django框架设置cookies与获取cookies操作详解
  6. Linux基础命令---lp打印机命令
  7. pytorch 解压kaggle中的zgz文件
  8. heroku创建linux主机,将Yesod部署到Heroku,无法静态构建
  9. C#中获得窗体的句柄
  10. 阿里云弹性云桌面、传统PC和虚拟桌面VDI区别对比
  11. 中国电信翼支付网关接口接入
  12. 基于vue+js的商城、购物网站 毕业设计 毕设源代码的实现和设计(1)首页
  13. 人体姿态识别研究综述(详细归纳!)(转载)
  14. 如何评价《就算老公一毛钱股份都没拿到,在我心里,他依然是最牛逼的创业者》里面这位CEO的所作所为?
  15. 特征提取 - 海森矩阵(Hessian Matrix)及一个用例(图像增强)
  16. 初入职场 的 实习总结与心得-web前端
  17. Python -- 关于字典的学习(二)——遍历字典
  18. 【渝粤教育】广东开放大学互联网营销本 形成性考核 (55)
  19. 微信小程序通过云函数进行微信支付
  20. 三国大将风云java_三国时代唯一一位万军之中取上将首级的大将, 非吕布, 非赵云!...

热门文章

  1. 【英语语法入门】 第13讲 形容词
  2. Opencv-获取两点之间距离
  3. win10局域网 开启网络发现,无法找到本机
  4. wago edz 下载_用电子枪制造的WeakAuras Wago.io桥
  5. android sdk多开,[原创]Android 应用多开对抗实践
  6. 正确认识使用Word模板
  7. 人工智能——单层感知器
  8. stm32F4xx中文参考手册
  9. 计算机网络原理 实验3《IP数据包捕获及数据分析》
  10. 移动端与pc端的区别