python实现高斯投影正反算方式


Posted in Python onJanuary 17, 2020

使用Python实现了一下我们同事的C++高斯投影正反算,实际跑通,可用。

#!/ 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 相关文章推荐
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
Python中有趣在__call__函数
Jun 21 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
django组合搜索实现过程详解(附代码)
Aug 06 Python
python向图片里添加文字
Nov 26 Python
python开根号实例讲解
Aug 30 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 Python
使用Python解决图表与画布的间距问题
Apr 11 Python
python中图像通道分离与合并实例
Jan 17 #Python
Python-opencv 双线性插值实例
Jan 17 #Python
如何通过python实现人脸识别验证
Jan 17 #Python
Python-openCV读RGB通道图实例
Jan 17 #Python
OpenCV python sklearn随机超参数搜索的实现
Jan 17 #Python
python numpy 矩阵堆叠实例
Jan 17 #Python
Python利用Scrapy框架爬取豆瓣电影示例
Jan 17 #Python
You might like
discuz Passport 通行证 整合笔记
2008/06/30 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
php文件缓存方法总结
2016/03/16 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
Python 基础知识之字符串处理
2017/01/06 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
python操作yaml说明
2020/04/08 Python
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
个人求职信范例
2014/01/29 职场文书
优秀护士先进事迹
2014/05/08 职场文书
小学生暑假生活总结
2015/07/13 职场文书
同学聚会祝酒词
2015/08/10 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电