【转】GPS经纬度数据转换到以米单位的平面坐标系

以前在网上找的,现在不知道出处是哪里了,呵呵...

转载出来。

  1 //笛卡尔坐标系
  2 typedef struct tagCRDCARTESIAN{
  3 double x;
  4 double y;
  5 double z;
  6 }CRDCARTESIAN,*PCRDCARTESIAN;
  7 //typedef CRDCARTESIAN *PCRDCARTESIAN;
  8 //大地坐标系
  9 typedef struct tagCRDGEODETIC{
 10 double longitude; //经度
 11 double latitude;  //纬度
 12 double height;    //大地高,可设为0
 13 }CRDGEODETIC;
 14 typedef CRDGEODETIC *PCRDGEODETIC;
 15
 16 void CoordCovert::GeodeticToCartesian (PCRDCARTESIAN pcc, PCRDGEODETIC pcg,
 17 double dSemiMajorAxis, double dFlattening)
 18 {
 19     double B;    //纬度度数
 20     double L;    //经度度数
 21     double L0;    //中央经线度数
 22     double l;    //L-L0
 23     double t;    //tanB
 24     double m;    //ltanB
 25     double N;    //卯酉圈曲率半径
 26     double q2;
 27     double x;    //高斯平面纵坐标
 28     double y;    //高斯平面横坐标
 29     double s;    //赤道至纬度B的经线弧长
 30     double f;    //参考椭球体扁率
 31     double e2;    //椭球第一偏心率
 32     double a;    //参考椭球体长半轴
 33     //double b;    //参考椭球体短半轴
 34     double a1;
 35     double a2;
 36     double a3;
 37     double a4;
 38     double b1;
 39     double b2;
 40     double b3;
 41     double b4;
 42     double c0;
 43     double c1;
 44     double c2;
 45     double c3;
 46     int Datum=84;    //投影基准面类型:北京54基准面为54,西安80基准面为80,WGS84基准面为84
 47     int prjno=0;    //投影带号
 48     int zonewide=3;
 49     double IPI=0.0174532925199433333333;    //3.1415926535898/180.0
 50     B=pcg->latitude ; //纬度
 51     L=pcg->longitude ; //经度
 52     if (zonewide==6)
 53     {
 54          prjno=(int)(L/zonewide)+1;
 55          L0=prjno*zonewide-3;
 56     }
 57     else
 58     {
 59         prjno=(int)((L-1.5)/3)+1;
 60         L0=prjno*3;
 61     }
 62
 63     if(Datum==54)
 64     {
 65          a=6378245;
 66          f=1/298.3;
 67     }
 68     else if(Datum==84)
 69     {
 70         a=6378137;
 71         f=1/298.257223563;
 72     }
 73     L0=L0*IPI;
 74     L=L*IPI;
 75     B=B*IPI;
 76     e2=2*f-f*f;//(a*a-b*b)/(a*a);
 77     l=L-L0;
 78     t=tan(B);
 79     m=l * cos(B);
 80     N=a/sqrt(1-e2* sin(B) * sin(B));
 81     q2=e2/(1-e2)* cos(B)* cos(B);
 82     a1=1+(double)3/4*e2+(double)45/64*e2*e2+(double)175/256*e2*e2*e2+(double)11025/16384*e2*e2*e2*e2+(double)43659/65536*e2*e2*e2*e2*e2;
 83     a2=(double)3/4*e2+(double)15/16*e2*e2+(double)525/512*e2*e2*e2+(double)2205/2048*e2*e2*e2*e2+(double)72765/65536*e2*e2*e2*e2*e2;
 84     a3=(double)15/64*e2*e2+(double)105/256*e2*e2*e2+(double)2205/4096*e2*e2*e2*e2+(double)10359/16384*e2*e2*e2*e2*e2;
 85     a4=(double)35/512*e2*e2*e2+(double)315/2048*e2*e2*e2*e2+(double)31185/13072*e2*e2*e2*e2*e2;
 86     b1=a1*a*(1-e2);
 87     b2=(double)-1/2*a2*a*(1-e2);
 88     b3=(double)1/4*a3*a*(1-e2);
 89     b4=(double)-1/6*a4*a*(1-e2);
 90     c0=b1;
 91     c1=2*b2+4*b3+6*b4;
 92     c2=-(8*b3+32*b4);
 93     c3=32*b4;
 94     s=c0*B+cos(B)*(c1*sin(B)+c2*sin(B)*sin(B)*sin(B)+c3*sin(B)*sin(B)*sin(B)*sin(B)*sin(B));
 95     x=s+(double)1/2*N*t*m*m+(double)1/24*(5-t*t+9*q2+4*q2*q2)*N*t*m*m*m*m+(double)1/720*(61-58*t*t+t*t*t*t)*N*t*m*m*m*m*m*m;
 96     y=N*m+(double)1/6*(1-t*t+q2)*N*m*m*m+(double)1/120*(5-18*t*t+t*t*t*t-14*q2-58*q2*t*t)*N*m*m*m*m*m;
 97     y=y+1000000*prjno+500000;
 98     pcc->x=x;
 99     pcc->y=y-38000000;
100     pcc->z=0;
101 }  
时间: 2024-11-15 08:21:10

【转】GPS经纬度数据转换到以米单位的平面坐标系的相关文章

使用GPS经纬度定位附近地点(某一点范围内查询)

需要手机查找附近N米以内的商户,致想法是已知一个中心点,一个半径,求圆包含于圆抛物线里所有的点,经纬度是一个点,半径是一个距离,不能直接加减,下面提供C#的解决方法 数据库中记录了商家在百度标注的经纬度(如:116.412007, 39.947545) 最初想法,以圆心点为中心点,对半径做循环,半径每增加一个像素(暂定1米)再对周长做循环,到数据库中查询对应点的商家(真是一个长时间的循环工作),上网百度类似的文章有了点眉目 大致想法是已知一个中心点,一个半径,求圆包含于圆抛物线里所有的点,这样的

Google地图百度地图GPS经纬度偏移转换(JAVA)

不多说,直接代码,Java版 主要就是Google地图,百度地图,GPS经纬度偏移转换 GCJ-02转换BD-09,Google地图经纬度转百度地图经纬度 BD-09转换GCJ-02,百度转google WGS-84 到 GCJ-02 的转换(即 GPS 加偏) /** * 用于构造地图中的坐标点 * @author lw * **/ public class Point { private double lat;// 纬度 private double lng;// 经度 public Poi

GPS 经纬度转换为 经过旋转后的平面坐标

/** * 地图工具 * * @author dxm * */ public class MapUtil { // 参考点 private double[] d34 = null; private double[] d33 = null; private double[] gs34 = null; private double[] gs33 = null; // 参考点位置 private double x34, y34; // 计算参数 private double a, b, c, bl;

GPS经纬度的表示方法及换算

想要认识GPS中的经纬度,就必须先了解GPS,知道经纬度的来源: 1. GPS系统组成 GPS是 Gloabal Positioning System 的简称,意为全球定位系统,主要由地面的控制站.天上飞的卫星.咱们手里拿的接收机三大块组成,我们所使用的GPS包括手持机和车载导航机本质上都是GPS接受机. 2. GPS接收机 接收机大大小小,千姿百态,有袖珍式.背负式.车载.船载.机载什么的.一般常见的手持机接收L1信号,还有双频的接收机,做精密定位用的. 3. 坐标系 地形图坐标系:我国的地形

计算两个GPS经纬度坐标之间的距离 PHP

不多说了,自己代码就行,你可以直接拿来用. /** * 计算两个坐标之间的距离(米) * @param float $fP1Lat 起点(纬度) * @param float $fP1Lon 起点(经度) * @param float $fP2Lat 终点(纬度) * @param float $fP2Lon 终点(经度) * @return int */ function distanceBetween($fP1Lat, $fP1Lon, $fP2Lat, $fP2Lon){ $fEARTH_

微信中得到的GPS经纬度放在百度,腾迅地图中不准的原因及处理

微信中可以得到两种GPS坐标信息  默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' 一种是全球的正常GPS坐标信息 wgs84 . GPS,WGS-84,原始坐标体系.一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标.很可惜,在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密.GPS坐标是 度分秒形式的经纬度:119度23分32.45秒    换算成我们常见的 可以经过以下计算  119+23/60+32.45/3

经纬度互换、换算成米、两点的经纬度计算两点间的距离

GPS坐标和经纬度的算法和概率不太一样,但是我们可能会将他们互通起来用,下面先贴上转换工具:http://map.yanue.net/gps.html.里面实现了gps到谷歌地图百度地图经纬度的转换.不含糊,下面将他们之间的联系. GPS坐标系我本身不太了解它跟谷歌地图经纬度有多大区别,于是搜了一下,看看他们的区别: 地形图坐标系:我国的地形图采用高斯-克吕格平面直角坐标系.在该坐标系中,横轴:赤道,用Y表示:纵轴:中央经线,用X表示:坐标原点:中央经线与赤道的交点,用0表示.赤道以南为负,以北

根据GPS经纬度判断当前所属的市区

这个事情分两步走 1. 拿到行政区划的地理围栏数据 2. 根据GPS定位判断一个点是否落在地理围栏的多边形区域里. 1. 获取行政区划的地理围栏数据可以利用百度API.打开以前我的一个例子在chrome console里输入 var bdary = new BMap.Boundary(); bdary.get("北京市延庆区", function(res){ //获取行政区域 //这里是用户自己的函数. var count = res.boundaries.length; consol

(二)探究本质,WebGIS前端地图显示之地图比例尺换算原理

1.没有豆浆机怎么办? 喝豆浆是我们早晨中基本必备的一环,油条豆浆,其乐融融.如果我问大家豆浆是怎么来的,五谷不分的人会说是用钱买的,了解有黄豆这会事的人会说是用豆浆机把黄豆磨出来的.如果我们再倒退十几年,我相信见到过挑着担子卖豆浆的人就会给出一个更详细的答案了,先用水侵泡黄豆一夜,然后在器皿中充分捣碎,再用中火一直煮,并且要不断搅拌,直至浮沫消失,豆浆才做成了. 听到这个答案,很多人就会惊讶了,这么麻烦啊,还是有豆浆机方便.现在我提出一个问题,如果停电了,如果豆浆机坏了,如果你没有钱去买豆浆机