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#实现墨卡托投影坐标系经纬度与米制单位之间的互转的更多相关文章

  1. [转]墨卡托投影坐标系(Mercator Projection)原理及实现C代码

    墨卡托投影是一种“等角正切圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体 ...

  2. 墨卡托投影坐标系(Mercator Projection)原理及实现C代码

    墨卡托投影是一种"等角正切圆柱投影",荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面 ...

  3. js不同地图坐标系经纬度转换(天地图,高德地图,百度地图,腾讯地图)

    1.js转换代码 1 //转换常数 2 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 3 var pi = 3.14159265358979324; ...

  4. 经纬度转换为距离单位km的方法

    function rad(d){ return d * Math.PI /180.0; }; GetDistance(lat1, lng1, lat2, lng2){ var radLat1 =rad ...

  5. line-height不同单位之间的区别

    line-height用来设置元素的行高. 该属性会影响行框的布局.在应用到一个块级元素时,它定义了该元素中基线之间的最小距离而不是最大距离. line-height 与 font-size 的计算值 ...

  6. 比特(bit)、字,字节(B)存储单位之间的关系+其与操作系统位数的关系+不同编译器编译方式下数据类型的表示范围

    1.在表示网络传输速度中与表示存储单位的不同: 表示存储单位时:1kB=1024B,但在网络中表示传输速度是1KB=1000B 2.下面介绍表示存储单位时的关系及其与操作系统位数的关系: 1B=8bi ...

  7. OpenStreetMap、googleMap等经纬度和行列号之间相互转化

    # OpenStreetMap经纬度转行列号 def deg2num(lat_deg, lon_deg, zoom): lat_rad = math.radians(lat_deg) n = 2.0 ...

  8. OpenStreetMap、googleMap等经纬度和行列号之间相互转化(python,JavaScript,php,Java,C#等)

    python: # OpenStreetMap经纬度转行列号 def deg2num(lat_deg, lon_deg, zoom): lat_rad = math.radians(lat_deg) ...

  9. 【学习笔记】比特(bit)、字,字节(B)存储单位之间的关系+其与操作系统位数的关系+不同编译器编译方式下数据类型的表示范围

    1.在表示网络传输速度中与表示存储单位的不同: 表示存储单位时:1kB=1024B,但在网络中表示传输速度是1KB=1000B 2.下面介绍表示存储单位时的关系及其与操作系统位数的关系: 1B=8bi ...

随机推荐

  1. 安装tftp服务器进行文件传输

    1. 安装: sudo apt-get install tftp-hpa tftpd-hpa ps: tftpd是服务器,tftp是客户端,客户端能发送和获取,服务器不能动. 2. 配置文件: sud ...

  2. C++中纯虚函数

    1.纯虚函数 virtual ReturnType Function()= 0; 纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义.凡是含有纯虚函数的类叫做抽象类 ...

  3. Extjs面板和布局初探

    面板相当于一张干净的白纸,如果直接在上面添加内容,将很难控制面板中内容的显示位置,面板元素越多就越显得凌乱,所以需要在面板上划分不同的区域,将面板内容展示到希望的位置上.ExtJS通过提供多种布局类来 ...

  4. access数据库收缩(压缩)

    一般是因为表中有大量没用的数据,把没用的数据全部删除 菜单栏的“工具”——“数据库实用工具”——“压缩和修复数据库” OK啦

  5. centos7 二进制安装包安装 mysql5.6

    centos7 二进制安装包安装 mysql5.6 一.下载mysql5.6二进制安装包 http://mirrors.sohu.com/mysql/MySQL-5.6/ 如:mysql-5.6.34 ...

  6. C#中int? 转换为 int 型

    用 “ var a= zongfen.Score;”

  7. tp5允许跨域

    header("Access-Control-Allow-Origin: *"); 放在命名空间之后

  8. 利用HBuilder打包前端开发webapp为apk

    转载 标签: apk / 打包 / vue 现在的前端开发可谓是,百花齐放啦,什么都可以做,只有想不到没有做不到的,今天就简单的介绍用vue,ng或者是react开发的单页应用如何打包为apk,在移动 ...

  9. app怎么测试性能

    性能测试一般来说 都是代码能力相对薄弱的测试人员 进阶的一个方向:但是当你成为一个真正的全栈人才的时候你就不得不学习代码: APP 或者安卓手机 或者iOS  一本测试他的性能的话都是采用:手机安装一 ...

  10. Android 编译参数 LOCAL_MODULE_TAGS

    此参数会影响到库生成后的存放位置,影响生成位置的应该是相关平台下的变量PRODUCT_PACKAGES http://blog.csdn.net/evilcode/article/details/64 ...