#!/ usr/bin/python

# -*- coding:utf-8 -*-

import math

def LatLon2XY(latitude, longitude):

a = 6378137.0

# b = 6356752.3142

# c = 6399593.6258

# alpha = 1 / 298.257223563

e2 = 0.0066943799013

# epep = 0.00673949674227

#将经纬度转换为弧度

latitude2Rad = (math.pi / 180.0) * latitude

beltNo = int((longitude + 1.5) / 3.0) #计算3度带投影度带号

L = beltNo * 3 #计算中央经线

l0 = longitude - L #经差

tsin = math.sin(latitude2Rad)

tcos = math.cos(latitude2Rad)

t = math.tan(latitude2Rad)

m = (math.pi / 180.0) * l0 * tcos

et2 = e2 * pow(tcos, 2)

et3 = e2 * pow(tsin, 2)

X = 111132.9558 * latitude - 16038.6496 * math.sin(2 * latitude2Rad) + 16.8607 * math.sin(

4 * latitude2Rad) - 0.0220 * math.sin(6 * latitude2Rad)

N = a / math.sqrt(1 - et3)

x = X + N * t * (0.5 * pow(m, 2) + (5.0 - pow(t, 2) + 9.0 * et2 + 4 * pow(et2, 2)) * pow(m, 4) / 24.0 + (

61.0 - 58.0 * pow(t, 2) + pow(t, 4)) * pow(m, 6) / 720.0)

y = 500000 + N * (m + (1.0 - pow(t, 2) + et2) * pow(m, 3) / 6.0 + (

5.0 - 18.0 * pow(t, 2) + pow(t, 4) + 14.0 * et2 - 58.0 * et2 * pow(t, 2)) * pow(m, 5) / 120.0)

return x, y

def XY2LatLon(X, Y, L0):

iPI = 0.0174532925199433

a = 6378137.0

f= 0.00335281006247

ZoneWide = 3 #按3度带进行投影

ProjNo = int(X / 1000000)

L0 = L0 * iPI

X0 = ProjNo * 1000000 + 500000

Y0 = 0

xval = X - X0

yval = Y - Y0

e2 = 2 * f - f * f #第一偏心率平方

e1 = (1.0 - math.sqrt(1 - e2)) / (1.0 + math.sqrt(1 - e2))

ee = e2 / (1 - e2) #第二偏心率平方

M = yval

u = M / (a * (1 - e2 / 4 - 3 * e2 * e2 / 64 - 5 * e2 * e2 * e2 / 256))

fai = u \

+ (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * math.sin(2 * u) \

+ (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * math.sin(4 * u) \

+ (151 * e1 * e1 * e1 / 96) * math.sin(6 * u)\

+ (1097 * e1 * e1 * e1 * e1 / 512) * math.sin(8 * u)

C = ee * math.cos(fai) * math.cos(fai)

T = math.tan(fai) * math.tan(fai)

NN = a / math.sqrt(1.0 - e2 * math.sin(fai) * math.sin(fai))

R = a * (1 - e2) / math.sqrt(

(1 - e2 * math.sin(fai) * math.sin(fai)) * (1 - e2 * math.sin(fai) * math.sin(fai)) * (1 - e2 * math.sin(fai) * math.sin(fai)))

D = xval / NN

#计算经纬度(弧度单位的经纬度)

longitude1 = L0 + (D - (1 + 2 * T + C) * D * D * D / 6 + (

5 - 2 * C + 28 * T - 3 * C * C + 8 * ee + 24 * T * T) * D * D * D * D * D / 120) / math.cos(fai)

latitude1 = fai - (NN * math.tan(fai) / R) * (

D * D / 2 - (5 + 3 * T + 10 * C - 4 * C * C - 9 * ee) * D * D * D * D / 24 + (

61 + 90 * T + 298 * C + 45 * T * T - 256 * ee - 3 * C * C) * D * D * D * D * D * D / 720)

#换换为deg

longitude = longitude1 / iPI

latitude = latitude1 / iPI

return latitude, longitude

#

# print LatLon2XY(40.07837722329, 116.23514827596)

# print XY2LatLon(434760.7611718801, 4438512.040474475, 117.0)

python求投影距离_python实现高斯投影正反算方式相关推荐

  1. matlab高斯正反算程序6,基于matlab的高斯投影正反算与相邻带坐标换算程序设计...

    第 卷 第 期 在 月 中 国 水 运 基于 的高斯投影正反算与相邻带坐标换 算程 序设计 徐 翰 ,周 强 波 (核 工 业 二 三 研 究所 ,湖 南 长 沙 ) 摘 要 :地 图投影方法众多 , ...

  2. 高斯投影正反算C语言程序代码,高斯投影正反算c代码

    <高斯投影正反算c代码>由会员分享,可在线阅读,更多相关<高斯投影正反算c代码(11页珍藏版)>请在人人文库网上搜索. 1.高斯投影正反算程序设计一程序设计流程本程序的设计思路 ...

  3. matlab高斯投影坐标,基于matlab的高斯投影正反算与相邻带坐标换算程序设计

    第 15 卷 第 2 期 中 国 水 运 Vol.15 No.2 2015 年 2 月 China Water Transport February 2015 收稿日期:2014-01-15 作者简介 ...

  4. C# 大地测量高斯投影正反算公式计算程序

    C# 大地测量高斯投影正反算公式程序 C# 大地测量高斯投影正反算公式计算程序 一.编程作业要求: 编写能够进行高斯投影正反算公式计算的程序. 二.实验效果: 三.部分代码实现 1.选择界面 usin ...

  5. 高斯投影正反算C语言程序代码,一个老师给的高斯投影正反算c++源码.doc

    一个老师给的高斯投影正反算c源码 //高斯投影正.反算 //6度带宽?? 54年北京坐标系 //高斯投影由经纬度 Unit:DD 反算大地坐标 含带号,Unit:Metres void GaussPr ...

  6. 高斯投影正反算的代码

    2008-05-28 16:03:29 | 高斯投影正反算的代码   //高斯投影正.反算 //6度带宽 54年北京坐标系 //高斯投影由经纬度(UnitD)反算大地坐标(含带号,Unit:Metre ...

  7. GPS定位(五)-高斯投影正反算C程序

    基本思想 斯投影正算公式就是由大地坐标(L,B)求解高斯平面坐标(x,y),而高斯投影反算公式则是由高斯平面坐标(x,y)求解大地坐标(L,B). 计算模型 高斯投影正算 这里输入的经纬度应该转化为度 ...

  8. python求积分_python 求定积分和不定积分示例

    求f(x) = sin(x)/x 的不定积分和负无穷到正无穷的定积分 sin(x)/x 的不定积分是信号函数sig ,负无穷到正无穷的定积分为pi import math import numpy a ...

  9. python求圆面积_python如何求圆的面积

    首先我们要知道圆的面积计算公式:S = πr²,公式中S为所求圆的面积,π为圆周率,r为圆的半径. 示例: # 定义一个方法来计算圆的面积 def findArea(r): PI = 3.142 re ...

最新文章

  1. cap理论与分布式事务的解决方案
  2. Android中资源文件夹res/raw和assets的使用
  3. 从终端命令行运行 AppleScript 脚本
  4. KMP子串匹配算法(Knuth–Morris–Pratt algorithm)
  5. c语言for循环++_C ++程序使用循环查找数字的幂
  6. mfc 如何判断excel软件是否打开_如何从无到有地搭建一套完整的测试系统(上)...
  7. TreeSet简单介绍与使用方法
  8. 过滤DataTable中的指定字段重复的行
  9. redhat5.4上安装oracle9i
  10. 使用Eclipse Babel语言包汉化eclipse
  11. python图表制作方法_python图表制作
  12. 计算机添加usb网络打印机,路由器openWrt固件使用USB打印机设置电脑添加网络USB打印机方法...
  13. QQ大厅游戏 大家来找茬辅助
  14. MacBook 快捷键个人总结和设置
  15. Java—初识Java与开发环境的安装
  16. 这些好看的皮肤,这不嗖的一下,统统都到电脑里了~
  17. python 汉字与拼音的转换--pypinyin
  18. NetBIOS、WINS、DNS的联系和区别
  19. 使用ROS-I接口通过MoveIt包安装和操作ABB机器人
  20. 三国志11武将资料整理版

热门文章

  1. 会议冲突!临时更新客户端!这些在线视频会议痛点统统解决掉!
  2. 激光雷达 win10
  3. 链表-删除链表中的重复元素
  4. 两个字符串之间的复制,不使用strcopy()函数
  5. pandas进行数据处理常用方法与属性
  6. Random在for以及foreach循环中产生相同随机数问题
  7. docker 从harbor 拉取镜像慢_Harbor丨使用的正确姿势
  8. c++做界面_为什么80%的毕业设计做的都是滨水?
  9. YOLO在升级 | PP-YOLO v2开源致敬YOLOV4携带Tricks又准又快地归来(附论文与源码)...
  10. 如何从失焦的图像中恢复景深并将图像变清晰?