首页 > 其他分享 >WGS84坐标 转 GCJ02坐标 / BD09坐标

WGS84坐标 转 GCJ02坐标 / BD09坐标

时间:2024-11-14 15:19:22浏览次数:1  
标签:WGS84 double 坐标 lat PI out Sin Math BD09

/* 具体实现方法 */ namespace WGS84PositionConversion { public class CoordinateConverter { // PI值 private const double PI = 3.1415926535897932384626; // 长半轴 private const double A = 6378245.0; // 扁率 private const double EE = 0.00669342162296594323; public static double transformLat(double x, double y) { double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.Sqrt(Math.Abs(x)); ret += (20.0 * Math.Sin(6.0 * x * PI) + 20.0 * Math.Sin(2.0 * x * PI)) * 2.0 / 3.0; ret += (20.0 * Math.Sin(y * PI) + 40.0 * Math.Sin(y / 3.0 * PI)) * 2.0 / 3.0; ret += (160.0 * Math.Sin(y / 12.0 * PI) + 320 * Math.Sin(y * PI / 30.0)) * 2.0 / 3.0; return ret; } public static double transformLon(double x, double y) { double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.Sqrt(Math.Abs(x)); ret += (20.0 * Math.Sin(6.0 * x * PI) + 20.0 * Math.Sin(2.0 * x * PI)) * 2.0 / 3.0; ret += (20.0 * Math.Sin(x * PI) + 40.0 * Math.Sin(x / 3.0 * PI)) * 2.0 / 3.0; ret += (150.0 * Math.Sin(x / 12.0 * PI) + 300.0 * Math.Sin(x / 30.0 * PI)) * 2.0 / 3.0; return ret; } /*** * 判断是否在中国范围之内 */ public static bool outOfChina(double lat, double lon) { if (lon < 72.004 || lon > 137.8347) return true; if (lat < 0.8293 || lat > 55.8271) return true; return false; } /*** * 把公式部分抽取出来 */ public static void transform(double lat, double lon, out double mgLat, out double mgLon) { if (!outOfChina(lat, lon)) { double dLat = transformLat(lon - 105.0, lat - 35.0); double dLon = transformLon(lon - 105.0, lat - 35.0); double radLat = lat / 180.0 * PI; double magic = Math.Sin(radLat); magic = 1 - EE * magic * magic; double sqrtMagic = Math.Sqrt(magic); dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI); dLon = (dLon * 180.0) / (A / sqrtMagic * Math.Cos(radLat) * PI); mgLat = lat + dLat; mgLon = lon + dLon; } else { mgLat = lat; mgLon = lon; } } /*** * wgs84到gcj02转换(高德、腾讯) */ public static void wgs84_To_Gcj02(double lat, double lon, out double mgLat, out double mgLon) { transform(lat, lon, out mgLat, out mgLon); } /*** * 百度坐标是在火星坐标基础上做的二次加密 */ public static void gcj02_To_Bd09(double gg_lat, double gg_lon, out double BdLat, out double BdLon) { double lat, lng; transform(gg_lat, gg_lon, out lat, out lng); // 转火星坐标 double xpi = PI * 3000.0 / 180.0; double z = Math.Sqrt(lng * lng + lat * lat) + 0.00002 * Math.Sin(lat * xpi); double theta = Math.Atan2(lat, lng) + 0.000003 * Math.Cos(lng * xpi); BdLon = z * Math.Cos(theta) + 0.0065; BdLat = z * Math.Sin(theta) + 0.006; } } } /* 函数调用 */ static void Main(string[] args) { double wgs84Lon = 106.580211; // 这里替换为实际的WGS84经度值 double wgs84Lat = 29.671458; // 这里替换为实际的WGS84纬度值 double gcj02Lat, gcj02Lon; CoordinateConverter.wgs84_To_Gcj02(wgs84Lat, wgs84Lon, out gcj02Lat, out gcj02Lon); Console.WriteLine($"转换后的GCJ02坐标:{gcj02Lon.ToString("F11")},{gcj02Lat.ToString("F11")}"); double Bd09Lat, Bd09Lon; CoordinateConverter.gcj02_To_Bd09(wgs84Lat, wgs84Lon, out Bd09Lat, out Bd09Lon); Console.WriteLine($"转换后的BD09坐标:{Bd09Lon.ToString("F11")},{Bd09Lat.ToString("F11")}"); }

标签:WGS84,double,坐标,lat,PI,out,Sin,Math,BD09
From: https://www.cnblogs.com/ypsofter/p/18546067

相关文章

  • 在线性坐标系中绘制对数函数图象
    本文记述了用Matplotlib在线性坐标系中绘制对数函数图象的例子。代码主体内容如下:...defmain():fig,ax=plt.subplots(figsize=(8,8))#1ax=configure_axes(ax,'LogarithmicFunction',8,3,1,0.25,1,0.25)#2x=np.linspace(......
  • Halcon教程:多方法提取轮廓坐标
    欢迎来到广州研为官方频道!我们将在频道中不断更新运动控制案例讲解、小型项目代码讲解、运动控制知识科普、机器视觉知识科普等内容,只为与您一起交流分享运动控制的那些事。目录1轮廓加工ContourProcessing2edges_sub_pix提取图像轮廓3轮廓获取轮廓坐标3.1获取轮廓......
  • 在线性坐标系中绘制指数函数图象
    本文记述了用Matplotlib在线性坐标系中绘制指数函数图象的例子。代码主体内容如下:...defmain():fig,ax=plt.subplots(figsize=(8,8))#1ax=configure_axes(ax,'ExponentialFunction',3,8,1,0.25,1,0.25)#2x=np.linspace(......
  • DICOM图像知识:DICOM图像排序与坐标系解析
    目录引言1.概述2.DICOM图像排序规则2.1Patient的Study按StudyDate排序2.2Study的Series按SeriesNumber排序2.3Series的SOP按InstanceNumber或SliceLocation排序2.3.1InstanceNumber排序2.3.2SliceLocation排序2.3.3使用ImagePosition(Patient)和Image......
  • 关于 RK3588多屏显示的时候第二屏幕出现无法矫正的x坐标偏移 的解决方法
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/143608502红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…瑞芯微开发专栏问题 ......
  • 坐标系相关知识科普
    四/七参数计算方法及"傻瓜式"转换流程坐标转换隶属于"大地测量学"的范畴,而大地测量学呢,又是整个测绘学科中最基础、最重要,但知识的理论性最强的一门学科。今天呢,测绘营地将尽量用通俗易懂的语言为大家讲解一下坐标系的区别、几种转换方式、中央子午线的确定等等基本科普知识,然后......
  • C++ OpenCv二值化找圆心坐标
    思路:图像转为灰度图,然后二值化得到只有0或255的点坐标,此处圆是黑点,所以添加所有像素值为0的坐标。在这些坐标中找到圆上最左边、最顶端、最右边、最底端的四个点,这时可求出圆心坐标。 .cpp文件#include<opencv2/opencv.hpp>#include<iostream>#include<cstdlib>#include......
  • [QT QCustomPlot]实时折线图(坐标轴可缩放)
    [QTQCustomPlot]实时折线图(坐标轴可缩放)1.QCustomPlot介绍QCustomPlot是一个用于Qt框架的高性能、可扩展的图表库,专门设计用于显示和交互复杂的绘图。它提供了一个非常灵活的接口,允许开发者在Qt应用程序中轻松地实现各种图表和图形。以下是QCustomPlot的一些关键......
  • unity3d————坐标转换(世界转本地)
    this.transform.InverseTransformPoint1. 世界坐标系与局部坐标系世界坐标系:Unity3D中的全局参考框架,所有游戏对象的位置、旋转和缩放都是相对于这个框架来定义的。局部坐标系:每个游戏对象都有自己的局部坐标系,这个坐标系是相对于该游戏对象的位置、旋转和缩放来定义的。2......
  • Geogebra基础篇021—Geogebra的线工具:线段、直线、射线、给定长度的线段、从点出发的
    注意:关注微信公众号“第五智能”,免费查阅全系列文章(或者微信顶部直接搜索“Geogebra的线工具”就可以找到了)。上一篇是点工具,这一篇赶紧把线工具记录一下,基础篇早日完稿我们就可以研究更有意思的动画技巧了。Geogebra的线工具主要包括:线段(Segment)、直线(Line)、射线(Ray)、给定......