当前位置: 首页 > news >正文

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坐标&#xff08;回归计算&#xff09;3、GCJ02火星坐标转BD09百度坐标4、BD09百度坐标转GCJ02火星坐标&#xff08;回归计算&#xff09;5、坐标公共转换类6、地图显示7、程序简单界…...

微服务-流量染色

1. 功能目的 通过设置请求头的方式将http请求优先打到指定的服务上&#xff0c;为微服务开发调试工作提供便利 请求报文难模拟&#xff1a;可以直接在测试环境页面上操作&#xff0c;流量直接打到本地IDEA进行debug请求链路较长&#xff1a;本地开发无需启动所有服务&#xf…...

C语言实现 操作系统 经典的进程同步问题(2)

哲学家进餐问题 哲学家进餐问题是一个经典的同步问题&#xff0c;涉及多个哲学家试图同时用餐&#xff0c;但每个哲学家左右两边只有一把叉子。为了避免死锁和饥饿&#xff0c;可以使用记录型信号量&#xff08;也称为计数信号量&#xff09;来管理叉子的使用。 1、利用记录型…...

有效的字母异位词【字符串哈希】

题目 题解&#xff1a; 1.排序&#xff1a; #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]; …...

如何选择与运用工具提升工作效率的秘密指南

一、引言 ----  在当今这个信息爆炸的时代&#xff0c;编程工具的选择对于开发者的工作效率至关重要。从智能的代码编辑器到强大的版本控制工具&#xff0c;再到那些能让我们事半功倍的自动化脚本&#xff0c;每一款工具都有其独特的优势和价值。那么&#xff0c;哪款编程工具…...

Spring系列 AOP实现过程

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

C语言 getchar 函数完全解析:掌握字符输入的关键

前言 在C语言中&#xff0c;getchar 是一个非常实用的函数&#xff0c;用于从标准输入流&#xff08;通常是键盘&#xff09;读取单个字符。这对于处理文本输入非常有用&#xff0c;尤其是在需要逐个字符处理的情况下。本文将深入探讨 getchar 函数的用法和特点&#xff0c;并…...

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案例

本文作者&#xff1a;胡玉龙&#xff0c;快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年&#xff0c;快手的数据量已突破800TB大关&#xff0c;其中最大集群的数据量更是达到了数百TB级别。为此&#xff0c;快手将数据…...

基于Node.js+Express+MySQL+VUE实现的计算机毕业设计共享单车管理网站

单车信息选择骑行 骑行状态留言公告/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 目录 功能图 界面展示 开发目标 开发背景意义 开发意义‌ 开发目的 项目概述‌ 技术选型与理由‌ 系统设计与功能实现‌ 项目可执行性分析 ‌系统架构需求‌ ‌性能需…...

人工智能辅助的神经康复

人工智能辅助的神经康复是通过应用人工智能&#xff08;AI&#xff09;技术来改善神经系统损伤患者的康复过程。此领域结合了深度学习、数据分析和机器人技术&#xff0c;旨在提升康复效果、个性化治疗方案和监测进展。以下是该领域的关键组成部分和应用&#xff1a; 1. 康复评…...

KKT实际运用 -MATLAB

FMINCON函数可以很方便的求出&#xff1a;fun&#xff1a;目标函数&#xff0c;即需要最小化的函数&#xff0c;输入参数为向量x&#xff0c;输出为标量f(x)。x0&#xff1a;初始点&#xff0c;即求解过程的起始点&#xff0c;可以是标量、向量或矩阵。A和b&#xff1a;线性不等…...

php在线相册

1、将静态页面效果完成 解压到www里 整个数据 暂时是错误的 建立连接密码为root 运行sql文件 右键根目录刷新 刷新后成功 开始 测试 如果需要上传照片&#xff0c;点击创建相册&#xff0c;选择上传文件&#xff0c;选择文件后退出 导入alumbenew2 2.提交表单方式 3.利用ph…...

Xcode手动安装SDK模拟器

1.下载SDK模拟器&Xcode SDK和Xcode官方下载地址 2.下载好后使用命令将SDK导入到Xcode中如下命令 注&#xff1a;我是在/Applications 目录下执行的命令&#xff0c;模拟其地址直接拖拽过来 sudo xcode-select -s Xcode.app xcodebuild -runFirstLaunch xcodebuild -imp…...

Docker安装consul + go使用consul + consul知识

1. 什么是服务注册和发现 假如这个产品已经在线上运行&#xff0c;有一天运营想搞一场促销活动&#xff0c;那么我们相对应的【用户服务】可能就要新开启三个微服务实例来支撑这场促销活动。而与此同时&#xff0c;作为苦逼程序员的你就只有手动去 API gateway 中添加新增的这…...

JWT 漏洞 - 学习手册

0x01&#xff1a;JWT 前导知识 0x0101&#xff1a;JWT 详解 0x02&#xff1a;JWT 漏洞介绍 0x0201&#xff1a;JWT 漏洞介绍 0x03&#xff1a;JWT 挖掘思路 JWT 漏洞挖掘思路 - JWT Payload 敏感信息泄露 备注&#xff1a;通过泄露的 JWT Payload 获取用户的敏感信息&#…...

HTML【知识改变命运】03font 字体标签

题目&#xff1a;在页面上显示"北京"两个字&#xff0c;字体为微软雅黑&#xff0c;颜色为红色&#xff0c;大小为40xp&#xff1b; font标签可以修饰字体的大小&#xff0c;颜色&#xff0c;和字体 属性&#xff1a;color颜色&#xff0c;face字体&#xff0c;size大…...

集师专属知识付费小程序搭建 心理咨询小程序搭建

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

https://www.aitoolpath.com/ 一个工具数据库,目前储存了有2000+各种工具。每日更新

AI 工具爆炸&#xff1f;别怕&#xff0c;这个网站帮你整理好了&#xff01; 哇塞&#xff0c;兄弟们&#xff01;AI 时代真的来了&#xff01;现在各种 AI 工具跟雨后春笋似的&#xff0c;噌噌噌地往外冒。AI 写作、AI 绘画、AI 代码生成……简直是要逆天啊&#xff01; 可是…...

科技的成就(六十三)

583、八小时工作制 最先提出这种理念的人竟然也是一名企业家&#xff0c;而且还是一名空想社会主义者。这名叫做罗伯特欧文的英国人&#xff0c;也凭借先进的人本管理理念成为了现代人事管理之父。 584、SDN&#xff08;软件定义网络&#xff09; "SDN&#xff08;软件定…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...