-
2020-05-10 10:02:55
CAD制图中,经常要用到根据图上某点坐标标注经纬度的功能,之前在网上找了一个西安80坐标系下标注的,现在用2000的比较多,网上没有找到合适的,所以自己照着三调的培训资料写了一下,三调的资料内有高斯投影的计算公式以及图幅分幅和随球面积等计算内容。网上有很多.net下写的2000坐标系下高斯反算的代码,但是我没看懂,没理解需要迭代循环的一部分,如果有懂的,可以给科普一下。谢谢。
五个常数自行翻阅三调培训资料,我不确定是不是涉密。(defun xytobl2000 (y x cm / a bb f e2 e12 p k0 k1 k2 k3 k4 E Bf tt n2 C V N B L) ;椭球参数及常数 (setq a 6378137.0 bb 6356752.31414036 f 0.003352810681182 e2 0.006694380022901 e12 0.006739496775479 p 206264.806247097 k0 0.00000015*** k1 0.005052**** k2 0.00002*** k3 0.00000024***** k4 0.0000***** ) (setq E (* k0 x) Bf (+ E (* (cos E) (- (+ (- (* k1 (sin E)) (* k2 (expt (sin E) 3))) (* k3 (expt (sin E) 5)) ) (* k4 (expt (sin E) 7)) ) ) ) tt (/ (sin Bf) (cos Bf)) n2 (* e12 (expt (cos Bf) 2)) C (/ (expt a 2) bb) V (sqrt (+ 1 n2)) N (/ C V) ) (setq B (- (+ (- Bf (* 0.5 (* (expt V 2) tt (expt (/ y N) 2)) ) ) (* (/ 1 24.0) (- (+ 5 (* 3 (expt tt 2)) n2) (* 9 n2 (expt tt 2))) (* (expt V 2) tt) (expt (/ y N) 4) ) ) (* (/ 1 720.0) (+ 61 (* 90 (expt tt 2)) (* 45 (expt tt 4)) ) (* (expt V 2) tt) (expt (/ y N) 6) ) ) ) ;endB (setq L (+ (- (* (/ 1 (cos Bf)) (/ y N) ) (* (/ 1 6.0) (+ 1 (* 2 (expt tt 2)) n2 ) (/ 1 (cos Bf)) (expt (/ y N) 3) ) ) (* (/ 1 120.0) (+ 5 (* 28 (expt tt 2)) (* 24 (expt tt 4)) (* 6 n2) (* 6 n2 (expt tt 2)) ) (/ 1 (cos Bf)) (expt (/ y N) 5) ) cm ) ) ;endL (list (dfm L) (dfm B)) ) ;end defun
实际上没有什么技术含量,就是照书上的公式写出来就行,有了公式和简化后的常量,EXCEL也可以代入计算。
更多相关内容 -
大地坐标与经纬度坐标转换
2017-03-20 13:08:09大地坐标与经纬度坐标转换 -
经纬度与大地坐标转换工具
2018-02-22 12:01:28经纬度与大地坐标转换工具,多个参考系选择,投影面选择,操作简便。 -
大地坐标系与经纬度转换(一):大地坐标系简介
2019-11-22 14:38:48一、大地坐标系 大地坐标系是大地测量中以参考椭球面为基准面建立起来的坐标系。地面点的位置用大地经度、大地纬度和大地高度表示。 二、地心坐标系 ...大地坐标系简介
大地坐标系是大地测量中以参考椭球面为基准面建立起来的坐标系,也就是地理坐标系,地面点的位置用大地经度L、大地纬度B和大地高度H表示,单位为度分秒。其中有三类比较常用的大地坐标系统,即地心坐标系统、参心坐标系统和地方独立坐标系统。
介绍不同坐标系统之前,首先简要介绍下经纬度的概念。
大地经纬度示意图:(B为纬度,L为经度,H为高度)
某地的大地经度是本初子午线与本地子午线的夹角,如图中的经度。本初子午线是指通过英国伦敦格林尼治天文台原址的那条经线,也称为0°经线。大地经度分为东经和西经,东经为正,西经为负,东西各为180度,每15度时间相差一个小时。某地的大地纬度是将地球表面点投射到地球椭球体上,投影点法线方向与赤道平面的夹角为该点的大地纬度,即垂直于该地椭球面的线与赤道面的夹角。
1、地心坐标系
地心坐标系是以地球质心为原点建立的空间直角坐标系,或以球心与地球质心重合的地球椭球面为基准面所建立的大地坐标系,通常分为地心空间直角坐标系(以x,y,z为其坐标元素)和地心大地坐标系(以B,L,H为其坐标元素)。
常用的有WGS84、CGCS2000等。(主要是选的椭球体不一样,所以有不同的坐标系统)
其中WGS84是美国国家影像制图局NIMA在WGS72基础上改进的、全球统一的地心坐标系,是现有应用于导航、精确大地测量和地图制图的最好的全球大地参考系(GPS星历的坐标系,于2002年修正)。
注:地心坐标系又名协议地球坐标系,与GPS的瞬时地球坐标系要对应起来。
2、参心坐标系
WGS是针对全球建立的坐标系,针对某一地区可能误差较大,为了让地图能尽可能描述某个地区的地形,便建立所谓的“参心坐标系”。为了贴合某地区,参心坐标系的中心并不在地球质心,是以所选椭球体圆心为中心,X、Y、Z三轴的定义与地心坐标系一致。
我国常用的参心坐标系有BJZ54(原)、西安80和BJZ54(北京54)(新)等。
3、常见坐标系简介
1、WGS坐标系
WGS84坐标系全称World Geodetic System - 1984,是为了解决GPS定位而产生的全球统一的一个地心坐标系。● 椭球体:WGS84椭球
● 长半径=6378137m
● 短半径b=6356752.3142m
● 第一偏心率平方e2=0.00669437999013
● 第二偏心率平方e2=0.006739496742227
● 扁率=1/298.2572235632、BJZ54坐标系
北京54参心坐标系,它是以克拉索夫斯基椭球为基础,经局部平差后产生的坐标系。1954年北京坐标系可以认为是前苏联1942年坐标系的延伸。它的原点不在北京而是在前苏联的普尔科沃。● 椭球体:克拉索夫斯基椭球
● 长半径=6378245m
● 短半径b=6356863.0188m
● 第一偏心率平方e2=0.006693421622
● 扁率=1/298.33、西安80坐标系
西安80坐标系是指1980年西安参心坐标系,该坐标系的大地原点设在我国中部的陕西省泾阳县永乐镇,位于西安市西北方向约60公里,又简称西安大地原点。基准面为黄海水面。
● 椭球体:IAG椭球
● 长半径 a=6378140m
● 短半径 b=6356755m
● 第一偏心率平方e2=0.00669438499959
● 扁率=1/298.257221014、CGCS2000坐标系
2000国家大地坐标系是全球地心坐标系在我国的具体体现,是我国当前最新的国家大地坐标系,其全称为China Geodetic Coordinate System 2000,其原点为包括海洋和大气的整个地球的质量中心。● 椭球体:CGCS2000坐标系
● 长半轴 a=6378137m
● 短半轴 b=6356752.314m
● 第一偏心率平方e2=0.00669438002290
● 扁率=1/298.257222101注意:CGCS2000的定义与WGS84采用的参考椭球非常接近。
-
大地经纬度坐标转换
2018-04-06 16:23:32转换大地经纬度坐标使用。可用于西安80北京54和经纬度坐标之间的转换 -
UTM大地坐标系与经纬度转换算法C++
2021-05-24 19:54:47UTM坐标系,需要确定给定UTM区域的中央子午线。 分为三分度和六分度。 三分度 3度带:中央子午线计算公式:中央子午线L=3 ×N 。N=当地经度/3,N值进行四舍五入后即为3度带的带号。 六分度 6度带:中央子午线计算...中央子午线
UTM坐标系,需要确定给定UTM区域的中央子午线。
分为三分度和六分度。三分度
3度带:中央子午线计算公式:中央子午线L=3 ×N 。N=当地经度/3,N值进行四舍五入后即为3度带的带号。
六分度
6度带:中央子午线计算公式:中央子午线L=6 ×(N+1)-3 。N=[当地经度/6],N值不进行四舍五入,只取整数部分,(N+1)即为6度带的带号。
代号查询:
https://www.docin.com/p-1652560117.html注意
下面的转换代码,用的是六分度的中央子午线,范围为(-177,177)。
UTM转经纬度
引入头文件
#include “CoorConv.hpp”double x = 690829.75249613554; double y = 3118616.9477559421; WGS84Corr t; //长沙的zone为49 长沙的中央子午线经度为111,推出zone为49 //return DegToRad(-183.0 + (zone * 6.0)); UTMXYToLatLon(x, y, 49,false,t); double lat = RadToDeg(t.lat); //注意弧度转角度!!! double log = RadToDeg(t.log);
经纬度转UTM
WGS84Corr t; t.lat = 28.17951; t.log = 112.943878; LatLonToUTMXY(DegToRad(t.lat), DegToRad(t.log),49,test); std::cout << test.x << " " << test.y << std::endl;
相关的头文件!直接引入就可以用!
//CoorConv.hpp #ifndef __COORCONV_H__ #define __COORCONV_H__ #include <cmath> double pi = 3.14159265358979; /* Ellipsoid model constants (actual values here are for WGS84) */ double sm_a = 6378137.0; double sm_b = 6356752.314; double sm_EccSquared = 6.69437999013e-03; double UTMScaleFactor = 0.9996; typedef struct tagUTMCorr { double x; double y; }UTMCoor; //UTM坐标系 typedef struct tagWGS84Corr { double lat; double log; }WGS84Corr; //经纬度 /* * DegToRad * * Converts degrees to radians. * 将度数转换为弧度 */ inline double DegToRad (double deg) { return (deg / 180.0 * pi); } /* * RadToDeg * * Converts radians to degrees. * 将弧度转换为度数 */ inline double RadToDeg (double rad) { return (rad / pi * 180.0); } /* * ArcLengthOfMeridian * * Computes the ellipsoidal distance from the equator to a point at a * given latitude. 计算从赤道到a点的椭圆距离给定纬度。 * * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J., * GPS: Theory and Practice, 3rd ed. New York: Springer-Verlag Wien, 1994. * * Inputs: * phi - Latitude of the point, in radians. * phi-点的纬度,以弧度为单位。 * Globals: * sm_a - Ellipsoid model major axis. * sm_b - Ellipsoid model minor axis. * * Returns: * The ellipsoidal distance of the point from the equator, in meters. * 点到赤道的椭圆距离,以米为单位 */ double ArcLengthOfMeridian (double phi) { double alpha, beta, gamma, delta, epsilon, n; double result; /* Precalculate n */ n = (sm_a - sm_b) / (sm_a + sm_b); /* Precalculate alpha */ alpha = ((sm_a + sm_b) / 2.0) * (1.0 + (pow(n, 2.0) / 4.0) + (pow(n, 4.0) / 64.0)); /* Precalculate beta */ beta = (-3.0 * n / 2.0) + (9.0 * pow(n, 3.0) / 16.0) + (-3.0 * pow(n, 5.0) / 32.0); /* Precalculate gamma */ gamma = (15.0 * pow(n, 2.0) / 16.0) + (-15.0 * pow(n, 4.0) / 32.0); /* Precalculate delta */ delta = (-35.0 * pow(n, 3.0) / 48.0) + (105.0 * pow(n, 5.0) / 256.0); /* Precalculate epsilon */ epsilon = (315.0 * pow(n, 4.0) / 512.0); /* Now calculate the sum of the series and return */ result = alpha * (phi + (beta * sin(2.0 * phi)) + (gamma * sin(4.0 * phi)) + (delta * sin(6.0 * phi)) + (epsilon * sin(8.0 * phi))); return result; } /* * UTMCentralMeridian * UTMC中央子午线 * Determines the central meridian for the given UTM zone. * 确定给定UTM区域的中央子午线 * Inputs: * zone - An integer value designating the UTM zone, range [1,60]. * zone- 指定UTM区域的整数值,范围[1,60] * Returns: * The central meridian for the given UTM zone, in radians, or zero * 给定UTM区域的中央子午线,以弧度为单位 * if the UTM zone parameter is outside the range [1,60]. * 如果UTM区域参数不在[1,60]范围内,返回0 * Range of the central meridian is the radian equivalent of [-177,+177]. * 中央子午线的范围是[-177,+ 177]的弧度 */ inline double UTMCentralMeridian (int zone) { return DegToRad(-183.0 + (zone * 6.0)); } /* * FootpointLatitude * * Computes the footpoint latitude for use in converting transverse * 计算用于转换横向的立足点纬度 * Mercator coordinates to ellipsoidal coordinates. * * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J., * GPS: Theory and Practice, 3rd ed. New York: Springer-Verlag Wien, 1994. * * Inputs: * y - The UTM northing coordinate, in meters. * y - UTM北坐标,以米为单位 * Returns: * The footpoint latitude, in radians. * 返回立足点的纬度,以弧度为单位 * */ double FootpointLatitude (double y) { double y_, alpha_, beta_, gamma_, delta_, epsilon_, n; double result; /* Precalculate n (Eq. 10.18) */ n = (sm_a - sm_b) / (sm_a + sm_b); /* Precalculate alpha_ (Eq. 10.22) */ /* (Same as alpha in Eq. 10.17) */ alpha_ = ((sm_a + sm_b) / 2.0) * (1 + (pow(n, 2.0) / 4) + (pow(n, 4.0) / 64)); /* Precalculate y_ (Eq. 10.23) */ y_ = y / alpha_; /* Precalculate beta_ (Eq. 10.22) */ beta_ = (3.0 * n / 2.0) + (-27.0 * pow(n, 3.0) / 32.0) + (269.0 * pow(n, 5.0) / 512.0); /* Precalculate gamma_ (Eq. 10.22) */ gamma_ = (21.0 * pow(n, 2.0) / 16.0) + (-55.0 * pow(n, 4.0) / 32.0); /* Precalculate delta_ (Eq. 10.22) */ delta_ = (151.0 * pow (n, 3.0) / 96.0) + (-417.0 * pow (n, 5.0) / 128.0); /* Precalculate epsilon_ (Eq. 10.22) */ epsilon_ = (1097.0 * pow(n, 4.0) / 512.0); /* Now calculate the sum of the series (Eq. 10.21) */ result = y_ + (beta_ * sin(2.0 * y_)) + (gamma_ * sin(4.0 * y_)) + (delta_ * sin(6.0 * y_)) + (epsilon_ * sin(8.0 * y_)); return result; } /* * MapLatLonToXY * * Converts a latitude/longitude pair to x and y coordinates in the * Transverse Mercator projection. Note that Transverse Mercator is not * the same as UTM; a scale factor is required to convert between them. **将纬度/经度对转换为x和y坐标,横向墨卡托投影。 请注意,横轴墨卡托与UTM不同; 需要比例因子在它们之间进行转换。 * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J., * GPS: Theory and Practice, 3rd ed. New York: Springer-Verlag Wien, 1994. * * Inputs: * phi - Latitude of the point, in radians. * lambda - Longitude of the point, in radians. * lambda0 - Longitude of the central meridian to be used, in radians. * phi-点的纬度,以弧度为单位。 * lambda-点的经度,以弧度为单位。 * lambda0-要使用的中央子午线的经度,以弧度为单位。 * Outputs: * xy - A 2-element array containing the x and y coordinates * of the computed point. * xy-一个2元素的数组,其中包含计算点的x和y坐标 * Returns: * The function does not return a value. * */ void MapLatLonToXY (double phi, double lambda, double lambda0, UTMCoor &xy) { double N, nu2, ep2, t, t2, l; double l3coef, l4coef, l5coef, l6coef, l7coef, l8coef; double tmp; /* Precalculate ep2 */ ep2 = (pow(sm_a, 2.0) - pow(sm_b, 2.0)) / pow(sm_b, 2.0); /* Precalculate nu2 */ nu2 = ep2 * pow(cos(phi), 2.0); /* Precalculate N */ N = pow(sm_a, 2.0) / (sm_b * sqrt(1 + nu2)); /* Precalculate t */ t = tan (phi); t2 = t * t; tmp = (t2 * t2 * t2) - pow (t, 6.0); /* Precalculate l */ l = lambda - lambda0; /* Precalculate coefficients for l**n in the equations below so a normal human being can read the expressions for easting and northing -- l**1 and l**2 have coefficients of 1.0 */ l3coef = 1.0 - t2 + nu2; l4coef = 5.0 - t2 + 9 * nu2 + 4.0 * (nu2 * nu2); l5coef = 5.0 - 18.0 * t2 + (t2 * t2) + 14.0 * nu2 - 58.0 * t2 * nu2; l6coef = 61.0 - 58.0 * t2 + (t2 * t2) + 270.0 * nu2 - 330.0 * t2 * nu2; l7coef = 61.0 - 479.0 * t2 + 179.0 * (t2 * t2) - (t2 * t2 * t2); l8coef = 1385.0 - 3111.0 * t2 + 543.0 * (t2 * t2) - (t2 * t2 * t2); /* Calculate easting (x) */ xy.x = N * cos (phi) * l + (N / 6.0 * pow(cos(phi), 3.0) * l3coef * pow(l, 3.0)) + (N / 120.0 * pow(cos(phi), 5.0) * l5coef * pow(l, 5.0)) + (N / 5040.0 * pow(cos (phi), 7.0) * l7coef * pow(l, 7.0)); /* Calculate northing (y) */ xy.y = ArcLengthOfMeridian (phi) + (t / 2.0 * N * pow(cos(phi), 2.0) * pow(l, 2.0)) + (t / 24.0 * N * pow(cos(phi), 4.0) * l4coef * pow(l, 4.0)) + (t / 720.0 * N * pow(cos(phi), 6.0) * l6coef * pow(l, 6.0)) + (t / 40320.0 * N * pow(cos(phi), 8.0) * l8coef * pow(l, 8.0)); } /* * MapXYToLatLon * * Converts x and y coordinates in the Transverse Mercator projection to * a latitude/longitude pair. Note that Transverse Mercator is not * the same as UTM; a scale factor is required to convert between them. * 将“横向墨卡托”投影中的x和y坐标转换为纬度/经度对。 * 请注意,横轴墨卡托与UTM不同;需要比例因子在它们之间进行转换。 * Reference: Hoffmann-Wellenhof, B., Lichtenegger, H., and Collins, J., * GPS: Theory and Practice, 3rd ed. New York: Springer-Verlag Wien, 1994. * * Inputs: * x - The easting of the point, in meters. * y - The northing of the point, in meters. * lambda0 - Longitude of the central meridian to be used, in radians. * * Outputs: * philambda - A 2-element containing the latitude and longitude * in radians. * 输入: * x-点的东移,以米为单位。 * y-点的北,以米为单位。 * lambda0-要使用的中央子午线的经度,以弧度为单位。 * *输出: * philambda-包含纬度和经度的2元素,单位为弧度。 * Returns: * The function does not return a value. * * Remarks: * The local variables Nf, nuf2, tf, and tf2 serve the same purpose as * N, nu2, t, and t2 in MapLatLonToXY, but they are computed with respect * to the footpoint latitude phif. * * x1frac, x2frac, x2poly, x3poly, etc. are to enhance readability and * to optimize computations. * */ void MapXYToLatLon (double x, double y, double lambda0, WGS84Corr &philambda) { double phif, Nf, Nfpow, nuf2, ep2, tf, tf2, tf4, cf; double x1frac, x2frac, x3frac, x4frac, x5frac, x6frac, x7frac, x8frac; double x2poly, x3poly, x4poly, x5poly, x6poly, x7poly, x8poly; /* Get the value of phif, the footpoint latitude. */ phif = FootpointLatitude (y); /* Precalculate ep2 */ ep2 = (pow(sm_a, 2.0) - pow(sm_b, 2.0)) / pow(sm_b, 2.0); /* Precalculate cos (phif) */ cf = cos (phif); /* Precalculate nuf2 */ nuf2 = ep2 * pow (cf, 2.0); /* Precalculate Nf and initialize Nfpow */ Nf = pow(sm_a, 2.0) / (sm_b * sqrt(1 + nuf2)); Nfpow = Nf; /* Precalculate tf */ tf = tan (phif); tf2 = tf * tf; tf4 = tf2 * tf2; /* Precalculate fractional coefficients for x**n in the equations below to simplify the expressions for latitude and longitude. */ x1frac = 1.0 / (Nfpow * cf); Nfpow *= Nf; /* now equals Nf**2) */ x2frac = tf / (2.0 * Nfpow); Nfpow *= Nf; /* now equals Nf**3) */ x3frac = 1.0 / (6.0 * Nfpow * cf); Nfpow *= Nf; /* now equals Nf**4) */ x4frac = tf / (24.0 * Nfpow); Nfpow *= Nf; /* now equals Nf**5) */ x5frac = 1.0 / (120.0 * Nfpow * cf); Nfpow *= Nf; /* now equals Nf**6) */ x6frac = tf / (720.0 * Nfpow); Nfpow *= Nf; /* now equals Nf**7) */ x7frac = 1.0 / (5040.0 * Nfpow * cf); Nfpow *= Nf; /* now equals Nf**8) */ x8frac = tf / (40320.0 * Nfpow); /* Precalculate polynomial coefficients for x**n. -- x**1 does not have a polynomial coefficient. */ x2poly = -1.0 - nuf2; x3poly = -1.0 - 2 * tf2 - nuf2; x4poly = 5.0 + 3.0 * tf2 + 6.0 * nuf2 - 6.0 * tf2 * nuf2 - 3.0 * (nuf2 *nuf2) - 9.0 * tf2 * (nuf2 * nuf2); x5poly = 5.0 + 28.0 * tf2 + 24.0 * tf4 + 6.0 * nuf2 + 8.0 * tf2 * nuf2; x6poly = -61.0 - 90.0 * tf2 - 45.0 * tf4 - 107.0 * nuf2 + 162.0 * tf2 * nuf2; x7poly = -61.0 - 662.0 * tf2 - 1320.0 * tf4 - 720.0 * (tf4 * tf2); x8poly = 1385.0 + 3633.0 * tf2 + 4095.0 * tf4 + 1575 * (tf4 * tf2); /* Calculate latitude */ philambda.lat = phif + x2frac * x2poly * (x * x) + x4frac * x4poly * pow(x, 4.0) + x6frac * x6poly * pow(x, 6.0) + x8frac * x8poly * pow(x, 8.0); /* Calculate longitude */ philambda.log = lambda0 + x1frac * x + x3frac * x3poly * pow(x, 3.0) + x5frac * x5poly * pow(x, 5.0) + x7frac * x7poly * pow(x, 7.0); } /* * LatLonToUTMXY * * Converts a latitude/longitude pair to x and y coordinates in the * Universal Transverse Mercator projection. * 将纬度/经度对转换为x和y坐标 * Inputs: * lat - Latitude of the point, in radians. * lon - Longitude of the point, in radians. * zone - UTM zone to be used for calculating values for x and y. * If zone is less than 1 or greater than 60, the routine * will determine the appropriate zone from the value of lon. * 输入: * lat-点的纬度,以弧度为单位。 * lon-点的经度,以弧度为单位。 * zone-用于计算x和y值的UTM区域。 * 如果区域小于1或大于60,则例程将根据lon的值确定适当的区域。 * Outputs: * xy - A 2-element array where the UTM x and y values will be stored. * xy-2元素数组,将存储UTM x和y值 * Returns: * void * */ void LatLonToUTMXY (double lat, double lon, int zone, UTMCoor &xy) { MapLatLonToXY (lat, lon, UTMCentralMeridian(zone), xy); /* Adjust easting and northing for UTM system. */ xy.x = xy.x * UTMScaleFactor + 500000.0; xy.y = xy.y * UTMScaleFactor; if (xy.y < 0.0) xy.y += 10000000.0; } /* * UTMXYToLatLon * * Converts x and y coordinates in the Universal Transverse Mercator * projection to a latitude/longitude pair. * 在通用横轴墨卡托中转换x和y坐标投影到纬度/经度对。 * * Inputs: * x - The easting of the point, in meters. * y - The northing of the point, in meters. * zone - The UTM zone in which the point lies. * southhemi - True if the point is in the southern hemisphere; * false otherwise. * 输入: * x-点的东移,以米为单位。 * y-点的北,以米为单位。 * zone-点所在的UTM区域。 * southhemi-如果该点在南半球,则为true;否则为true。 * 否则为false。 * Outputs: * latlon - A 2-element array containing the latitude and * longitude of the point, in radians. * * Returns: * The function does not return a value. * */ void UTMXYToLatLon (double x, double y, int zone, bool southhemi, WGS84Corr &latlon) { double cmeridian; x -= 500000.0; x /= UTMScaleFactor; /* If in southern hemisphere, adjust y accordingly. */ if (southhemi) y -= 10000000.0; y /= UTMScaleFactor; cmeridian = UTMCentralMeridian (zone); MapXYToLatLon (x, y, cmeridian, latlon); } #endif //__COORCONV_H__
-
python实现百度坐标和世界经纬度坐标之间的转换
2018-10-20 18:12:46python实现百度墨卡托坐标,百度经纬度坐标,火星坐标,WGS84坐标之间的相互转换。 -
大地坐标系(经纬度)转J2000惯性系 (Matlab源码)
2017-12-04 09:05:33自己编写的大地坐标系(经纬度)转J2000惯性系的Matlab源码,希望对大家有帮助,输入以角度制方式,需要弧度制的可自行更改 -
matlab 笛卡尔坐标系转换为大地坐标系
2020-05-25 21:21:12matlab编程计算,源代码。可以将笛卡尔坐标系下的坐标转换为大地坐标系下的坐标,大地坐标系的参数可以自己设置,如选择WGS84或是CGCS2000 -
基于C++的高斯坐标系下经纬度与大地坐标转换程序
2012-01-08 22:01:13本程序是基于C++编写的,旨在解决空间坐标与大地坐标之间的转换,操作简单,提供源代码! -
java实现CGS2000大地坐标和WGS84经纬度坐标互转,亲测准确
2021-11-18 16:41:26//CGCS2000坐标系参数 //a=6378137.0; f=1/298.2572236; //wgs84坐标系参数 longitude0 = 117;//中央子午线 根据实际进行配置 longitude0 = longitude0 * iPI ;//中央子午线转换为弧度 longitude1 = longitude * ...WGS84转CGS2000
中央子午线需要根据实际设置,参数为经度,纬度,输出值为经度(x),纬度(y)
public static Point WGS84ToCGS2000(double longitude, double latitude)//参数 经度,纬度 { Point pt = null; double[] output = new double[2]; double longitude1,latitude1, longitude0, X0,Y0, xval,yval; //NN曲率半径,测量学里面用N表示 //M为子午线弧长,测量学里用大X表示 //fai为底点纬度,由子午弧长反算公式得到,测量学里用Bf表示 //R为底点所对的曲率半径,测量学里用Nf表示 double a,f, e2,ee, NN, T,C,A, M, iPI; iPI = 0.0174532925199433; //3.1415926535898/180.0; a=6378137.0; f=1/298.257222101; //CGCS2000坐标系参数 //a=6378137.0; f=1/298.2572236; //wgs84坐标系参数 longitude0 = 117;//中央子午线 根据实际进行配置 longitude0 = longitude0 * iPI ;//中央子午线转换为弧度 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 = 500000L; Y0 = 0; xval = xval+X0; yval = yval+Y0; //转换为投影 output[0] = xval; output[1] = yval; pt = new Point(output[0],output[1]); return pt; }
CGS2000转WGS84
中央子午线需根据实际设置,输入参数为纬度,经度,输出result的顺序为result[0]纬度(y),result[1]经度(x)
private static double formatby6(double num) { String result = String.format("%.6f", num); return Double.valueOf(result); } //2000转84 public static Point CGS2000ToWGS84(double X, double Y) { Point pt = null; double L0 = 117;//中央子午线需根据实际情况设置 double lat ,lon; Y-=500000; double [] result = new double[2]; double iPI = 0.0174532925199433;//pi/180 double a = 6378137.0; //长半轴 m double b = 6356752.31414; //短半轴 m double f = 1/298.257222101;//扁率 a-b/a double 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] =formatby6(lat/iPI); result[1] =formatby6(L0+lon/iPI); //System.out.println(result[1]+","+result[0]); pt = new Point(result[1],result[0]); return pt; }
-
计算UTM坐标转换为经纬度坐标
2015-04-06 13:44:42计算UTM坐标转换为经纬度坐标 根据UTM定义 Excel表格自动计算 输入UTM坐标参数,自动计算并且输出经纬度坐标 Excel表格自动计算 输入UTM坐标参数,自动计算并且输出经纬度坐标 Excel表格自动计算 输入UTM坐标参数... -
经纬度互转大地坐标系
2021-02-20 14:39:49经纬度互转大地坐标系 -
经纬度与大地坐标转换七参数四参数转换
2017-11-04 19:42:44一般而言比较严密的是用七参数法(包括布尔莎模型,一步法模型,海尔曼特等),即X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度变化K。要求得七参数就需要在一个地区需要3个以上的已知点,如果区域范围不大,最... -
经纬度在线转换
2022-04-09 23:29:41大地坐标系统转换为高斯平面直角坐标系在线转换工具,在线计算,在线计算器,计算器在线计算 -
经纬度与大地坐标相互转换
2020-04-24 11:05:19经纬度与大地坐标相互转换 摘自https://www.cnblogs.com/zhangzhifeng/archive/2011/07/27/2118012.html 作者信息:http://wallimn.javaeye.com public class GaussXYDeal { // 由高斯投影坐标反算成经纬度 public ... -
WGS84,GCJ-02,BD-09坐标系间的经纬度坐标转换代码(Python版)
2022-02-17 19:29:11WGS84,GCJ-02,BD-09坐标系间的经纬度坐标转换代码,对不同地图坐标系间的经纬度坐标进行转换从而实现坐标系的统一。 -
python实现WGS84平面大地坐标(X,Y)转换经纬度BL类
2019-09-28 12:32:38python实现WGS84平面大地坐标(X,Y)转换经纬度(B,L)类 WGS84 * 长半轴a=6378137± 2(m) * 短半轴b=6356752.3142m * 扁率α=1/298.257223563 * 第一偏心率平方 =0.00669437999013 * 第二偏心率平方 ... -
大地坐标与经纬度坐标转换函数PHP(精度略高于Coord)
2019-09-09 10:04:26基于PHP实现的大地坐标与经纬度坐标转换函数,可直接在apache服务下运行。运行方式为localhost:port/XY2BL-BL2XY?B=latitude@L=longitude。port为端口号,latitude为纬度值,longitude为经度值。大地坐标转经纬度... -
经纬度与我国54、80大地坐标转换的小工具
2021-05-19 09:01:59经纬度与我国54、80大地坐标转换的小工具,经纬度与我国54、80大地坐标转换工具提供最常用的EGM96模型和Geoid99模型。坐标转换应该是怎样的呢?一般而言比较严密的是用七参数法(包括布尔莎模型,一步法模型,海尔曼... -
js 大地坐标转经纬度
2020-12-16 10:16:47// 坐标系的转换 var pi_180 = Math.PI / 180; var _180_pi = 180 / Math.PI; var projectionTypes = {}; projectionTypes.bj54 = { a: 6378245,//长半轴 e2: 0.006693421622966//第一偏心率平方 }; ... -
基于VB的2000国家大地坐标系坐标转换程序的实现
2020-07-12 23:32:10针对目前2000国家大地坐标系下矿山测量坐标转换应用软件普遍较少情况,利用VB6.0平台开发了2000国家大地坐标系下包括高斯正反算和换带计算功能的坐标转换程序。通过代码调试和数据计算验证可知,高斯正算和换带计算均... -
java代码实现CGCS2000大地坐标系XY值转化为对应经纬度
2021-01-27 14:03:47以下的方法可以实现CGCS2000大地坐标系XY值转化为对应经纬度信息, 注意输入的XY值与给定的值相反,则参数X为已知的Y,参数Y为已知的X。 得出的结果为 [纬度,经度],不要应用错误。 L0参数为中央子午线的经线值... -
地球表面cgcs2000大地坐标转经纬度.txt
2021-05-08 14:55:27地球表面cgcs2000大地坐标转经纬度源码 -
Python版经纬度坐标转换
2021-09-23 00:20:02常见地图厂家参考坐标系: 1. 地球坐标系——WGS84:常见于 GPS ...4. 天地图坐标系——CGCS2000:2000国家大地坐标系(CGCS 2000) 与 WGS84差别极小可以认为是同一种坐标系。 Python3坐标转换代码(转载,有删改) -
大地坐标系是不是经纬度_大地测量学基础(复习)第三部分
2020-11-07 05:11:30这篇博文是用来复习课程“大地测量学基础”的,里面仅列出本人觉得这门课程比较重要的部分,希望能够帮助到有需要的朋友。 课本采用《大地测量学基础》孔祥元,武汉大学出版社。 前面已经有一篇“大地测量学基础... -
经纬度和大地坐标转换器
2011-01-02 12:36:02可以对经纬度和平面坐标之间进行转换,可以进行WGS84,北京54,西安80坐标系统之间的转换 -
java实现坐标系转换
2020-09-25 17:09:36java实现2000坐标转wgs84,WGS84和cgcs2000互转,使用String字符串解析和三参数算法实现,只需坐标就能实现 -
地理坐标转换小工具集
2020-02-27 17:49:16坐标转换小工具,支持北京54,西安80,wgs84下经纬度和xy坐标系之间的转换,可设置四参数、七参数,空间直角坐标系,大地坐标,平面坐标等类型的转换 -
平面坐标转大地坐标(经纬度)
2016-09-26 11:06:12源坐标类型选择“平面坐标” 目标坐标类型选择“大地坐标”,椭球基准,根据自己源文件坐标类型来选,我的文件类型是 西安80坐标系,所以选择 国家-80坐标。 3.投影设置(很重要,否则算出来的经纬度偏差很大) 接...