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实现的Kmeans++算法实例
Apr 26 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
pandas 读取各种格式文件的方法
Jun 22 Python
Python for循环与range函数的使用详解
Mar 23 Python
Python使用type关键字创建类步骤详解
Jul 23 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 Python
python实现暗通道去雾算法的示例
Sep 27 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 Python
Python实现照片卡通化
Dec 06 Python
Python 数据可视化神器Pyecharts绘制图像练习
Feb 28 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
php include,include_once,require,require_once
2008/09/05 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
在Django框架中运行Python应用全攻略
2015/07/17 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
python实现发送邮件及附件功能
2021/03/02 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python 3 判断2个字典相同
2019/08/06 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
Python tkinter常用操作代码实例
2020/01/03 Python
python实现感知机模型的示例
2020/09/30 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
计算机专业职业生涯规划范文
2014/01/19 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
团日活动总结书格式
2014/05/08 职场文书
护理见习报告范文
2014/11/03 职场文书
学习计划是什么
2019/04/30 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL