Visual Studio C# 编写加密火星坐标转换
Visual Studio C# 编写加密火星坐标转换
- 1、WGS84坐标转GCJ02火星坐标
- 2、GCJ02火星坐标转WGS84坐标(回归计算)
- 3、GCJ02火星坐标转BD09百度坐标
- 4、BD09百度坐标转GCJ02火星坐标(回归计算)
- 5、坐标公共转换类
- 6、地图显示
- 7、程序简单界面
- 8、完整源代码工程
1、WGS84坐标转GCJ02火星坐标
/// <summary>WGS84坐标转GCJ02火星坐标</summary>/// <param name="Position">坐标结构体</param>/// <returns>返回GCJ02火星坐标</returns>public coord WGS84ToGCJ02(coord Position){Double lon = Position.lon;Double lat = Position.lat;if (!isInChina(lon, lat)) return Position;coord Pos = offset(lon, lat);Pos.lon = lon + Pos.lon;Pos.lat = lat + Pos.lat;return Pos;}
2、GCJ02火星坐标转WGS84坐标(回归计算)
/// <summary>GCJ02火星坐标转WGS84坐标</summary>/// <param name="Position">坐标结构体</param>/// <returns>返回WGS84火星坐标</returns>public coord GCJ02ToWGS84(coord Position){Double lon = Position.lon;Double lat = Position.lat;if (!isInChina(lon, lat)) return Position;coord Pos = Position;coord tempPoint = WGS84ToGCJ02(Pos);Double dx = tempPoint.lon - lon;Double dy = tempPoint.lat - lat;while (Math.Abs(dx) > 1e-14 || Math.Abs(dy) > 1e-14)//回归{Pos.lon -= dx;Pos.lat -= dy;tempPoint = WGS84ToGCJ02(Pos);dx = tempPoint.lon - lon;dy = tempPoint.lat - lat;}return Pos;}
3、GCJ02火星坐标转BD09百度坐标
/// <summary>GCJ02火星坐标转BD09百度坐标</summary>/// <param name="Position">坐标结构体</param>/// <returns>返回BD09百度坐标</returns>public coord GCJ02ToBD09(coord Position){Double lon = Position.lon;Double lat = Position.lat;Double x = lon;Double y = lat;Double z = Math.Sqrt(x * x + y * y) + 0.00002 * Math.Sin(y * baiduFactor);Double theta = Math.Atan2(y, x) + 0.000003 * Math.Cos(x * baiduFactor);coord outPos;outPos.lon = z * Math.Cos(theta) + 0.0065;outPos.lat = z * Math.Sin(theta) + 0.006;return outPos;}
4、BD09百度坐标转GCJ02火星坐标(回归计算)
/// <summary>BD09百度坐标转GCJ02火星坐标</summary>/// <param name="Position">坐标结构体</param>/// <returns>返回GCJ02火星坐标</returns>public coord BD09ToGCJ02(coord Position){Double lon = Position.lon;Double lat = Position.lat;Double x = lon - 0.0065;Double y = lat - 0.006;coord Pos;Pos.lon = x;Pos.lat = y;coord tempPoint = GCJ02ToBD09(Pos);Double dx = tempPoint.lon - lon;Double dy = tempPoint.lat - lat;while (Math.Abs(dx) > 1e-14 || Math.Abs(dy) > 1e-14)//回归{Pos.lon -= dx;Pos.lat -= dy;tempPoint = GCJ02ToBD09(Pos);dx = tempPoint.lon - lon;dy = tempPoint.lat - lat;}return Pos;}
5、坐标公共转换类
/// <summary>长半轴</summary>public const Double a = 6378245.0;/// <summary>第一偏心率</summary>public const Double ee = 0.00669342162296594322796213968775;/// <summary>百度坐标转换因子</summary>public const Double baiduFactor = (Math.PI * 3000.0) / 180.0;// 定义坐标结构体public struct coord{public Double lon;public Double lat;};/// <summary>是否中国坐标</summary>/// <param name="lon">经度</param>/// <param name="lat">纬度</param>/// <returns>返回布尔值</returns>public Boolean isInChina(Double lon, Double lat){return lon >= 72.004 && lon <= 137.8347 && lat >= 0.8293 && lat <= 55.8271;}/// <summary>偏移量</summary>/// <param name="lon">经度</param>/// <param name="lat">纬度</param>/// <returns></returns>public coord offset(Double lon, Double lat){Double dLon = transformLon(lon - 105.0, lat - 35.0);Double dLat = transformLat(lon - 105.0, lat - 35.0);Double radLat = (lat / 180.0) * Math.PI;Double magic = Math.Sin(radLat);magic = 1 - ee * magic * magic;Double sqrtMagic = Math.Sqrt(magic);coord outPos;outPos.lon = (dLon * 180.0) / (a / sqrtMagic * Math.Cos(radLat) * Math.PI);outPos.lat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * Math.PI);return outPos;}/// <summary>纬度偏移量</summary>/// <param name="lon">经度</param>/// <param name="lat">纬度</param>/// <returns>返回纬度</returns>public Double transformLat(Double lon, Double lat){Double ret = -100.0 + 2.0 * lon + 3.0 * lat + 0.2 * lat * lat + 0.1 * lon * lat + 0.2 * Math.Sqrt(Math.Abs(lon));ret += ((20.0 * Math.Sin(6.0 * lon * Math.PI) + 20.0 * Math.Sin(2.0 * lon * Math.PI)) * 2.0) / 3.0;ret += ((20.0 * Math.Sin(lat * Math.PI) + 40.0 * Math.Sin((lat / 3.0) * Math.PI)) * 2.0) / 3.0;ret += ((160.0 * Math.Sin((lat / 12.0) * Math.PI) + 320.0 * Math.Sin((lat * Math.PI) / 30.0)) * 2.0) / 3.0;return ret;}/// <summary>经度偏移量</summary>/// <param name="lon">经度</param>/// <param name="lat">纬度</param>/// <returns>返回经度</returns>public Double transformLon(Double lon, Double lat){Double ret = 300.0 + lon + 2.0 * lat + 0.1 * lon * lon + 0.1 * lon * lat + 0.1 * Math.Sqrt(Math.Abs(lon));ret += ((20.0 * Math.Sin(6.0 * lon * Math.PI) + 20.0 * Math.Sin(2.0 * lon * Math.PI)) * 2.0) / 3.0;ret += ((20.0 * Math.Sin(lon * Math.PI) + 40.0 * Math.Sin((lon / 3.0) * Math.PI)) * 2.0) / 3.0;ret += ((150.0 * Math.Sin((lon / 12.0) * Math.PI) + 300.0 * Math.Sin((lon / 30.0) * Math.PI)) * 2.0) / 3.0;return ret;}
6、地图显示
/// <summary>坐标值改变,地图改变</summary>private void ChangeVal(){Double longitude = 0;Double latitude = 0;switch (comboBox1.SelectedIndex){case 0://高德if (string.IsNullOrEmpty(textBox3.Text) || string.IsNullOrEmpty(textBox4.Text)){longitude = 112.960235035495;latitude = 28.1661659723607;}else{longitude = Convert.ToDouble(textBox4.Text);latitude = Convert.ToDouble(textBox3.Text);}//string amapUrl = "http://ditu.amap.com/?longitude=" + longitude + "&latitude=" + latitude;string amapUrl = "http://ditu.amap.com";// "http://map.gaode.com/";webBrowser1.Navigate(amapUrl);break;case 1://百度if (string.IsNullOrEmpty(textBox5.Text) || string.IsNullOrEmpty(textBox6.Text)){longitude = 112.966759165825;latitude = 28.1719881916543;}else{longitude = Convert.ToDouble(textBox6.Text);latitude = Convert.ToDouble(textBox5.Text);}//string url = "http://map.baidu.com/";string url = "http://api.map.baidu.com/marker?location=" + latitude + "," + longitude + "&title=&content=我在这里&output=html";webBrowser1.Navigate(url);break;case 2://腾讯if (string.IsNullOrEmpty(textBox3.Text) || string.IsNullOrEmpty(textBox4.Text)){longitude = 112.960235035495;latitude = 28.1661659723607;}else{longitude = Convert.ToDouble(textBox4.Text);latitude = Convert.ToDouble(textBox3.Text);}// string qqMapUrl= "http://map.qq.com/?referer=ts.qq.com&type=ms&lat=" + latitude + "&lng=" +longitude;string qqMapUrl = "http://map.qq.com/";webBrowser1.Navigate(qqMapUrl);break;}}
7、程序简单界面
8、完整源代码工程
CSDN 资源下载地址:
https://download.csdn.net/download/zyyujq/89823267
相关文章:

Visual Studio C# 编写加密火星坐标转换
Visual Studio C# 编写加密火星坐标转换 1、WGS84坐标转GCJ02火星坐标2、GCJ02火星坐标转WGS84坐标(回归计算)3、GCJ02火星坐标转BD09百度坐标4、BD09百度坐标转GCJ02火星坐标(回归计算)5、坐标公共转换类6、地图显示7、程序简单界…...

微服务-流量染色
1. 功能目的 通过设置请求头的方式将http请求优先打到指定的服务上,为微服务开发调试工作提供便利 请求报文难模拟:可以直接在测试环境页面上操作,流量直接打到本地IDEA进行debug请求链路较长:本地开发无需启动所有服务…...
C语言实现 操作系统 经典的进程同步问题(2)
哲学家进餐问题 哲学家进餐问题是一个经典的同步问题,涉及多个哲学家试图同时用餐,但每个哲学家左右两边只有一把叉子。为了避免死锁和饥饿,可以使用记录型信号量(也称为计数信号量)来管理叉子的使用。 1、利用记录型…...

有效的字母异位词【字符串哈希】
题目 题解: 1.排序: #include<algorithm>class Solution{public:bool isAnagram(string s,string t){sort(s.begin(),s.end());sort(t.begin(),t.end());return st;} } 时间复杂度O(nlogn) 2.哈希表 #include<algorithm>int hash1[100]; …...
如何选择与运用工具提升工作效率的秘密指南
一、引言 ---- 在当今这个信息爆炸的时代,编程工具的选择对于开发者的工作效率至关重要。从智能的代码编辑器到强大的版本控制工具,再到那些能让我们事半功倍的自动化脚本,每一款工具都有其独特的优势和价值。那么,哪款编程工具…...

Spring系列 AOP实现过程
文章目录 实现原理EnableAspectJAutoProxyAnnotationAwareAspectJAutoProxyCreator 代理创建过程wrapIfNecessarygetAdvicesAndAdvisorsForBeanfindCandidateAdvisorsfindAdvisorsThatCanApply createProxy AspectJ注解处理代理调用过程 实现原理 本文源码基于spring-aop-5.3.…...

C语言 getchar 函数完全解析:掌握字符输入的关键
前言 在C语言中,getchar 是一个非常实用的函数,用于从标准输入流(通常是键盘)读取单个字符。这对于处理文本输入非常有用,尤其是在需要逐个字符处理的情况下。本文将深入探讨 getchar 函数的用法和特点,并…...
Docker安装mysql8并配置主从复制
1. 安装mysql8 1.1 新增挂载文件 # 新增mysql挂载文件夹 mkdir -p /root/docker/mysql/m01/log mkdir -p /root/docker/mysql/m01/data mkdir -p /root/docker/mysql/m01/conf1.2 新增mysql配置文件 # 新增mysql配置文件 cd /root/docker/mysql/m01/conf vim my.cnf # 下面是…...

快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例
本文作者:胡玉龙,快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年,快手的数据量已突破800TB大关,其中最大集群的数据量更是达到了数百TB级别。为此,快手将数据…...

基于Node.js+Express+MySQL+VUE实现的计算机毕业设计共享单车管理网站
单车信息选择骑行 骑行状态留言公告/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 目录 功能图 界面展示 开发目标 开发背景意义 开发意义 开发目的 项目概述 技术选型与理由 系统设计与功能实现 项目可执行性分析 系统架构需求 性能需…...
人工智能辅助的神经康复
人工智能辅助的神经康复是通过应用人工智能(AI)技术来改善神经系统损伤患者的康复过程。此领域结合了深度学习、数据分析和机器人技术,旨在提升康复效果、个性化治疗方案和监测进展。以下是该领域的关键组成部分和应用: 1. 康复评…...
KKT实际运用 -MATLAB
FMINCON函数可以很方便的求出:fun:目标函数,即需要最小化的函数,输入参数为向量x,输出为标量f(x)。x0:初始点,即求解过程的起始点,可以是标量、向量或矩阵。A和b:线性不等…...

php在线相册
1、将静态页面效果完成 解压到www里 整个数据 暂时是错误的 建立连接密码为root 运行sql文件 右键根目录刷新 刷新后成功 开始 测试 如果需要上传照片,点击创建相册,选择上传文件,选择文件后退出 导入alumbenew2 2.提交表单方式 3.利用ph…...
Xcode手动安装SDK模拟器
1.下载SDK模拟器&Xcode SDK和Xcode官方下载地址 2.下载好后使用命令将SDK导入到Xcode中如下命令 注:我是在/Applications 目录下执行的命令,模拟其地址直接拖拽过来 sudo xcode-select -s Xcode.app xcodebuild -runFirstLaunch xcodebuild -imp…...

Docker安装consul + go使用consul + consul知识
1. 什么是服务注册和发现 假如这个产品已经在线上运行,有一天运营想搞一场促销活动,那么我们相对应的【用户服务】可能就要新开启三个微服务实例来支撑这场促销活动。而与此同时,作为苦逼程序员的你就只有手动去 API gateway 中添加新增的这…...
JWT 漏洞 - 学习手册
0x01:JWT 前导知识 0x0101:JWT 详解 0x02:JWT 漏洞介绍 0x0201:JWT 漏洞介绍 0x03:JWT 挖掘思路 JWT 漏洞挖掘思路 - JWT Payload 敏感信息泄露 备注:通过泄露的 JWT Payload 获取用户的敏感信息&#…...
HTML【知识改变命运】03font 字体标签
题目:在页面上显示"北京"两个字,字体为微软雅黑,颜色为红色,大小为40xp; font标签可以修饰字体的大小,颜色,和字体 属性:color颜色,face字体,size大…...

集师专属知识付费小程序搭建 心理咨询小程序搭建
一、产品简介 集师SaaS知识付费软件,为知识创业者或商家提供一站式内容交付解决方案,助力商家搭建集品牌传播、商业变现和用户运营于一体的线上知识服务系统,覆盖全渠道经营场景,占据每个流量入口,使流量变现快速高效…...

https://www.aitoolpath.com/ 一个工具数据库,目前储存了有2000+各种工具。每日更新
AI 工具爆炸?别怕,这个网站帮你整理好了! 哇塞,兄弟们!AI 时代真的来了!现在各种 AI 工具跟雨后春笋似的,噌噌噌地往外冒。AI 写作、AI 绘画、AI 代码生成……简直是要逆天啊! 可是…...
科技的成就(六十三)
583、八小时工作制 最先提出这种理念的人竟然也是一名企业家,而且还是一名空想社会主义者。这名叫做罗伯特欧文的英国人,也凭借先进的人本管理理念成为了现代人事管理之父。 584、SDN(软件定义网络) "SDN(软件定…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...