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多线程http下载实现示例
Dec 30 Python
python实现简单socket通信的方法
Apr 19 Python
python用户评论标签匹配的解决方法
May 31 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Python并行分布式框架Celery详解
Oct 15 Python
在双python下设置python3为默认的方法
Oct 31 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
python实现简单图片物体标注工具
Mar 18 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
详解python安装matplotlib库三种失败情况
Jul 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递归算法的详细示例分析
2013/02/19 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
js实现进度条的方法
2015/02/13 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
python的id()函数介绍
2013/02/10 Python
Python SQLite3数据库操作类分享
2014/06/10 Python
Python中super的用法实例
2015/05/28 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
室内设计自我鉴定
2013/10/15 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
初婚未育证明
2014/01/15 职场文书
经理助理岗位职责
2014/03/05 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
给校长的建议书200字
2014/05/16 职场文书
校优秀毕业生主要事迹
2014/05/26 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
岗位聘任报告
2015/03/02 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
回门宴新娘答谢词
2015/09/29 职场文书