1. using System;
  2. using GeoJSON.Net.Geometry;
  3.  
  4. namespace GISWebService.Common
  5. {
  6. /// <summary>
  7. /// 墨卡托坐标转换(经纬度与米之间互转)
  8. /// </summary>
  9. public class MercatorCoordinatesConverter
  10. {
  11. /// <summary>
  12. /// 经纬度转Web墨卡托(单位:米)
  13. /// </summary>
  14. /// <param name="longitude">经度</param>
  15. /// <param name="latitude">纬度</param>
  16. /// <returns>转换后的位置</returns>
  17. public static Position Degree2WebMercatorMeter(double longitude, double latitude)
  18. {
  19. var xValue = longitude * 20037508.34 / ;
  20. var y = Math.Log(Math.Tan(( + latitude) * Math.PI / )) / (Math.PI / );
  21. var yValue = y * 20037508.34 / ;
  22. return new Position(xValue, yValue);
  23. }
  24.  
  25. /// <summary>
  26. /// 经纬度转World墨卡托(单位:米)
  27. /// </summary>
  28. /// <param name="longitude">经度</param>
  29. /// <param name="latitude">纬度</param>
  30. /// <returns>转换后的位置</returns>
  31. public static Position Degree2WorldMercatorMeter(double longitude, double latitude)
  32. {
  33. const int radius = ;
  34. const double minorRadius = 6356752.314245179;
  35.  
  36. const double d = Math.PI / ;
  37. const double r = radius;
  38. var y = latitude * d;
  39. const double tmp = minorRadius / r;
  40. double e = Math.Sqrt( - tmp * tmp),
  41. con = e * Math.Sin(y);
  42.  
  43. var ts = Math.Tan(Math.PI / - y / ) / Math.Pow(( - con) / ( + con), e / );
  44. y = -r * Math.Log(Math.Max(ts, 1E-));
  45.  
  46. var xValue = longitude * d * r;
  47. var yValue = y;
  48.  
  49. return new Position(xValue, yValue);
  50. }
  51.  
  52. /// <summary>
  53. /// Web墨卡托转经纬度
  54. /// </summary>
  55. /// <param name="x">X坐标值(单位:米)</param>
  56. /// <param name="y">Y坐标值(单位:米)</param>
  57. /// <returns>转换后的位置</returns>
  58. public static Position WebMercatorMeter2Degree(double x, double y)
  59. {
  60. var xValue = x / 20037508.34 * ;
  61. var yValue = y / 20037508.34 * ;
  62. yValue = / Math.PI * ( * Math.Atan(Math.Exp(yValue * Math.PI / )) - Math.PI / );
  63. var longitude = xValue;
  64. var latitude = yValue;
  65. return new Position(longitude, latitude);
  66. }
  67. }
  68. }

代码原文连接 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. 【校招面试 之 剑指offer】第10-2题 青蛙跳台阶问题

    题目1:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个n级台阶共有多少种跳法? 题目2:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶...也可以一次跳n级台阶.求该青蛙跳上一个 ...

  2. StringUtils学习

    commons-lang3-3.5.jar

  3. Sql自定义表类型批量导入数据

    -- 创建自定义表类型 CREATE TYPE [dbo].[App_ProductTable] AS TABLE( [p_name] [varchar](50) NOT NULL, [p_audio ...

  4. jps 命令详解

    jps 命令详解 jps 是 jdk 提供的一个查看当前 java 进程的小工具, 可以看做是 JavaVirtual Machine Process Status Tool 的缩写.非常简单实用. ...

  5. 《JavaScript DOM编程艺术》笔记

    1. 把<script>标签放到HTML文档的最后,<body>标签之前能使浏览器更快地加载页面. 2. nodeType的常见取值 元素节点(1) 属性节点(2) 文本节点( ...

  6. struts2值栈ValueStack中都有哪些东西?

    com.opensymphony.xwork2.dispatcher.HttpServletRequest application com.opensymphony.xwork2.dispatcher ...

  7. Monte carlo

    转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...

  8. ubuntu14.04 Samba服务无法访问 可能没有权限 指定的网络名不再可用的问题

    按常规配置后,在windows资源管理器中登陆samba服务器,看得到分享目录却无法打开,弹出"无法访问.您可能没有权限使用网络资源,请与这台服务器的管理员联系以查明您是否有访问权限.指定的 ...

  9. python之零碎知识

    一 join方法 主要是做字符串的拼接:join后面跟的类型必须是要可迭代得到对象 for循环的对象是可迭代对象 # result = "".join(li) # print(re ...

  10. Navicat for oracle cannot load OCI DLL

    Navicat for oracle 提示 cannot load OCI DLL87,126,193 instant client package is required for basic and ...