各种坐标下的转换方式

CGCS2000大地坐标系x y坐标系转 经纬

https://wenku.baidu.com/view/4e528439b4360b4c2e3f5727a5e9856a5612269c.html 或https://blog.csdn.net/qq_29384789/article/details/113247108 也不知那个是原创 借鉴借鉴

以下的方法可以实现CGCS2000大地坐标系XY值转化为对应经纬度信息,
注意输入的XY值与给定的值相反,则参数X为已知的Y,参数Y为已知的X。
得出的结果为 [纬度,经度],不要应用错误。
L0参数为中央子午线的经线值,应用方法前需要确定L0的值,否则得出的值会有很大的偏差

/** * y  x 转换成经纬度   * @param X y  这里的X是坐标的y* @param Y x* @param L0  浙江 120 中央子午线* @return*/public static double [] xytolatlon(double X, double Y ,double L0) {double lat ,lon;Y-=500000;double []  result  = new double[2];double iPI = 0.0174532925199433;//pi/180double a = 6378137.0; //长半轴 mdouble b = 6356752.31414; //短半轴 mdouble f = 1/298.257222101;//扁率 a-b/adouble e = 0.0818191910428; //第一偏心率 Math.sqrt(5)double ee = Math.sqrt(a*a-b*b)/b; //第二偏心率double bf = 0; //底点纬度double a0 = 1+(3*e*e/4) + (45*e*e*e*e/64) + (175*e*e*e*e*e*e/256) + (11025*e*e*e*e*e*e*e*e/16384) + (43659*e*e*e*e*e*e*e*e*e*e/65536);double b0 = X/(a*(1-e*e)*a0);double c1 = 3*e*e/8 +3*e*e*e*e/16 + 213*e*e*e*e*e*e/2048 + 255*e*e*e*e*e*e*e*e/4096;double c2 = 21*e*e*e*e/256 + 21*e*e*e*e*e*e/256 + 533*e*e*e*e*e*e*e*e/8192;double c3 = 151*e*e*e*e*e*e*e*e/6144 + 151*e*e*e*e*e*e*e*e/4096;double c4 = 1097*e*e*e*e*e*e*e*e/131072;bf = b0 + c1*Math.sin(2*b0) + c2*Math.sin(4*b0) +c3*Math.sin(6*b0) + c4*Math.sin(8*b0); // bf =b0+c1*sin2b0 + c2*sin4b0 + c3*sin6b0 +c4*sin8b0 +...double tf = Math.tan(bf);double n2 = ee*ee*Math.cos(bf)*Math.cos(bf); //第二偏心率平方成bf余弦平方double c = a*a/b;double v=Math.sqrt(1+ ee*ee*Math.cos(bf)*Math.cos(bf));double mf = c/(v*v*v); //子午圈半径double nf = c/v;//卯酉圈半径//纬度计算lat=bf-(tf/(2*mf)*Y)*(Y/nf) * (1-1/12*(5+3*tf*tf+n2-9*n2*tf*tf)*(Y*Y/(nf*nf))+1/360*(61+90*tf*tf+45*tf*tf*tf*tf)*(Y*Y*Y*Y/(nf*nf*nf*nf)));//经度偏差lon=1/(nf*Math.cos(bf))*Y -(1/(6*nf*nf*nf*Math.cos(bf)))*(1+2*tf*tf +n2)*Y*Y*Y + (1/(120*nf*nf*nf*nf*nf*Math.cos(bf)))*(5+28*tf*tf+24*tf*tf*tf*tf)*Y*Y*Y*Y*Y;result[0] =retain6((lat/iPI));   result[1] =retain6(L0+lon/iPI);//System.out.println(result[1]+","+result[0]);return result;}private static double retain6(double num) {String result = String.format("%.6f", num);return Double.valueOf(result);}

上面的这个实验成功 下面的米勒投影的转换 转换我不太清楚是那种坐标下 同样的xy出来的经纬度 和上面的那种不一样

/*** 经纬转 y x* 米勒投影*/public static String MillierConvertion(double lat, double lon) {double L = 6381372 * Math.PI * 2;//地球周长double W = L;// 平面展开后,x轴等于周长double H = L / 2;// y轴约等于周长一半double mill = 2.3;// 米勒投影中的一个常数,范围大约在正负2.3之间double x = lon * Math.PI / 180;// 将经度从度数转换为弧度double y = lat * Math.PI / 180;// 将纬度从度数转换为弧度y = 1.25 * Math.log(Math.tan(0.25 * Math.PI + 0.4 * y));// 米勒投影的转换// 弧度转为实际距离x = (W / 2) + (W / (2 * Math.PI)) * x;y = (H / 2) - (H / (2 * mill)) * y;double[] result = new double[2];result[0] = x;result[1] = y;return "X:" + result[0] + "   Y:" + result[1];}/***  y  x 转换成经纬度* @param x* @param y* @return*/public static double[] MillierConvertion1(double x, double y) {double L = 6381372 * Math.PI * 2;//地球周长double W = L;// 平面展开后,x轴等于周长double H = L / 2;// y轴约等于周长一半double mill = 2.3;// 米勒投影中的一个常数,范围大约在正负2.3之间double lat;lat = ((H / 2 - y) * 2 * mill) / (1.25 * H);lat = ((Math.atan(Math.exp(lat)) - 0.25 * Math.PI) * 180) / (0.4 * Math.PI);double lon;lon = (x - W / 2) * 360 / W;double[] result = new double[2];result[0] = lon;result[1] = lat;
//        return "lon:" + result[0] + "   lat:" + result[1];return result;}

WGS84与地心坐标系

WGS84坐标系是1984世界大地坐标系(World Geodetic System)的简称。它是美国国防制图局于1984年建立的,是GPS卫星星历的参考基准,也是协议地球参考系的一种

地心坐标系(geocentric coordinate system )以地球质心为原点建立的空间直角坐标系,或以球心与地球质心重合的地球椭球面为基准面所建立的大地坐标系

    /*** WGS84转地心坐标系**/public static double[] WGS84toECEF(double latitude, double longitude, double height) {double X;double Y;double Z;double a = 6378137.0;double b = 6356752.31424518;double E = (a * a - b * b) / (a * a);double COSLAT = Math.cos(latitude * Math.PI / 180);double SINLAT = Math.sin(latitude * Math.PI / 180);double COSLONG = Math.cos(longitude * Math.PI / 180);double SINLONG = Math.sin(longitude * Math.PI / 180);double N = a / (Math.sqrt(1 - E * SINLAT * SINLAT));double NH = N + height;X = NH * COSLAT * COSLONG;Y = NH * COSLAT * SINLONG;Z = (b * b * N / (a * a) + height) * SINLAT;return new double[]{X, Y, Z};}/*** 地心坐标系转WGS84*/public static String ECEFtoWGS84(double x, double y, double z) {double a, b, c, d;double Longitude;// 经度double Latitude;// 纬度double Altitude;// 海拔高度double p, q;double N;a = 6378137.0;b = 6356752.31424518;c = Math.sqrt(((a * a) - (b * b)) / (a * a));d = Math.sqrt(((a * a) - (b * b)) / (b * b));p = Math.sqrt((x * x) + (y * y));q = Math.atan2((z * a), (p * b));Longitude = Math.atan2(y, x);Latitude = Math.atan2((z + (d * d) * b * Math.pow(Math.sin(q), 3)),(p - (c * c) * a * Math.pow(Math.cos(q), 3)));N = a / Math.sqrt(1 - ((c * c) * Math.pow(Math.sin(Latitude), 2)));Altitude = (p / Math.cos(Latitude)) - N;Longitude = Longitude * 180.0 / Math.PI;Latitude = Latitude * 180.0 / Math.PI;return Longitude + "," + Latitude + "," + Altitude;}

各个坐标的直接的转换

/*** 描述:经纬度转换* Created by cxb on 2018/5/24.*/
public class LatLngTools {public static final double a = 6378245.0;public static final double ee = 0.00669342162296594323;public static final double x_pi = 3.14159265358979324 * 3000.0 / 180.0;/** * 手机GPS坐标转火星坐标 * * @param wgLoc * @return */  public static Lation transformFromWGSToGCJ(Lation wgLoc) {  //如果在国外,则默认不进行转换  if (outOfChina(wgLoc.lat, wgLoc.lon)) {  return new Lation(wgLoc.lat, wgLoc.lon);  }  double dLat = transformLat(wgLoc.lon - 105.0,  wgLoc.lat - 35.0);  double dLon = transformLon(wgLoc.lon - 105.0,  wgLoc.lat - 35.0);  double radLat = wgLoc.lat / 180.0 * Math.PI;  double magic = Math.sin(radLat);  magic = 1 - ee * magic * magic;  double sqrtMagic = Math.sqrt(magic);  dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * Math.PI);  dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * Math.PI);  return new Lation(wgLoc.lat + dLat, wgLoc.lon + dLon);  }  //是否超出中国public boolean outOfChina(double lat, double lon) {if (lon < 72.004 || lon > 137.8347)return true;if (lat < 0.8293 || lat > 55.8271)return true;return false;}private static double transformLat(double x, double y) {double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(y * Math.PI) + 40.0 * Math.sin(y / 3.0 * Math.PI)) * 2.0 / 3.0;ret += (160.0 * Math.sin(y / 12.0 * Math.PI) + 320 * Math.sin(y * Math.PI / 30.0)) * 2.0 / 3.0;return ret;}private static  double transformLon(double x, double y) {double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * Math.PI) + 20.0 * Math.sin(2.0 * x * Math.PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(x * Math.PI) + 40.0 * Math.sin(x / 3.0 * Math.PI)) * 2.0 / 3.0;ret += (150.0 * Math.sin(x / 12.0 * Math.PI) + 300.0 * Math.sin(x / 30.0 * Math.PI)) * 2.0 / 3.0;return ret;}/*** 地球坐标转换为火星坐标* World Geodetic System ==> Mars Geodetic System** @param wgLat 地球坐标* @param wgLon*/public static Lation transform2Mars(double wgLat, double wgLon) {Lation lation = new Lation();if (outOfChina(wgLat, wgLon)) {lation.lat = wgLat;lation.lon = wgLon;return lation;}double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);double radLat = wgLat / 180.0 * Math.PI;double magic = Math.sin(radLat);magic = 1 - ee * magic * magic;double sqrtMagic = Math.sqrt(magic);dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * Math.PI);dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * Math.PI);lation.lat = wgLat + dLat;lation.lon = wgLon + dLon;return lation;}/*** 火星坐标转换为百度坐标** @param gg_lat* @param gg_lon*/public static  Lation bd_encrypt(double gg_lat, double gg_lon) {double x = gg_lon, y = gg_lat;double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);Lation lation = new Lation();lation.lon = z * Math.cos(theta) + 0.0065;lation.lat = z * Math.sin(theta) + 0.006;return lation;}/*** 百度转火星** @param bd_lat* @param bd_lon*/public static Lation bd_decrypt(double bd_lat, double bd_lon) {double x = bd_lon - 0.0065, y = bd_lat - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);Lation lation = new Lation();lation.lon = z * Math.cos(theta);lation.lat = z * Math.sin(theta);return lation;}}public  class Lation {double lat;double lon;//构造  set get}

xy转经纬 经纬转xy 各种坐标系相关推荐

  1. php计算格子xy,经纬度BL和直角坐标XY的正算反算 PHP代码

    这篇文章主要介绍了经纬度BL和直角坐标XY的正算反算 PHP代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 这里是用的北京54坐标6度分带.需要用其他坐标可以修改参数$_a, $_ ...

  2. python中xy坐标如何从十个中找到最远的两个_python – Opencv单应性从像素xy坐标中查找全局xy坐标...

    我试图找到变换矩阵H,以便我可以乘以(x,y)像素坐标并得到(x,y)真实世界坐标.这是我的代码: import cv2 import numpy as np from numpy.linalg im ...

  3. 地理坐标xy表示什么_建筑测量xy坐标的区别

    展开全部 1.标准不同.测量坐标是建筑区勘测设计时636f707962616964757a686964616f31333431363564建立的平面直角坐标系,与国家大地测量坐标相一致 ,坐标纵轴为南 ...

  4. 设z=〖(1+xy)〗^y,求 ∂z/∂y

    z=[(1+xy)]^y lnz=yln(1+xy) 两边同时对y求偏导,得 1/z ·∂z/∂y=ln(1+xy)+y·1/(1+xy)· x 1/z ·∂z/∂y=ln(1+xy)+xy/(1+x ...

  5. ABAQUS如何输出应力应变曲线(XY曲线)

    1.打开模型的odb文件 2.点击左侧工具区----->创建XY数据 . 3.弹出创建XY对话框,选择ODB场变量输出 4.分别选择E:应变分量中的主应变:S:应力分量中的主应力 并点击单元/节 ...

  6. 如何使用graphpad做柱形图_Graphpad Prism 8作图教程(2):XY图的属性设置

    Prism 可以对一幅图的每一个属性进行自定义.改发标志的形状,颜色和大小:改发柱形图的填充模式和颜色:改发数据组绘图的顺序等. 本文主要介绍以下内容: 1.XY图的外观 2.数据组的前后顺序 3.使 ...

  7. Matlab读文件夹下所有.xy文件

    Matlab读文件夹下所有.xy文件 为什么要读.xy文件 Excel打开.xy文件,如有多列数据情况,会合并成一列,需要手动进行分列.但如果需要处理的.xy文件十分多,重复性的分列操作十分繁琐,所以 ...

  8. XY轴控制板,料盒控制板,水路流量控制板,直流电机控制方案和程序代码

    该方案引导大家如何设计或使用一款控制板来实现直流有刷电机的XY轴控制,水泵流量的控制,料盒的控制和自动下料控制. 1,设计的理念 在自动化控制中,我们用步进电机.伺服电机.无刷电机来实现各种运动控制, ...

  9. xy苹果助手安装_XY苹果助手下载_XY苹果助手下载安装【免费手机版】-太平洋下载中心...

    XY苹果助手前身为XY助手,这是一款无需跳转iTunes即可实现一键快速下载正版资源的手机应用平台.XY苹果助手下载安装至手机中,用户更可体验它所提供的独家超级瘦身系统.照片压缩.大文件清理.清理垃圾 ...

  10. xy苹果助手安装_XY苹果助手下载

    XY苹果助手前身为XY助手,这是一款无需跳转iTunes即可实现一键快速下载正版资源的手机应用平台.XY苹果助手下载安装至手机中,用户更可体验它所提供的独家超级瘦身系统.照片压缩.大文件清理.清理垃圾 ...

最新文章

  1. 亿级PV,常见性能优化策略总结与真实案例
  2. http://blog.sina.com.cn/s/blog_7b9d64af0101cjci.html
  3. Hadoop 数据类型与文件结构剖析 Sequence, Map, Set, Array, BloomMap Files
  4. bilibili基于 Flink 的机器学习工作流平台在 b 站的应用
  5. IBM Java垃圾回收
  6. Sring3MVC页面无刷新上传文件
  7. .net Repeater知识知多少
  8. 买了社保,再买农村医保是不是多余?
  9. 编码 —— 差错检验
  10. python hash表_python数据结构与算法——哈希表
  11. 2017 4月20日下午
  12. php中的数值型字符串相加 相比较( ==)
  13. java抽组件,基于Java组件与基于请求的框架
  14. 孙鑫VC学习笔记:第九讲 界面修改,工具栏,状态栏,启动画面的制作
  15. 欧氏空间距离和内积_希尔伯特空间(Hilbert Space)
  16. 饭后小甜点leetcode——堆
  17. 黑客教父龚蔚谈公共WiFi该不该连?
  18. 2021-11-15 cv2.erode()和cv2.dilate()的原理理解
  19. 记录一次Excel表格的误删恢复操作,WPS版
  20. 某网站提供的免费香港虚拟主机测试

热门文章

  1. SAP 工单报工批次确定自动带出批次并拆分
  2. ubuntu给手机刷机安卓8.0 ROOT+Xposed+JustTrustMe+Kali NetHunter
  3. Layabox 实现 PageView 翻页
  4. 关于利用背景减除法的固定摄像头的移动侦测算法
  5. 2021年9月份最新数据库排行榜出炉
  6. RouterOS IPv4转IPv6环境搭建
  7. Unity 如何获取安卓设备的SN号
  8. speex java_(原创)speex与wav格式音频文件的互相转换(二)
  9. 网络排查工具MTR介绍
  10. MongoDB下载安装教程 全