C#实现墨卡托投影坐标系经纬度与米制单位之间的互转
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 / ;
var y = Math.Log(Math.Tan(( + latitude) * Math.PI / )) / (Math.PI / );
var yValue = y * 20037508.34 / ;
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 = ;
const double minorRadius = 6356752.314245179; const double d = Math.PI / ;
const double r = radius;
var y = latitude * d;
const double tmp = minorRadius / r;
double e = Math.Sqrt( - tmp * tmp),
con = e * Math.Sin(y); var ts = Math.Tan(Math.PI / - y / ) / Math.Pow(( - con) / ( + con), e / );
y = -r * Math.Log(Math.Max(ts, 1E-)); 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 * ;
var yValue = y / 20037508.34 * ;
yValue = / Math.PI * ( * Math.Atan(Math.Exp(yValue * Math.PI / )) - Math.PI / );
var longitude = xValue;
var latitude = yValue;
return new Position(longitude, latitude);
}
}
}
代码原文连接 https://blog.csdn.net/a_dev/article/details/80990492
C#实现墨卡托投影坐标系经纬度与米制单位之间的互转的更多相关文章
- [转]墨卡托投影坐标系(Mercator Projection)原理及实现C代码
墨卡托投影是一种“等角正切圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体 ...
- 墨卡托投影坐标系(Mercator Projection)原理及实现C代码
墨卡托投影是一种"等角正切圆柱投影",荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面 ...
- js不同地图坐标系经纬度转换(天地图,高德地图,百度地图,腾讯地图)
1.js转换代码 1 //转换常数 2 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 3 var pi = 3.14159265358979324; ...
- 经纬度转换为距离单位km的方法
function rad(d){ return d * Math.PI /180.0; }; GetDistance(lat1, lng1, lat2, lng2){ var radLat1 =rad ...
- line-height不同单位之间的区别
line-height用来设置元素的行高. 该属性会影响行框的布局.在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最大距离. line-height 与 font-size 的计算值 ...
- 比特(bit)、字,字节(B)存储单位之间的关系+其与操作系统位数的关系+不同编译器编译方式下数据类型的表示范围
1.在表示网络传输速度中与表示存储单位的不同: 表示存储单位时:1kB=1024B,但在网络中表示传输速度是1KB=1000B 2.下面介绍表示存储单位时的关系及其与操作系统位数的关系: 1B=8bi ...
- OpenStreetMap、googleMap等经纬度和行列号之间相互转化
# OpenStreetMap经纬度转行列号 def deg2num(lat_deg, lon_deg, zoom): lat_rad = math.radians(lat_deg) n = 2.0 ...
- OpenStreetMap、googleMap等经纬度和行列号之间相互转化(python,JavaScript,php,Java,C#等)
python: # OpenStreetMap经纬度转行列号 def deg2num(lat_deg, lon_deg, zoom): lat_rad = math.radians(lat_deg) ...
- 【学习笔记】比特(bit)、字,字节(B)存储单位之间的关系+其与操作系统位数的关系+不同编译器编译方式下数据类型的表示范围
1.在表示网络传输速度中与表示存储单位的不同: 表示存储单位时:1kB=1024B,但在网络中表示传输速度是1KB=1000B 2.下面介绍表示存储单位时的关系及其与操作系统位数的关系: 1B=8bi ...
随机推荐
- ios 点击Home问题
应用可以在后台运行或者挂起,该场景的状态跃迁过程见图2-22,共经历3个阶段4个状态:Active → Inactive → Background→Suspended. q 在Active→Ina ...
- AndroidDriver原理初步--Android自动化测试学习历程
章节:自动化基础篇——AndroidDriver原理初步(第六讲) 主要讲解内容及笔记: 一.AndroidDriver核心原理 对上图的解析: PC端的端口通过adb,将android版的Remot ...
- runloop - CFRunLoopObserverRef
1.
- 一种管理z-index属性的方案
原文在这里:http://www.smashingmagazine.com/2014/06/12/sassy-z-index-management-for-complex-layouts/ 核心思想是 ...
- oracle查找特定表的引用
select * from user_source t where upper(t.TEXT) like upper('%table1%') 第二种方法类似于eclipse中的file search ...
- 安全运维 -- Linux服务器使用公私钥密匙证书登录
环境:Ubuntu 16 前言 黑客遍地都是,ssh/pop3/ftp等爆破工具的流行让站长的日常运维工作量大大加重.Metasplot,Bruter等工具更是针对以上协议有专门 的破解方法,有字典破 ...
- mysql索引提高查询速度
使用索引提高查询速度 1.前言 在web开发中,业务模版,业务逻辑(包括缓存.连接池)和数据库这三个部分,数据库在其中负责执行SQL查询并返回查询结果,是影响网站速度最重要的性能瓶颈.本文主要针对My ...
- Codeforces C. NP-Hard Problem 搜索
C. NP-Hard Problem time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- CreateMutex用法
1. CreateMutex只是创建了一把锁, 这把锁你用来锁门还是锁抽屉还是锁你对象的内裤都由你自己决定. 2. lpName是指定这把锁的名字. 你要不给这把锁取个名字都可以. 只是有了相 ...
- abort: no username supplied (see "hg help config")
abort: no username supplied (see "hg help config") 在hg中输入commit 指令时,如果出现下述结果: $ hg commit ...