当前位置:   article > 正文

vue中经纬度与墨卡托投影坐标互转、地球坐标系(WGS-84)转火星坐标系_lonlattomercator

lonlattomercator
  1. const mapCommon = {}
  2. /**
  3.  * @description: 经纬度转墨卡托投影坐标
  4.  */
  5. mapCommon.lonlatTomercator = (lonlat, wkid) => {
  6.     const mercator = {
  7.       type'point',
  8.       spatialReference: {
  9.         wkid: wkid
  10.       },
  11.       x: 0,
  12.       y: 0
  13.     }
  14.     const x = parseFloat(lonlat.x) * 20037508.34 / 180
  15.     let y = Math.log(Math.tan((90 + parseFloat(lonlat.y)) * Math.PI / 360)) / (Math.PI / 180)
  16.     y = y * 20037508.34 / 180
  17.     mercator.x = x
  18.     mercator.y = y
  19.     return mercator
  20. }
  21. /**
  22.  * @description: 墨卡托投影坐标转经纬度坐标
  23.  */
  24. mapCommon.mercatorTolonlat = (mercator) => {
  25.     const lonlat = {
  26.       type'point',
  27.       x: 0,
  28.       y: 0
  29.     }
  30.     const x = parseFloat(mercator.x) / 20037508.34 * 180
  31.     let y = parseFloat(mercator.y) / 20037508.34 * 180
  32.     y = 180 / Math.PI * (2 * Math.atan(Math.exp(y * Math.PI / 180)) - Math.PI / 2)
  33.     lonlat.x = x
  34.     lonlat.y = y
  35.     return lonlat
  36. }
  37. /**
  38.  * @description: 墨卡托投影坐标转经纬度坐标
  39.  */
  40. mapCommon.mercatorExtentToGeoextent = (extent) => {
  41.     const Geoextent = {
  42.       xmax: 0,
  43.       xmin: 0,
  44.       ymax: 0,
  45.       ymin: 0
  46.     }
  47.     const xmax = extent.xmax / 20037508.34 * 180
  48.     let ymax = extent.ymax / 20037508.34 * 180
  49.     const xmin = extent.xmin / 20037508.34 * 180
  50.     let ymin = extent.ymin / 20037508.34 * 180
  51.     ymax = 180 / Math.PI * (2 * Math.atan(Math.exp(ymax * Math.PI / 180)) - Math.PI / 2)
  52.     ymin = 180 / Math.PI * (2 * Math.atan(Math.exp(ymin * Math.PI / 180)) - Math.PI / 2)
  53.     Geoextent.xmax = xmax
  54.     Geoextent.ymax = ymax
  55.     Geoextent.xmin = xmin
  56.     Geoextent.ymin = ymin
  57.     return Geoextent
  58. }
  59. /* 地球坐标系(WGS-84)转火星坐标系(GCJ) ---- 开始 ---- */ 
  60. const pi = 3.14159265358979324
  61. const a = 6378245.0
  62. const ee = 0.00669342162296594323
  63. /**
  64. * @description: 判断是否在国内,不在国内则不做偏移
  65.  */
  66. mapCommon.outOfChina = (lon, lat) => {
  67.     if ((lon < 72.004 || lon > 137.8347&& (lat < 0.8293 || lat > 55.8271)) {
  68.         return true
  69.     } else {
  70.         return false
  71.     }
  72. }
  73. mapCommon.transformLat = (x, y) => {
  74.   let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x))
  75.     ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0
  76.     ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0
  77.     ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0
  78.     return ret
  79. }
  80. mapCommon.transformLon = (x, y) => {
  81.   let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x))
  82.     ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0
  83.     ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0
  84.     ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0
  85.     return ret
  86. }
  87. mapCommon.transform = (wgLat, wgLon) => {
  88.     const mars_point = {lon: 0, lat: 0}
  89.     if (mapCommon.outOfChina(wgLat, wgLon)) {
  90.         mars_point.lat = wgLat
  91.         mars_point.lon = wgLon
  92.         return
  93.     }
  94.     let dLat = mapCommon.transformLat(wgLon - 105.0, wgLat - 35.0)
  95.     let dLon = mapCommon.transformLon(wgLon - 105.0, wgLat - 35.0)
  96.     const radLat = wgLat / 180.0 * pi
  97.     let magic = Math.sin(radLat)
  98.     magic = 1 - ee * magic * magic
  99.     const sqrtMagic = Math.sqrt(magic)
  100.     dLat = (dLat * 180.0/ ((a * (1 - ee)) / (magic * sqrtMagic) * pi)
  101.     dLon = (dLon * 180.0/ (a / sqrtMagic * Math.cos(radLat) * pi)
  102.     mars_point.lat = wgLat + dLat
  103.     mars_point.lon = wgLon + dLon
  104. }
  105. /* 地球坐标系(WGS-84)转火星坐标系(GCJ) ----结束---- */ 
  106. const x_pi = 3.14159265358979324 * 3000.0 / 180.0
  107. mapCommon.marsTobaidu = (mars_point) => {
  108.     const baidu_point = {lon: 0, lat: 0}
  109.     const x = mars_point.lon
  110.     const y = mars_point.lat
  111.     const z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi)
  112.     const theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi)
  113.     baidu_point.lon = z * Math.cos(theta) + 0.0065
  114.     baidu_point.lat = z * Math.sin(theta) + 0.006
  115.     return baidu_point
  116. }
  117. export default mapCommon

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/110013
推荐阅读
相关标签
  

闽ICP备14008679号