本代码实现在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

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

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

    火星坐标.百度坐标.WGS84坐标转换代码(JS.python版) 一.JS版本源码 github:https://github.com/wandergis/coordTransform /** * ...

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

    JS版本源码 /** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ / ...

  3. C# UTM坐标和WGS84坐标转换小工具

    工具根据:http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html js代码改编 工具源码github:https://github. ...

  4. WGS84,GCJ02, BD09坐标转换

    public class Gps { private double wgLat; private double wgLon; public Gps(double wgLat, double wgLon ...

  5. python 编写的经纬度坐标转换类

    # -*- coding: utf-8 -*- # /** # * 各地图API坐标系统比较与转换; # * WGS84坐标系:即地球坐标系,国际上通用的坐标系.设备一般包含GPS芯片或者北斗芯片获取 ...

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

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...

  7. IDL通过经纬度定位获取DN值

    以前就想写,但是因为envi可以就一直没弄.今天正好有个机会,就做了这个事情.ENVI中在主窗口中pixel locator可以实现,但是当我们需要读入很多的数据的时候,也就是批量处理的时候,显然编程 ...

  8. WGS84、GCJ-02(火星坐标)、百度坐标,Web墨卡托坐标

    GCJ-02坐标系统(火星坐标)简介:http://blog.csdn.net/giswens/article/details/8775121(存档:http://mapbd.com/cms/2012 ...

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

    BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换 http://www.cnphp6.com/archives/24822 by root ⋅ Leave a ...

随机推荐

  1. follow me learning sqlserver transql

    create DATABASE 教务管理系统on (name=教务管理系统_data,filename='E:\sql\教务管理系统_data.mdf ',size=5mb,maxsize=20mb ...

  2. Android开源框架:Universal-Image-Loader解析(一)

    之前花了一些时间,好好看了下这个框架,于是决定再重新梳理一下,把整个处理方法和流程过一遍,俗话说:温故而知新嘛 关于Universal-Image-Loader此框架的各种优点,稍微介绍下,网上应该也 ...

  3. LeetCode 笔记系列 20 Interleaving String [动态规划的抽象]

    题目: Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given: ...

  4. NOSCRIPT标签的用处

    NOSCRIPT标签用来定义在脚本未被执行时的替代内容.也可以用在检测浏览器是否支持脚本,若不支持脚本则可以显示NOSCRIPT标签里的innerText. eg:<body> ... . ...

  5. iOS开发中检测版本,有新版本则更新

    iOS程序自动提示更新的实现方案大致分为两种: 第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 . 第二种,就是利用苹果的appstore 提供的相关ap ...

  6. Ubuntu下安装配置JDK 7

    第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...

  7. 地址(Address)——WCF学习笔记(2)

    地址(Address)分为: 统一资源表示(URI). EndpointAddress. 端口共享. 逻辑地址与物理地址. 请求监听与消息分发.

  8. EntityFramework 基础的crud

    EntityFramework 基础的crud操作 根据上一张实体映射的demo学习基础的crud操作 1.增加 BlogDbContext dbContext = new BlogDbContext ...

  9. jq 一些小方法

    js 控制a标签的onclick方法 document.getElementById("a3").onclick = ""; window.document.g ...

  10. OS实验一实验报告

    实验一.命令解释程序的编写实验 专业:商业软件工程   姓名:王泽锴  学号:201406114113 一.实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语 ...