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. 查看CPU序列号以及系统信息

    CPU序列号  wmic cpu get processorid  现在也不唯一,比如联想同款机器,因为CPU批量生产,id也是一样 操作系统信息   systeminfo 查看硬件信息   dxdi ...

  2. [leetcode]689. Maximum Sum of 3 Non-Overlapping Subarrays三个非重叠子数组的最大和

    In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. E ...

  3. 配置静态IP

    网卡配置静态IP地址编辑文件/etc/network/interfaces:sudo vi /etc/network/interfaces并用下面的行来替换有关eth0的行:# The primary ...

  4. Linux系统 SecureCRT SecureFX 注册破解方法

    1.创建脚本文件crack-binary.sh,内容如下: #!/bin/sh        cd $1  cat SecureCRT  | od -A n -v -t x1 | tr -d ' \n ...

  5. 练习并熟练掌握交互式 SQL 语言

    哈工大数据库系统 实验:练习并熟练掌握交互式 SQL 语言   实验目的:基于给定的 OrderDB 数据库, 练习并熟练掌握交互式 SQL 语言实验环境:sql sever 2008 附:Order ...

  6. Python使用wxPython、py2exe编写桌面程序-乾颐堂

    Python是支持可视化编程,即编写gui程序,你可以用它来编写自己喜欢的桌面程序.使用wxPython来做界面非常的简单,只是不能像C#一样拖动控件,需要自行写代码布局.在完成编写之后,由于直接的p ...

  7. 6. Manage the driver for browser and the script for Hub

  8. Phantomjs 生成多页PDF

    开篇 最近使用 Phantomjs 生成PDF,其中遇到一些问题,导致PDF生成失败,如出现空白文件或一页数据量太大,都是由于没有设置好格式导致.特别是分页问题,感觉资料很少,除了在 StackOve ...

  9. kbmMWEncodeEscapes 中汉字编码的问题及解决办法

    kbmMWEncodeEscapes 是kbmmw 里面的一个函数,用来对URL 中的汉字进行编码,例如 http://127.0.0.1/getname?name=春节,由于'春节'是汉字,浏览器向 ...

  10. 2018.09.14 洛谷P3567 [POI2014]KUR-Couriers(主席树)

    传送门 简单主席树啊. 但听说有随机算法可以秒掉%%%(本蒟蒻并不会) 直接维护值域内所有数的出现次数之和. 当这个值不大于区间总长度的一半时显然不存在合法的数. 这样在主席树上二分查值就行了. 代码 ...