精华内容
下载资源
问答
  • 坐标系

    万次阅读 2020-03-11 11:06:23
    坐标系(coordinate system、CS) 由两个、三个甚至更多个坐标轴,单位标度等组成,使得可利用数学法则计算距离、角度或其他几何元素。如坐标轴相互垂直的笛卡尔(Cartesian)坐标系;坐标轴不必相互垂直的仿射...

    微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路

     

    坐标系(coordinate systemCS

    由两个、三个甚至更多个坐标轴,单位标度等组成,使得可利用数学法则计算距离、角度或其他几何元素。如坐标轴相互垂直的笛卡尔(Cartesian)坐标系;坐标轴不必相互垂直的仿射(affine)坐标系;用经纬度、高程来确定点位置的椭球面(ellipsoidal)坐标系等。

    坐标参照系(coordinate reference systemCRS

    通过基准面(datum)与真实世界或者说地球相关联的坐标系即坐标参照系。基准面是椭球体用来逼近某地区用的,因此各个国家都有各自的基准面。我们常用的基准面有:BEIJING1954XIAN1980WGS1984等。尽管两者有所不同,

    地心坐标系(geocentric csGEOCCS

    以地球中心为原点,直接用X、Y、Z来进行位置的描述,无需模拟地球球面,常用在GPS中。

    地理坐标系(geographic csGEOGCS

    带Datum的椭球面坐标系,单位经度、纬度,高程用作第三维。参数:椭球体、基准面。

    投影坐标系(projected csPROJCS

    平面坐标系,单位米、英尺等,它用X(Easting)、Y(Northing)来描述地球上某个点的位置。它对应于某个地理坐标系,在UML中表示属于1对多的关系,1个地理坐标系经过不同的投影方式可产生多个投影坐标系。参数:地理坐标系、投影方式。

    地理变换

    在地理坐标系之间的进行数据转换的方法,基准可能不同,有三参数和七参数法。

    投影变换

    当系统所使用的数据来自不同的地图投影,则需要将一种投影的数据转换成另一种投影。

    1.地球椭球体:

    地球椭球体是长短半径为a和b的椭球绕短轴(地轴)PP’旋转而成。如图:

    相关概念:

    • 经线(子午线)

    过旋转轴(地轴) 的平面与椭球面的截线。

     
    • 首(零)子午线

    国际上公认通过英国格林尼治天文台的经线。 

    • 经度的计算

    过该点的子午圈截面与起始子午面之交角。 由首子午线起,向东为正,称东经。由0度到+180度。 由首子午线起,向西为负,称西经。由0度到-180度。

    • 赤道平面

    垂直于地轴并通过地心的平面。

    • 赤道

    赤道平面与椭球面相交的交线(大圆圈)。

    • 纬线(平行圈)

    过某一点与赤道面平行的平面,与椭球面的交线(截线)

    • 纬度的计算

    平行圈的法线与赤道面的交角。 从赤道起,向北为正,称“北纬”。纬度由0度到+90度; 从赤道起,向南为负,称“南纬”。纬度由0度到-90度。

    总结:地面上任意点M的地理位置可由经度和纬度来决定,其地理坐标记成M(纬度,经度)。

    地理坐标的获取方法

    经纬度的测定主要有两种方法:天文测量和大地测量。  

    • 天文测量

    以大地水准面和铅垂线为依据,用天文测量的方法,可获得地面点的天文经纬度。

    • 大地测量

    以旋转椭球体和法线为基准,用大地测量的方法,获得的大地经纬度称为大地坐标,它们构成的地理坐标系称为大地坐标系。

    54北京坐标系和80国家坐标系

    我国过去采用的大地坐标系,其原点在苏联西部的普尔科夫,采用克拉索夫斯基椭球元素,称1954年北京坐标系。

    1980年新测定位于陕西省的坐标原点,采用1975年国家椭球元素,取代“1954年北京坐标系”,称1980年国家坐标系。

    2.平面坐标系定义

    所谓平面坐标系就是指用某点至极点的距离和方向表示该点的位置。

    例如:

    平面直角坐标系

    平面直角坐标系是按直角坐标原理确定某点的平面位置。

    极坐标与平面直角坐标之间可建立一定的关系式,直角坐标系的X轴与极轴重合,二坐标系原点间距离OQ用q 表示。

    则有:

     

    展开全文
  • 笛卡尔坐标系

    万次阅读 多人点赞 2019-04-10 20:01:41
    笛卡尔坐标系 人工智能 - 深度学习 - 知识体系 在数学里,笛卡尔坐标系 (Cartesian coordinate system),亦称直角坐标系,是一种正交坐标系。二维的直角坐标系是由两条相互垂直、相交于原点的数线构成的。在平面内,...

    笛卡尔坐标系

    人工智能 - 深度学习 - 知识体系

    在数学里,笛卡尔坐标系 (Cartesian coordinate system),亦称直角坐标系,是一种正交坐标系。二维的直角坐标系是由两条相互垂直、相交于原点的数线构成的。在平面内,任何一点的坐标是根据数轴上对应的点的坐标设定的。

    直线标准式 a x + b y + c = 0 ax + by + c = 0 ax+by+c=0、斜截式 y = m x + k y = mx + k y=mx+k。一个圆,半径为 r r r,圆心位于 ( a , b ) (a, b) (a,b)。圆圈以 ( x − a ) 2 + ( y − b ) 2 = r 2 (x - a)^{2} + (y - b)^{2} = r^{2} (xa)2+(yb)2=r2 表示。

    在这里插入图片描述
    图 1 红色的圆圈,半径是 2,圆心位于直角坐标系的原点。圆的方程为 x 2 + y 2 = 4 x^2 + y^2 = 4 x2+y2=4

    1. 二维坐标系统

    二维的直角坐标系通常由两个互相垂直的坐标轴设定,通常分别称为 x-轴和 y-轴。两个坐标轴的相交点,称为原点,通常标记为 O,既有零的意思,又是英语 Origin 的首字母。每一个轴都指向一个特定的方向。这两个不同线的坐标轴,决定了一个平面,称为 xy-平面,又称为笛卡尔平面。

    通常两个坐标轴只要互相垂直,其指向何方对于分析问题是没有影响的,但习惯性地,x-轴被水平摆放,称为横轴,通常指向右方。y-轴被竖直摆放而称为纵轴,通常指向上方。两个坐标轴这样的位置关系,称为二维的右手坐标系,或右手系。

    如果把这个右手系画在一张透明纸片上,则在平面内无论怎样旋转它,所得到的都叫做右手系;但如果把纸片翻转,其背面看到的坐标系则称为左手系。这和照镜子时左右对调的性质有关。

    在这里插入图片描述
    图 2 直角坐标系。图中四点的坐标分别为,绿点: ( 2 , 3 ) (2, 3) (2,3),红点: ( − 3 , 1 ) ( -3, 1) (3,1),蓝点: ( − 1.5 , − 2.5 ) (-1.5, -2.5) (1.5,2.5),紫点: ( 0 , 0 ) (0, 0) (0,0)

    为了要知道坐标轴的任何一点,离原点的距离。我们可以刻画数值于坐标轴。那么,从原点开始,往坐标轴所指的方向,每隔一个单位长度,就刻画数值于坐标轴。这数值是刻画的次数,也是离原点的正值整数距离;同样地,背着坐标轴所指的方向,我们也可以刻画出离原点的负值整数距离。称 x-轴刻画的数值为 x-坐标,又称横坐标,称 y-轴刻画的数值为 y-坐标,又称纵坐标。

    在这里,这两个坐标都是整数,对应于坐标轴特定的点。按照比例,我们可以推广至实数坐标和其所对应的坐标轴的每一个点。这两个坐标就是直角坐标系的直角坐标,标记为 ( x , y ) (x, y) (x,y)

    任何一个点 P 在平面的位置,可以用直角坐标来表达。只要从点 P 画一条垂直于 x-轴的直线。从这条直线与 x-轴的相交点,可以找到点 P 的 x-坐标。同样地,可以找到点 P 的 y-坐标。这样,我们可以得到点 P 的直角坐标。图 3,点 P 的直角坐标是 ( 3 , 5 ) (3, 5) (3,5)

    在这里插入图片描述
    图 3 直角坐标系的四个象限,按照逆时针方向,从象限 I I I 到象限 I V IV IV。坐标轴的头部象征着,往所指的方向,无限的延伸。

    图 3 直角坐标系的两个坐标轴将平面分成了四个部分,称为象限,分别用罗马数字编号为 I   ( + , + ) I\ (+, +) I (+,+) I I   ( − , + ) II\ ( -, +) II (,+) I I I ( − , − ) III (-, - ) III(,) I V ( + , − ) IV (+, - ) IV(+,)。依照惯例,象限 I I I 的两个坐标都是正值;象限 I I II II 的 x-坐标是负值,y-坐标是正值;象限 I I I III III 的两个坐标都是负值的;象限 I V IV IV 的 x-坐标是正值,y-坐标是负值。所以象限的编号是按照逆时针方向,从象限 I I I 编到象限 I V IV IV

    2. 三维坐标系统

    在原本的二维直角坐标系,再添加一个垂直于 x-轴,y-轴的坐标轴,称为z-轴。这三个坐标轴满足右手定则,则可得到三维的直角坐标系。z-轴与 x-轴,y-轴相互正交于原点。在三维空间的任何一点 P,可以用直角坐标 ( x , y , z ) (x, y, z) (x,y,z) 来表达其位置。参阅图 4,两个点 P 与 Q 的直角坐标分别为 ( 3 , 0 , 5 ) (3, 0, 5) (3,0,5) ( − 5 , − 5 , 7 ) ( - 5, - 5, 7) (5,5,7)

    三个平面,xy-平面,yz-平面,xz-平面,将三维空间分成了八个部分,称为卦限 (octant)。与二维空间的四个象限不同,只有一个卦限有编号。第一号卦限的每一个点的三个坐标都是正值的。

    在这里插入图片描述
    图 4 三维直角坐标系。y-轴的方向是远离读者

    3. 二维空间

    直角坐标系的 x-轴与 y-轴必须相互垂直。包含 y-轴的直线为 y-线。在二维空间里,当我们设定了 x-轴的位置与方向的同时,我们也设定了 y-线的方向。可是,我们仍旧必须选择,在 y-线的以原点为共同点的两条半线中,哪一条半线的点的坐标是正值的,哪一条是负值的?任何一种选择决定了 xy-平面的取向。

    图 1 中正值的 x-轴横地指向右方,正值的 y-轴纵地指向上方。这种取向称为正值取向、标准取向或右手取向。

    右手定则是一种常用的记忆方法,专门用来辨认正值取向:将一只半握拳的右手放在平面上,大拇指往上指,其它的手指都从x-轴指向y-轴。

    采用左手定则专门用来辨认负值取向或左手取向:将一只半握拳的左手放在 xy-平面上,大拇指往上指,其它的手指都从y-轴指向x-轴。

    不论坐标轴是何种取向,将坐标系统做任何角度的旋转,取向仍旧会保持不变。

    4. 三维空间

    直角坐标系的 x-轴、y-轴与 z-轴必须相互垂直。包含 z-轴的直线为 z-线。在三维空间里,当我们设定了 x-轴、y-轴的位置与方向的同时,我们也设定了 z-线的方向。可是,我们仍旧必须选择,在 z-线以原点为共同点的两条半线中,哪一条半线的点的坐标是正值的,哪一条是负值的?这两种不同的坐标系统,称为右手坐标系与左手坐标系。右手坐标系又称为标准坐标系或正值坐标系。

    右手坐标系这名词是由右手定则而来的。先将右手的手掌与手指伸直,然后将中指指向往手掌的掌面半空间,与食指呈直角关系。再将大拇指往上指去,与中指、食指都呈直角关系。则大拇指、食指与中指分别表示了右手坐标系的 x-轴、y-轴与 z-轴。同样地,用左手也可以表示出左手坐标系。

    图 5 试着展示出一个左手坐标系与一个右手坐标系。用二维画面来展示三维物体,会造成扭曲或模棱两可的图形。指向下方与右方的轴,也有指向读者的意思;而位置居于中间的轴,也有指向读者正在看的方向的意思。平行于 xy-平面的红色圆形曲箭,其红色箭头从 z-轴前面经过,表示从 x-轴往 y-轴的旋转方向。

    在这里插入图片描述
    图 5 左边是左手取向,右边是右手取向。

    References

    展开全文
  • 地理坐标系与投影坐标系的区别

    万次阅读 多人点赞 2018-08-17 22:57:17
    平时开展GIS开发、研究、应用工作,总会接触到坐标系,也会遇到坐标转换的问题,如地理坐标系、投影坐标系等。 地理坐标系是球面坐标,参考平面是椭球面,坐标单位是经纬度; 投影坐标系是平面坐标系,参考平面...

    1.基本概念

            平时开展GIS开发、研究、应用工作,总会接触到坐标系,也会遇到坐标转换的问题,如地理坐标系、投影坐标系等。

            地理坐标系是球面坐标,参考平面是椭球面,坐标单位是经纬度;

            投影坐标系是平面坐标系,参考平面是水平面,坐标单位是米、千米等。

            地理坐标系转换到投影坐标系的过程理解为投影,即将不规则的地球曲面转换为平面。

            在当前的信息化的技术条件下,直接使用地理坐标系是不是更加真实准确,像谷歌地球;投影毕竟存在各种变形。

    地理坐标系的WKID介绍:Geographic Coordinate Systems

    投影坐标系的WKID介绍:Projected Coordinate Systems

    EPSG:European Petroleum Survey Group,欧洲石油调查组织,

    该组织负责专门维护地球上所有的测量坐标系统,并且给每组坐标系统都赋予了一个编号和一组描述(WKT),

    比如大家常用的WGS84坐标系编号就是EPSG:4326,再比如互联网地图(谷歌、高德等)常用的伪墨卡托投影编号就是EPSG:3857。

    可以理解成EPSG给大家维护了无数把尺子,并且给每把尺子搞了个编号,还标明了这把尺子适合什么条件下用。

     

    2. 地理坐标系

    2.1 地球的三级逼近

    2.1.1 大地水准面

            地球的自然表面不是平整的,需要想办法用数学公式描述地球表面,只能设想一个近似的数学面。

            大地水准面是地球表面的第一级逼近。假设当海水处于完全静止的平衡状态时,从海平面延伸到所有大陆下部,而与地球重力方向处处正交的一个连续、闭合的曲面,这就是大地水准面。

            地球椭球体是地球表面的第二级逼近。大地水准面可以近似成一个规则成椭球体,但并不是完全规则,其形状接近一个扁率极小的椭圆绕短轴旋转所形成的规则椭球体,这个椭球体称为地球椭球体。

            地球椭球体的基本参数:

    长半轴(赤道半径)    a
    短半轴(极半径)      b
    椭球体的扁率         à=(a-b)/a
    第一偏心率           è=(a2-b2)/a2
    第二偏心率           é=(a2-b2)/ b2
    

    常见的椭球体的参数:

    	克拉索夫斯基椭球	   1975 GRS椭球体	   WGS-84椭球体
    a	6 378 245.000 m	   6 378 140.000 m	   6 378 137.000 m
    b	6 356 863.019 m	   6 356 755.288 m	   6 356 752.314 m
    à	   1/298.3	         1/298.257	        1/298.257 224
    è	0.006 693 422	   0.006 694 385	   0.006 694 380
    é	0.006 738 525	   0.006 739 502	   0.006 739 497
    

    大地基准面是地球表面的第三极逼近。

            椭球体是对地球的抽象,不能与地球表面完全重合,在设置参考椭球体的时候必然会出现有的地方贴近的好(参考椭球体与地球表面位置接近),有地地方贴近的不好的问题,因此这里还需要一个大地基准面来控制参考椭球和地球的相对位置。有以下两类基准面:

            地心基准面:由卫星数据得到,使用地球的质心作为原点,使用最广泛的是 WGS 1984。

           区域基准面:特定区域内与地球表面吻合,大地原点是参考椭球与大地水准面相切的点,例如Beijing-54、Xian-80。称谓的Beijing-54、Xian-80坐标系实际上指的是我国的两个大地基准面。

            地心大地坐标系:指经过定位与定向后,地球椭球的中心与地球质心重合。如CGCS2000、WGS84。

            参心大地坐标系:指经过定位与定向后,地球椭球的中心不与地球质心重合而是接近地球质心。区域性大地坐标系是我国基本测图和常规大地测量的基础。如Beijing-54、Xian-80。

    2.2 地理坐标

            地理坐标,就是用经线(子午线)、纬线、经度、纬度表示地面点位的球面坐标。

            一般地理坐标可分为三种,天文经纬度,大地经纬度,地心经纬度。通常地图上使用的经纬度都为大地经纬度。

            大地经度:参考椭球面上某点的大地子午面与本初子午面间的两面角。向东为正,向西为负。

            大地纬度 :参考椭球面上某点的法线与赤道平面的夹角。向北为正,向南为负。

            大地高: 指某点沿法线方向到参考椭球面的距离。

            只需要参考椭球体参数以及大地基准面就可以确定地理坐标系。

    下面是Arcgis中对北京1954坐标系的说明。——WKID:4214

     

    主要就是以下几个参数:        

    Prime Meridian(起始经度)
    
    Datum(大地基准面): D_Beijing_1954
    
    Spheroid(参考椭球体): Krasovsky_1940 (克拉索夫斯基椭球体)

    西安-80地理坐标系。——WKID:4610

    WGS-84地理坐标系。——WKID:4326

     

    3.投影坐标系

            在地球椭球面和平面之间建立点与点之间函数关系的数学方法,称为地图投影。

           地球椭球表面是一种不可能展开的曲面,要把这样一个曲面表现到平面上,就会发生裂隙或褶皱。在投影面上,可运用经纬线的“拉伸”或“压缩”(通过数学手段)来加以避免,以便形成一幅完整的地图。地图投影的变形通常有:长度变形、面积变形和角度变形。在实际应用中,根据使用地图的目的,限定某种变形。

    北京-54投影坐标系。——WKID:2435

    国家2000投影坐标系。——WKID:4547

    西安-80投影坐标系。——WKID:2383

    WGS-84投影坐标系.。——WKID:3395

     

    按变形性质分类:

    等角投影:角度变形为零(Mercator)

    等积投影:面积变形为零(Albers)

    任意投影:长度、角度和面积都存在变形

     

    其中,各种变形相互联系相互影响:等积与等角互斥,等积投影角度变形大,等角投影面积变形大。

     

    从投影面类型划分:

    横圆柱投影:投影面为横圆柱

    圆锥投影:投影面为圆锥

    方位投影:投影面为平面

     

    从投影面与地球位置关系划分为:

    正轴投影:投影面中心轴与地轴相互重合

    斜轴投影:投影面中心轴与地轴斜向相交

    横轴投影:投影面中心轴与地轴相互垂直

    相切投影:投影面与椭球体相切

    相割投影:投影面与椭球体相割

     

    参考文献

     

    展开全文
  • 各种国内地图坐标系总结

    万次阅读 多人点赞 2018-08-29 14:33:56
    一、国内的常用坐标系 1、WGS-84坐标系:地心坐标系,GPS原始坐标体系 在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。 2、GCJ-02 坐标系:国测局坐标,火星坐标系 1)国测局02年发布的坐标体系...

    一、国内的常用坐标系

    1、WGS-84坐标系:地心坐标系,GPS原始坐标体系

    在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。

    2、GCJ-02 坐标系:国测局坐标,火星坐标系

    1)国测局02年发布的坐标体系,它是一种对经纬度数据的加密算法,即加入随机的偏差。

    2)互联网地图在国内必须至少使用GCJ-02进行首次加密,不允许直接使用WGS-84坐标下的地理数据,同时任何坐标系均不可转换为WGS-84坐标。

    3)是国内最广泛使用的坐标体系,高德、腾讯、Google中国地图都使用它。

    3、CGCS2000坐标系:国家大地坐标系

    该坐标系是通过中国GPS 连续运行基准站、 空间大地控制网以及天文大地网与空间地网联合平差建立的地心大地坐标系统。

    4、BD-09坐标系

    百度中国地图所采用的坐标系,由GCJ-02进行进一步的偏移算法得到。

    5、搜狗坐标系

    搜狗地图所采用的坐标系,由GCJ-02进行进一步的偏移算法得到。

    6、图吧坐标系

    图吧地图所采用的坐标系,由GCJ-02进行进一步的偏移算法得到。

    二、国内地图软件所采用的坐标系简介

    1、百度地图

    1)境内(包括港澳台):BD09

    a、在GCJ-02坐标系基础上再次加密

    b、支持WGS-84、GCJ-02转换成BD09,反向不支持,并且批量转换一次有条数限制

    2)境外:WGS-84

    2、高德地图:

    1)境内:GCJ-02

    a、WGS-84——>GCJ-02(高德有接口提供,反过来没有)

    2)境外:暂不支持

    3)AMap 就是高德地图,是高德地图纳斯达克上市用的名字,主要面向互联网企业或个人提供免费API服务

    4)MapABC 是高德集团底下的图盟公司,主要面向大众型企业或政府机关,并提供付费的有偿服务

    5)Amap和MapABC,数据和服务都是共享的,所以Mapabc用Amap的API是正常的

    3、google地图

    1)境内:GCJ-02

    a、数据来源于高德,两者互通

    2)境外:WGS-84

    4、天地图

    全球统一:CGCS2000

    5、腾讯地图:soso地图

    境内:GCJ02

    6、微软bing地图:BingMap

    全球统一:WGS-84

    7、搜狗地图

    境内:搜狗坐标系

    a、在GCJ-02坐标系基础上再次加密

    b、支持WGS-84、GCJ-02、BD09转换成搜狗坐标,反向不支持

    8、图吧地图: MapBar

    境内:图吧坐标系

    a、在GCJ-02坐标系基础上再次加密

    9、阿里云地图

    境内:GCJ-02

    10、灵图地图:51ditu

    境内:GCJ-02

    三、各个坐标系之间的转换

    1、以下代码,提供的转换算法如下:

    1)WGS-84 ——> GCJ02

    2)GCJ02 ——> WGS-84

    3)GCJ02 ——> BD09

    4)BD09 ——> GCJ02

    5)BD09 ——> WGS-84

    1.   package com.xy;  

    2.     

    3.   /** 

    4.    * 各地图API坐标系统比较与转换; 

    5.    * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, 

    6.    * 谷歌地图采用的是WGS84地理坐标系(中国范围除外); 

    7.    * GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。 

    8.    * 谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系; BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系; 

    9.    * 搜狗坐标系、图吧坐标系等,估计也是在GCJ02基础上加密而成的。  

    10.  */  

    11. public class PositionUtil {  

    12.       

    13.     public static final String BAIDU_LBS_TYPE = "bd09ll";  

    14.       

    15.     public static double pi = 3.1415926535897932384626;  

    16.     public static double a = 6378245.0;  

    17.     public static double ee = 0.00669342162296594323;  

    18.   

    19.     /** 

    20.      * 84 to 火星坐标系 (GCJ-02) World Geodetic System ==> Mars Geodetic System 

    21.      *  

    22.      * @param lat 

    23.      * @param lon 

    24.      * @return 

    25.      */  

    26.     public static Gps gps84_To_Gcj02(double lat, double lon) {  

    27.         if (outOfChina(lat, lon)) {  

    28.             return null;  

    29.         }  

    30.         double dLat = transformLat(lon - 105.0, lat - 35.0);  

    31.         double dLon = transformLon(lon - 105.0, lat - 35.0);  

    32.         double radLat = lat / 180.0 * pi;  

    33.         double magic = Math.sin(radLat);  

    34.         magic = 1 - ee * magic * magic;  

    35.         double sqrtMagic = Math.sqrt(magic);  

    36.         dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);  

    37.         dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);  

    38.         double mgLat = lat + dLat;  

    39.         double mgLon = lon + dLon;  

    40.         return new Gps(mgLat, mgLon);  

    41.     }  

    42.   

    43.     /** 

    44.      * * 火星坐标系 (GCJ-02) to 84 * * @param lon * @param lat * @return 

    45.      * */  

    46.     public static Gps gcj_To_Gps84(double lat, double lon) {  

    47.         Gps gps = transform(lat, lon);  

    48.         double lontitude = lon * 2 - gps.getWgLon();  

    49.         double latitude = lat * 2 - gps.getWgLat();  

    50.         return new Gps(latitude, lontitude);  

    51.     }  

    52.   

    53.     /** 

    54.      * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法  GCJ-02 坐标转换成 BD-09 坐标 

    55.      *  

    56.      * @param gg_lat 

    57.      * @param gg_lon 

    58.      */  

    59.     public static Gps gcj02_To_Bd09(double gg_lat, double gg_lon) {  

    60.         double x = gg_lon, y = gg_lat;  

    61.         double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi);  

    62.         double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi);  

    63.         double bd_lon = z * Math.cos(theta) + 0.0065;  

    64.         double bd_lat = z * Math.sin(theta) + 0.006;  

    65.         return new Gps(bd_lat, bd_lon);  

    66.     }  

    67.   

    68.     /** 

    69.      * * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 * *  BD-09 坐标转换成GCJ-02 坐标 * * @param 

    70.      * bd_lat * @param bd_lon * @return 

    71.      */  

    72.     public static Gps bd09_To_Gcj02(double bd_lat, double bd_lon) {  

    73.         double x = bd_lon - 0.0065, y = bd_lat - 0.006;  

    74.         double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * pi);  

    75.         double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi);  

    76.         double gg_lon = z * Math.cos(theta);  

    77.         double gg_lat = z * Math.sin(theta);  

    78.         return new Gps(gg_lat, gg_lon);  

    79.     }  

    80.   

    81.     /** 

    82.      * (BD-09)-->84 

    83.      * @param bd_lat 

    84.      * @param bd_lon 

    85.      * @return 

    86.      */  

    87.     public static Gps bd09_To_Gps84(double bd_lat, double bd_lon) {  

    88.   

    89.         Gps gcj02 = PositionUtil.bd09_To_Gcj02(bd_lat, bd_lon);  

    90.         Gps map84 = PositionUtil.gcj_To_Gps84(gcj02.getWgLat(),  

    91.                 gcj02.getWgLon());  

    92.         return map84;  

    93.   

    94.     }  

    95.   

    96.     public static boolean outOfChina(double lat, double lon) {  

    97.         if (lon < 72.004 || lon > 137.8347)  

    98.             return true;  

    99.         if (lat < 0.8293 || lat > 55.8271)  

    100.              return true;  

    101.          return false;  

    102.      }  

    103.    

    104.      public static Gps transform(double lat, double lon) {  

    105.          if (outOfChina(lat, lon)) {  

    106.              return new Gps(lat, lon);  

    107.          }  

    108.          double dLat = transformLat(lon - 105.0, lat - 35.0);  

    109.          double dLon = transformLon(lon - 105.0, lat - 35.0);  

    110.          double radLat = lat / 180.0 * pi;  

    111.          double magic = Math.sin(radLat);  

    112.          magic = 1 - ee * magic * magic;  

    113.          double sqrtMagic = Math.sqrt(magic);  

    114.          dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);  

    115.          dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);  

    116.          double mgLat = lat + dLat;  

    117.          double mgLon = lon + dLon;  

    118.          return new Gps(mgLat, mgLon);  

    119.      }  

    120.    

    121.      public static double transformLat(double x, double y) {  

    122.          double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y  

    123.                  + 0.2 * Math.sqrt(Math.abs(x));  

    124.          ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;  

    125.          ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;  

    126.          ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;  

    127.          return ret;  

    128.      }  

    129.    

    130.      public static double transformLon(double x, double y) {  

    131.          double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1  

    132.                  * Math.sqrt(Math.abs(x));  

    133.          ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;  

    134.          ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;  

    135.          ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0  

    136.                  * pi)) * 2.0 / 3.0;  

    137.          return ret;  

    138.      }  

    139.    

    140.      public static void main(String[] args) {  

    141.    

    142.          // 北斗芯片获取的经纬度为WGS84地理坐标 31.426896,119.496145  

    143.          Gps gps = new Gps(31.426896119.496145);  

    144.          System.out.println("gps :" + gps);  

    145.          Gps gcj = gps84_To_Gcj02(gps.getWgLat(), gps.getWgLon());  

    146.          System.out.println("gcj :" + gcj);  

    147.          Gps star = gcj_To_Gps84(gcj.getWgLat(), gcj.getWgLon());  

    148.          System.out.println("star:" + star);  

    149.          Gps bd = gcj02_To_Bd09(gcj.getWgLat(), gcj.getWgLon());  

    150.          System.out.println("bd  :" + bd);  

    151.          Gps gcj2 = bd09_To_Gcj02(bd.getWgLat(), bd.getWgLon());  

    152.          System.out.println("gcj :" + gcj2);  

    153.      }  

    154.  }  

    2、百度在线转换API

    1.   http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=longitude&y=latitude   

    2.   from: 来源坐标系   0表示WGS-84坐标,2表示GCJ-02坐标)  

    3.   to: 转换后的坐标  (4就是百度自己啦,这个必须是4才行)  

    4.   x: 精度  

    5.   y: 纬度

    得到的经纬度需要进一步转换才能得到BD-09坐标

    1.   import java.io.BufferedReader;  

    2.   import java.io.IOException;  

    3.   import java.io.InputStream;  

    4.   import java.io.InputStreamReader;  

    5.   import java.io.OutputStreamWriter;  

    6.   import java.net.URL;  

    7.   import java.net.URLConnection;  

    8.   import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;  

    9.   public class BaiduAPIConverter extends Thread {  

    10.   public static void testPost(String x, String y) throws IOException {  

    11.     try {  

    12.       URL url = new URL("http://api.map.baidu.com/ag/coord/convert?from=2&to=4&x="

    13.                                        x + "&y=" + y);  

    14.       URLConnection connection = url.openConnection();  

    15.       connection.setDoOutput(true);  

    16.       OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "utf-8");  

    17.       // remember to clean up   

    18.       out.flush();  

    19.       out.close();  

    20.       // 一旦发送成功,用以下方法就可以得到服务器的回应:   

    21.       String sCurrentLine, sTotalString;  

    22.       sCurrentLine = sTotalString = "";  

    23.       InputStream l_urlStream;  

    24.       l_urlStream = connection.getInputStream();  

    25.       BufferedReader l_reader = new BufferedReader(new InputStreamReader(l_urlStream));  

    26.       while ((sCurrentLine = l_reader.readLine()) != null) {  

    27.         if (!sCurrentLine.equals(""))  

    28.           sTotalString += sCurrentLine;  

    29.       }  

    30.       sTotalString = sTotalString.substring(1, sTotalString.length() - 1);  

    31.       String[] results = sTotalString.split("\\,");  

    32.       if (results.length == 3) {  

    33.         if (results[0].split("\\:")[1].equals("0")) {  

    34.           String mapX = results[1].split("\\:")[1];  

    35.           String mapY = results[2].split("\\:")[1];  

    36.           mapX = mapX.substring(1, mapX.length() - 1);  

    37.           mapY = mapY.substring(1, mapY.length() - 1);  

    38.           mapX = new String(Base64.decode(mapX));  

    39.           mapY = new String(Base64.decode(mapY));  

    40.           System.out.println("\t" + mapX + "\t" + mapY);  

    41.         }  

    42.       }  

    43.      sleep(10000);  

    44.     } catch (InterruptedException e) {  

    45.       // TODO Auto-generated catch block   

    46.       e.printStackTrace();  

    47.     }  

    48.   }  

    49.   /** 

    50.    * @param args 

    51.    * @throws IOException 

    52.    */  

    53.   public static void main(String[] args) throws IOException {  

    54.     testPost("120.151379""30.184678");  

    55.     System.out.println("ok");  

    56.   }  

    57. }  

    3、百度地图获取WGS-84坐标

    在百度地图中取得WGS-84坐标,调用如下方法:
    BMapManager.getLocationManager().setLocationCoordinateType(

    MKLocationManager.MK_COORDINATE_WGS84);
    这样从百度api中取得的坐标就是WGS-84了,可是这种坐标如果显示到百度地图上就会偏移,也就是说取出一个坐标,原封不动的显示上去就偏移了,所以为了显示也是正常就需要在绘制到百度地图上之前转换成BD-09。
    转换成BD-09,调用方法:
      GeoPoint wgs84;
    GeoPoint bd09 = CoordinateConvert.bundleDecode(CoordinateConvert.fromWgs84ToBaidu(wgs84));
    这里实在不明白为何要设计成CoordinateConvert.fromWgs84ToBaidu(wgs84)返回了一个Bundle,所以还需要CoordinateConvert.bundleDecode()再转成GeoPoint。

    4、CGCS2000坐标与WGS-84坐标的转换

    CGCS2000与WGS84的基本定义是一致的,采用的参考椭球非常相近,椭球常数中仅扁率有细微差别,虽然因此会造成同一点在两个坐标系中的值会有微小差异,但是,在当前测量精度水平下这种微小差值是可以忽略的,因此,可以认为CGCS2000和WGS84是相容的,在坐标系的实现精度范围内两种坐标系下的坐标是一致的。

    另一方面,由于两者本身就不是由彼此加密或者解密就可以得到的关系,所以转换的算法十分复杂。通常采用工具软件来进行转换,如ArcGIS、BIGEMAP等。

    四、取自一段大神的总结

    采用自家坐标体系,而不采用国内通用的火星坐标体系,实在是自寻短处。当然,百度是因为做的足够大、足够好,所以很霸道,也为以后一统天下而不让别人瓜分之而做准备吧。搜狗虽然用自家坐标体系,但能将地球坐标直接导入,此举也属唯一。而图吧地图不知道学什么加密方式,以前用地球坐标用的好好的,现在用图吧自己的坐标,难道是因为给百度做过所以也来了这么一招?或者沿用百度?不得而知。

    本文的目的在于:做地图开发的时候,不希望被一家地图API迁就,所以采用火星坐标GCJ-02是正确的选择,希望本文能够对选择使用谁家API的开发者提供一点帮助吧。就我个人而言,我绝不会使用非火星坐标系统的地图API,虽然百度地图API很好很强大确实很吸引我。

    展开全文
  • 世界坐标系,相机坐标系和图像坐标系的转换(Python)

    万次阅读 多人点赞 2020-02-05 16:45:40
    世界坐标系,相机坐标系和图像坐标系的转换(Python) 相机内参外参说明:https://panjinquan.blog.csdn.net/article/details/102502213 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系...
  • 相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
  • CGCS2000是(中国)2000国家大地坐标系的缩写,该坐标系是通过中国GPS 连续运行基准站、 空间大地控制网以及天文大地网与空间地网联合平差建立的地心大地坐标系统。2000(中国)国家大地坐标系以ITRF 97 参考框架为...
  • 世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换 图像处理、立体视觉等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。例如下图: 构建世界坐标系只是为了更好的描述...
  • 世界坐标系和相机坐标系,图像坐标系的关系

    万次阅读 多人点赞 2016-01-25 15:35:34
    二、图像坐标:我想和世界坐标谈谈(B)  玉米将在这篇博文中,对图像...图中显示,世界坐标系通过刚体变换到达摄像机坐标系,然后摄像机坐标系通过透视投影变换到达图像坐标系。可以看出,世界坐标与图像坐标的关系
  • 惯性坐标系、物体坐标系、世界坐标系

    万次阅读 多人点赞 2018-08-27 12:01:47
    一、坐标系的区别 1.世界坐标系 2.物体坐标系 3.惯性坐标系 二、坐标系之间的联系 一、坐标系的区别 1.世界坐标系 世界坐标系是一个特殊的坐标系,它建立了描述其他坐标系所需要的参考系。也就是说,可以...
  • 概述 在三维空间中,无约束的物体具有6个自由度,即三个方向的位置和三个欧拉角。故在导航中,明确坐标系的定义是基础。 ...导航坐标系可以是地固坐标系、地理坐标系等等,通常使用的是当地水...
  • 世界坐标系、相机坐标系、图像平面坐标系

    万次阅读 多人点赞 2018-07-12 18:04:09
    一、四个坐标系简介和转换 相机模型为以后一切标定算法的关键,只有这边有相当透彻的理解,对以后的标定算法才能有更好的理解。本人研究了好长时间,几乎每天都重复看几遍,最终才会明白其推导过程。 &nbsp; &...
  • 因此,笛卡尔坐标系下,无论是二维(平面)坐标系还是三维坐标系,通过变换坐标轴的正向方向,都能够得到两种不同的坐标系:即左手坐标系(左手系)和右手坐标系(右手系)。 三维坐标系下的左/右手系 传说从高中到大学...
  • 世界坐标系,相机坐标系,图像坐标系,图像像素坐标系这四个坐标系的转换实质就是刚体变换、透视投影和数字化图像这几个成像里的步骤。 一、世界坐标系到相机坐标系 世界坐标系,也称为测量坐标系,它是一个三维...
  • 各种经纬度坐标系转换-百度坐标系、火星坐标系、国际坐标系 WGS84:国际坐标系,为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。 GCJ02:火星坐标系,是由中国国家测绘局制订的地理信息...
  • Python地理坐标系和投影坐标系转换

    万次阅读 2018-07-22 21:54:51
    地心地固坐标系(Earth-Centered, Earth-Fixed,ECEF),简称地心坐标系。 地理坐标系统(Geographic Coordinate System,GCS)1,坐标系是地心坐标系,用经纬度表示球面上的点。 世界大地测量系统(World Geodetic ...
  • 你必须知道的地理坐标系和投影坐标系

    万次阅读 多人点赞 2017-03-24 17:34:21
    你必须知道的地理坐标系和投影坐标系
  • 坐标系

    万次阅读 多人点赞 2019-06-28 14:56:48
    坐标系是三维坐标系的一种,用以确定三维空间中点、线、面以及体的位置,它以坐标原点为参考点,由方位角、仰角和距离构成。球坐标系在地理学、天文学中都有着广泛应用。 球坐标系  球坐标中是这样表示空间中...
  • 火星坐标系是在GSP原始定位数据的基础上经过加密算法加密之后的定位数据所属坐标系,GSP原始定位数据所属坐标系叫WGS-84坐标系,WGS-84坐标系是美国国防制图局于1984建立的世界大地坐标系(World Geodetic System)...
  • 一、各坐标系介绍图像处理、立体视觉经常涉及到世界坐标系、相机坐标系、图像坐标系和像素坐标系。如下图所示:世界坐标系是为了确定相机的位置,在双目视觉中一般将世界坐标系原点定在左相机、右相机或两者X轴方向...
  • 详细介绍了摄像头坐标系,图像坐标系,世界坐标系的转换过程
  • 一、无人机控制中的坐标系 无人机运动学中,有三种需要了解的坐标系 1.1、地球中心坐标系(ECEF) 地球中心坐标系,即坐标系原点位于地心。X轴通过格林尼治线和赤道线的交点,正方向为原点指向交点方向。 Z轴...
  • 利用七参数进行CGCS2000坐标系到西安80坐标系的转换

    万次阅读 多人点赞 2016-01-22 18:50:34
     因为工作,需要把CGCS2000坐标系下的坐标转到西安80坐标系下,中间由于用到了七参数,所以要进经过到空间直角坐标系的转换,然后再转换到西安80大地坐标下,最后再投影到西安80坐标的某度带。  要求是输入CGCS...
  • 许多场合下都需要用到坐标系的转换,那么坐标系转换中最重要...R矩阵是将坐标系b旋转为坐标系a下的旋转矩阵,T为B坐标系在A坐标系下的坐标,如果要改变方向将A坐标系下的点转换为B坐标系下的点的话,要重新计算新...
  • 对于图像坐标系,相机坐标系和世界坐标系的学习和自己的一些理解,如果有错误欢迎指正和讨论。 图像坐标系 1.图像像素坐标系 原点:图像左上角P0点  单位:像素  横坐标u:图像数组中的列数  纵坐标v:图像...
  • 背景:从GPS和北斗卫星定位得到的定位数据采用的都是WGS84坐标系,即地球坐标系,但是国内不管是高德地图、百度地图采用的并不是WGS84坐标系,所以需要经过转换后才能使用,前端用百度API提供的方法转换速度较慢。...
  • 背景 最近有一个需求,需要将WGS84转成火星坐标系。个人觉得在代码中逐个点坐标进行转换,太...***库,可以在火星坐标系、百度坐标系、WGS84坐标系、CGCS2000坐标系之间互转,部署也很简单。 使用过程 部署Pos...
  • 三维视觉基础之世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系一、各坐标系介绍二、世界坐标系和相机坐标系之间的转换三、相机坐标系和图像坐标系之间的转换四、图像坐标系和像素坐标系之间的转换五...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 237,214
精华内容 94,885
关键字:

坐标系