C#实现墨卡托投影坐标系经纬度与米制单位之间的互转

一些坐标系概念(ECEF、ENU、WGS-84、Web墨卡托、UTM坐标系) 以地球质心为坐标原点,z轴指向极点,x轴过赤道和本初子午线交点,y轴完成右手坐标系。 阅读详情

在做WebAPI时,暴露给接口调用方的坐标常是经纬度,而在GIS数据建库时单位常是米。WGS1984坐标下,墨卡托投影的坐标经纬度与米之间的常用转换如下:

using System;
using GeoJSON.Net.Geometry;

namespace GISWebService.Common
{
    /// <summary>
    /// 墨卡托坐标转换(经纬度与米之间互转)
    /// </summary>
    public class MercatorCoordinatesConverter
    {
        /// <summary>
        /// 经纬度转Web墨卡托(单位:米)
        /// </summary>
        /// <param name="longitude">经度</param>
        /// <param name="latitude">纬度</param>
        /// <returns>转换后的位置</returns>
        public static Position Degree2WebMercatorMeter(double longitude, double latitude)
        {
            var xValue = longitude * 20037508.34 / 180;
            var y = Math.Log(Math.Tan((90 + latitude) * Math.PI / 360)) / (Math.PI / 180);
            var yValue = y * 20037508.34 / 180;
            return new Position(xValue, yValue);
        }

        /// <summary>
        /// 经纬度转World墨卡托(单位:米)
        /// </summary>
        /// <param name="longitude">经度</param>
        /// <param name="latitude">纬度</param>
        /// <returns>转换后的位置</returns>
        public static Position Degree2WorldMercatorMeter(double longitude, double latitude)
        {
            const int radius = 6378137;
            const double minorRadius = 6356752.314245179;

            const double d = Math.PI / 180;
            const double r = radius;
            var y = latitude * d;
            const double tmp = minorRadius / r;
            double e = Math.Sqrt(1 - tmp * tmp),
                con = e * Math.Sin(y);

            var ts = Math.Tan(Math.PI / 4 - y / 2) / Math.Pow((1 - con) / (1 + con), e / 2);
            y = -r * Math.Log(Math.Max(ts, 1E-10));

            var xValue = longitude * d * r;
            var yValue = y;

            return new Position(xValue, yValue);
        }

        /// <summary>
        /// Web墨卡托转经纬度
        /// </summary>
        /// <param name="x">X坐标值(单位:米)</param>
        /// <param name="y">Y坐标值(单位:米)</param>
        /// <returns>转换后的位置</returns>
        public static Position WebMercatorMeter2Degree(double x, double y)
        {
            var xValue = x / 20037508.34 * 180;
            var yValue = y / 20037508.34 * 180;
            yValue = 180 / Math.PI * (2 * Math.Atan(Math.Exp(yValue * Math.PI / 180)) - Math.PI / 2);
            var longitude = xValue;
            var latitude = yValue;
            return new Position(longitude, latitude);
        }
    }
}
GIS入门,WGS84坐标如何转换为墨卡托投影坐标,以及球面墨卡托投影公式介绍 WGS84坐标系:WGS84是一种地理坐标系统,用于描述地球表面上的位置。它使用经度和纬度来表示位置,以度为单位。WGS84坐标系是一种球面坐标系,用于直接表示地球上的点的位置。墨卡托投影坐标:墨卡托投影是一种地图投影方法,用于将地球表面上的经纬度坐标投影到平面上。墨卡托投影将地球上的点投影到一个平面上的直角坐标系,通常使用x和y坐标来表示。墨卡托投影坐标通常用于地图制作和导航等应用中。 阅读详情

相关推荐

墨卡托投影C#算法实现

墨卡托投影C#算法实现 http://blog.youkuaiyun.com/guanghua2009/article/details/6641548

地理、Mercator(墨卡托)、UTM 之间关系

坐标为"地理(geographics)"形式或者说是" 纬度(latitude)/经度(longitude)"形式的数据非常常见。 与Mercator(墨卡托)、UTM(通用横轴墨卡托)、Stateplane中的坐标不同,地理坐标不是笛卡尔平面坐标(Cartesian coordinates)

qiaobing1226的博客 2075

行为验证码 AJ-Captcha 使用文档

AJ-Captcha验证码系统集成指南:需添加captcha-spring-boot-starter和Redis依赖,配置Redis连接。核心实现包括Redis缓存服务类CaptchaCacheRedisImpl(含设置、查询、删除验证码等方法)、SPI配置文件及Spring Boot配置类(配置验证码属性和Redis模板)。系统支持验证码生成、校验、防刷等安全功能,适用于Web应用安全验证场景。

千层冷面的博客 2119

经纬度和墨卡托转换

经纬度和墨卡托互相转换方法请参考链接: //经纬度转墨卡托 publicVector2DlonLat2Mercator(Vector2DlonLat) { Vector2Dmercator=newVector2D(); doublex=lonLat.X*20037508.34/180; doubley=Math.Log(Math.Tan((90+lo...

cjcjcjcj1234567890的博客 1712

海康威视VS互联网大厂:薪资、福利、工作强度全方位对比

本文全面对比了海康威视与互联网大厂在薪资、福利和工作强度等方面的差异。海康威视提供稳定的薪资结构和较低的工作强度,适合追求专业深度的职场人;而互联网大厂则以高薪和快速成长吸引人才,但工作压力较大。文章还分析了职业发展路径和长期价值,帮助求职者做出明智选择。

weixin_29171129的博客 391

RPCA模型及GoDec算法

一、基础知识 在线性代数中,秩的物理意义是矩阵中最大的不相关的向量个数,因此秩可以用来度量相关性;而在图像处理中,秩就可以理解为图像中所包含的信息的丰富程度。图片中比较突兀的成分,会增加图像矩阵的秩,一幅清晰的自然图像其数据矩阵往往是低秩或者近似低秩的,这是因为其中的图像信息有很大的相关性,但如果图像中引入噪声,那么存在随机幅值任意大但是分布稀疏的误差破坏了原有数据的低秩性。 低秩矩阵:如果AAA是一个m×nm×nm×n的矩阵,rank(A)rank(A)rank(A)是矩阵AAA的秩,如果rank(A)

小席的学习日志 7690

墨卡托坐标以及和经纬度坐标的转换

提示:以下是本篇文章正文内容,下面案例可供参考。

qq_49973861的博客 5039

黑猫带你学eMMC协议第26篇:eMMC的硬件复位操作(H/W reset)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 概述 什么是硬件复位? 硬件复位就是使用一个特殊硬件信号(这个信号在RST_n这根实实在在的物理线路上传输)将emmc复位到pre-idle state,而不需要使用cmd0或者power cycle讲emmc复位到pre-idle state。 如何进行硬件复位? 1、设置RST_n_FUNCTION [162]为1,使emm.

黑猫奥利奥的博客 6319

【经纬度坐标系、墨卡托投影坐标系和屏幕坐标系转换详解】

原点:经纬度坐标系的原点是位于赤道和格林威治子午线交点的位置,即(0°, 0°)。定义:经纬度坐标系是最常见的地理坐标系统,其中经度(longitude)范围是-180°到+180°,纬度(latitude)范围是-90°到+90°。坐标轴:经度值从西向东递增,纬度值从南向北递增。符号表示(lon, lat)。+---+---+| | || | |+---+---+🥳🥳🥳现在,我们在本教程中,您学习了不同坐标系之间的转换涉及到几何变换和数学运算。

vor234的博客 7495

用一组可复现实验讲清 ABAP 内表 Standard / Sorted / Hashed 的性能差异

摘要(150字): SAP项目中性能问题常源于ABAP内表选型不当。标准表(STANDARD TABLE)写入快但查找慢(线性扫描),适合遍历场景;排序表(SORTED TABLE)保持有序,支持二分查找,适合范围查询;哈希表(HASHED TABLE)基于唯一键实现常数级查找,适合高频精确匹配。实验表明:标准表+BINARY SEARCH需预排序,成本可能高于直接使用排序表;哈希表在键匹配时性能最优。Gateway和RAP场景中,内表选型直接影响接口响应,建议根据读写负载(追加/遍历/精确查找)选择对应类

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 203

【QCA6174】QCA6174 DFS认证的时候会有概率信道不会跳转的情况,通常跳转成功概率只有25%问题分析及解决方案

Master设备需要测试的项目。

wgl307293845的博客 753

经纬度/墨卡托坐标互转

经纬度/墨卡托坐标转换

风如白话的博客 1214

【项目实战】SOVD协议(面向服务的车辆诊断协议)

此外,AUTOSAR组织将SOVD部分内容的软件实现定义在了R22-11及以上版本的AUTOSAR Adaptive规范中,还支持动态发现车内诊断功能、获取高性能计算机(HPC)的Log信息等新的诊断需求,更符合当前软件定义汽车概念下的行业趋势。而SOVDGateway作为边缘节点,也肩负着对SOVD Client进行认证以及权限控制的责任,从而保证车辆的信息安全。相较于传统的UDS(Unified Diagnostic Services)协议,SOVD不仅保留了传统的读写数据、例程控制、故障读取等功能,

奶爸的编程之路,也就一周冷个三天 1905

坐标转换:墨卡托 & 经纬度

var lonlat={x:114.514864,y:38.04232};var mercator={x:12747736.346966475,y:4585405.935084799};//经纬度转墨卡托function lonlat2mercator(lonlat){var mercator={x:0,y:0};var x = lonlat.x *20037508.34/180;var y = ...

weixin_30323631的博客 268

DDR5 输入时钟抖动规范全解析!技术宅必看

简单说,时钟抖动就是时钟信号边沿的“颤抖”——信号本来应该在某个固定时间跳变,但实际时刻可能会前后波动。这种波动可能是随机的,也可能是确定性的。随机抖动(Random Jitter, Rj):符合高斯分布,像是你家猫咪不经意的晃动。确定性抖动(Deterministic Jitter, Dj):受限于特定周期或模式,像是邻居装修时的规律敲击声。⚠️ 注意,如果时钟抖动超出规格,DDR5可能无法正确接收或发送数据,内存错误、系统崩溃可就跟着来了!

weixin_43199439的博客 392

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

用Godot引擎构建城市数字孪生:从游戏开发到交互式可视化

数字孪生技术通过创建物理实体的虚拟映射,实现对复杂系统的模拟、分析与优化。其核心原理在于数据驱动与实时交互,将多源异构数据融合为统一的可视化模型。这项技术在智慧城市、工业仿真等领域具有重要价值,能够提升规划决策效率与公共参与度。应用场景涵盖城市规划、交通管理、环境监测等,通过交互式界面让抽象数据变得直观可感。本文以朗塞斯顿市项目为例,深入探讨如何利用免费开源的Godot游戏引擎,实现低成本、高效率的城市数字孪生构建,涉及数据导入、场景构建、性能优化等关键环节,并分享了**Godot道路插件**的实践应用与*

weixin_30666401的博客 341

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

墨卡托和经纬度坐标互相转换

public class Point {     private double x;     private double y;     public double getX() {         return x;     }     public void setX(double x) {         this.x = x;     }    

悟道的博客 9468

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

经纬度与墨卡托坐标转化

处理经纬度数据时,经常需要计算欧式空间下的若干特征,比如长度、距离、角度等。本文介绍经纬度与墨卡托坐标系下的两两转换。 import math #经纬度转墨卡托坐标 def ls(lng,lat): # list=ll_wl.split(',') lat=float(lat) lng=float(lng) x = lng* 20037508.34 / 180 y = math.log(math.tan((90 + lat) * math.pi / 360)).

Rain 5545

经纬度坐标转墨卡托坐标

经纬度坐标转墨卡托坐标 /** * 经纬度坐标转墨卡托坐标 * @param {经度(角度值)} longitude * @param {维度(角度值)} latitude */ // 墨卡托坐标系:展开地球,赤道作为x轴,向东为x轴正方,本初子午线作为y轴,向北为y轴正方向。 // 数字20037508.34是地球赤道周长的一半:地球半径6378137米,赤道周长2*PI*r = 2 * 20037508.3427892,墨卡托坐标x轴区间[-20037508.3427892,20037508.

qq_28918357的博客 2707

墨卡托坐标以及墨卡托坐标转经纬度

墨卡托坐标以及墨卡托坐标转经纬度

danshiming的博客 3754

将墨卡托投影(Transverse Mercator Projection)转换为地理坐标(经纬度)

格式的地图数据【其他格式的数据也可以转换,只要存在地理参考(geoReference)信息即可】,可以通过。

weixin_44866291的博客 2439

墨卡托坐标于百度经纬度坐标相互转换c#实现

public class MCObject { /// /// /// /// /// /// trueMC坐标转经纬度,false经纬度转MC坐标 public MCObject(double x, double y, bool OutLongitudeAndLat

如鹿渴慕泉水的专栏 3434

C#计算两个经纬度的距离

//地球半径,单位米 private const double EARTH_RADIUS = 6378137; /// <summary> /// 计算两点位置的距离,返回两点的距离,单位 米 /// 该公式为GOOGLE提供,误差小于0.2米 /// </summary> ...

weixin_30237281的博客 661

墨卡托坐标和经纬度坐标相互转换

//墨卡托转经纬度 function webMercator2lonLat(mercator) { var lonlat={x:0,y:0}; var x=mercator.x/20037508.34*180; var y=mercator.y/20037508.34*180; y=180/Math.PI *(2*Math...

D_bel的博客 5236

C# 墨卡托投影坐标与WGS84坐标转换

C# 墨卡托投影坐标与WGS84坐标转换

Gary Leong 1356

C#ProgNET4GeoAPI库坐标转换

首先安装这个库 stPosition sourPt = new stPosition(); stPosition destPt = new stPosition(); sourPt.X = SC.X; sourPt.Y = SC.Y; BJ54PrjToGeo(38, 114, sourPt, out destPt); 函数 /// <summary> /// 2000投影坐标转换为wgs84地理坐标 /// </summa...

鸣风 1249
上一篇: C#写WebAPI时的Response Body模型定义
下一篇: C++调用默认程序打开文件
acngiser
博客等级 码龄15年 118粉丝 214原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值