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 daemon守护进程实现
Aug 27 Python
python入门教程 python入门神图一张
Mar 05 Python
BP神经网络原理及Python实现代码
Dec 18 Python
Python基础之文件读取的讲解
Feb 16 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
python 安装impala包步骤
Mar 28 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 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
PHPlet在Windows下的安装
2006/10/09 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python logging日志模块以及多进程日志详解
2018/04/18 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python输入错误后删除的方法
2019/10/12 Python
python关闭占用端口方式
2019/12/17 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
python如何爬取网页中的文字
2020/07/28 Python
运动会跳远广播稿
2014/02/04 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
大学生就业意向书
2015/05/11 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
国庆阅兵观后感
2015/06/15 职场文书
详解Python函数print用法
2021/06/18 Python
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS
table不让td文字溢出操作方法
2022/12/24 HTML / CSS