[转载]:经纬度与WGS84坐标转换

本代码实现在WGS84系统的大地坐标(BLH)和空间直角坐标(XYZ)的互相转换,符合标准语法,可直接使用

如下代码,输出为:
 WGS84:  -2175790.73969891    4461032.11207734     3992337.79032463
 BLH:   38.9999999999998    116.000000000000    33.0000069718808

Module CorrTrans
  !// WGS84 系统BLH坐标与空间直角坐标转换
  !// Fortran Coder http://fcode.cn
  !// Adapted from Acheng‘s C++ code
  Implicit None
  Integer , parameter :: DP = Selected_Real_Kind( 12 )
  Real(kind=DP) , parameter :: PI = 3.14159265358979323846_DP
  Real(kind=DP) , parameter , private :: a = 6378137._DP
  Real(kind=DP) , parameter , private :: f = 1.0_DP / 298.257223563_DP
  Real(kind=DP) , parameter , private :: t = a * ( 1.0_DP - f )
  Real(kind=DP) , parameter , private :: e = sqrt( (a*a - t*t) / (a*a) )
contains
  Subroutine XYZ2BLH( x , y , z , B , L , H )
    Real(Kind=DP) , Intent( IN )  :: x , y , z
    Real(Kind=DP) , Intent( OUT ) :: B , L , H
    real(kind=DP) :: N
    integer :: i
    L = atan( abs(y/x) )
    B = atan( abs(z/sqrt(x*x+y*y) ) )
    do i = 1 , 5
      N = a / sqrt( 1.0_DP - e*e*sin(B)*sin(B) )
      H = z / sin(B) - N * ( 1.0_DP - e*e )
      B = atan( z*(N+H) / ( sqrt(x*x+y*y)*(N*(1.0_DP-e*e)+H) ) )
    end do
    if ( x < 0._DP .and. y > 0._DP ) L = PI - L
    if ( x > 0._DP .and. y < 0._DP ) L = -1.0_DP * L
    if ( x < 0._DP .and. y < 0._DP ) L = -1.0 * PI + L
    B = B * 180._DP / PI
    L = L * 180._DP / PI
  End Subroutine XYZ2BLH

  Subroutine BLH2XYZ( B , L , H , x , y , z )
    Real(Kind=DP) , Intent( IN )  :: B , L , H
    Real(Kind=DP) , Intent( OUT ) :: x , y , z
    real(kind=DP) :: N , Br , Lr
    Br = B * PI / 180._DP
    Lr = L * PI / 180._DP
    N = a / sqrt( 1.0_DP - e*e*sin(Br)*sin(Br) )
    x = ( N + H ) * cos(Br)*cos(Lr)
    y = ( N + H ) * cos(Br)*sin(Lr)
    z = ( N*(1.0_DP - e*e ) + H ) * sin(Br);
  End Subroutine BLH2XYZ

End Module CorrTrans

Program www_fcode_cn
  Use CorrTrans
  Implicit None
  Real(Kind=DP)  :: x , y , z
  Real(Kind=DP)  :: B , L , H
  B = 39._DP ; L = 116._DP ; H = 33._DP
  call BLH2XYZ( B , L , H , x , y , z )
  write(*,*) ‘WGS84:‘ , x , y , z
  call XYZ2BLH( x , y , z , B , L , H )
  write(*,*) ‘BLH:‘ , B , L , H
End Program www_fcode_cn

转自:http://fcode.cn/code_prof-89-1.html

时间: 2024-09-07 09:16:03

[转载]:经纬度与WGS84坐标转换的相关文章

火星坐标、百度坐标、WGS84坐标转换代码(JS版)

/** * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ //定义一些常量 var x_PI = 3.14159265358979324 * 3000.0 / 180.0; var PI = 3.1415926535897932384626; var a = 6378245.0; var ee = 0.00669342162296594323; /** * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 * 即 百度 转

WGS84,GCJ02, BD09坐标转换

public class Gps { private double wgLat; private double wgLon; public Gps(double wgLat, double wgLon) { setWgLat(wgLat); setWgLon(wgLon); } public double getWgLat() { return wgLat; } public void setWgLat(double wgLat) { this.wgLat = wgLat; } public d

简谈百度坐标反转至WGS84的三种思路

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图是基于BD09坐标系的,GPS坐标(WGS84)或者其他常见的标准坐标是无法准确在地图上进行展示的,但是互联网在线情况下,百度提供了将WGS84经纬度转换成百度经纬度坐标的API,这里不再对其进行研究(离线情况下也有专门方法解决).这里,我们探讨,如何将在百度上获取的百度坐标数据反转成WGS84坐标

BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换

BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换 http://www.cnphp6.com/archives/24822 by root ⋅ Leave a Comment 谷歌地图采用的是WGS84地理坐标系(中国范围除外),谷歌中国地图.搜搜中国地图.高德地图采用的是GCJ02地理坐标系,百度采用的是BD09坐标系,而设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,所以我们要根据得到的经纬度的坐标类型和地图厂商类型在地图上标点,

各地图坐标系转换(WGS84坐标系,GCJ02坐标系,BD09坐标系)

package position; import org.junit.Test; /** * 各地图API坐标系统比较与转换; * * WGS84坐标系:即地球坐标系,国际上通用的坐标系.设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,谷歌地图采用的是WGS84地理坐标系(中国范围除外); * * GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统.由WGS84坐标系经加密后的坐标系.谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系; *

各种地图坐标系转换工具

class Gps { private double wgLat; private double wgLon; public Gps(double wgLat, double wgLon) { setWgLat(wgLat); setWgLon(wgLon); } public double getWgLat() { return wgLat; } public void setWgLat(double wgLat) { this.wgLat = wgLat; } public double g

坐标系转换

目前国内主要有以下三种坐标系: 1. 地球坐标WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系: 国际标准,从专业GPS 设备中取出的数据的坐标系 国际地图提供商使用的坐标系 2. 火星坐标GCJ02:表示经过国测局加密的坐标.即国测局坐标系 中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系 国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密. 3. 百度坐标BD09:为百度坐标系,其中bd09ll表示百

百度地图API位置偏移的校准算法

转自极客人原文 百度地图API位置偏移的校准算法 在开始使用百度地图API进行开发时可能会遇到一件相当奇怪的事情,使用百度定位的经纬度在地图上显示相当不准确,这一问题我在微信开发和安卓开始时都遇到过.第一次使用百度地图api获取位置并在地图上显示是在微信开发的时候,那是不知道具体原因无奈在微信获取的地理位置上加了一个偏移量进行校准,虽能勉强解决,但是不太准确.后来在安卓开始也同样遇到了这个问题,才发现百度地图API定位偏移已经不是一个偶然问题了. 百度地图API定位偏移的原因 以下来自互联网:

简析项目中常用的七参数转换法和四参数转换法以及涉及到的基本测量学知识

1.背景 在了解这两种转换方法时,我们有必要先了解一些与此相关的基本知识.我们有三种常用的方式来表示空间坐标,分别是:经纬度和高层.平面坐标和高层以及空间直角坐标. 2.经纬度坐标系(大地坐标系) 这里我首先要强调:天文坐标表示的经纬度和大地坐标系表示的经纬度是不同的.所以,同一个经纬度数值,在BJ54和WGS84下表示的是不同的位置,而以下我说的经纬度均指大地坐标系下的经纬度.大地坐标系是大地测量中以参考椭球面为基准面建立起来的坐标系.下面我跟大家大致谈谈其中涉及到的两个重要概念. 2.1大地