地球经纬度坐标和距离的关系换算

js代码中,let/var 表示变量,系统自动推断变量类型。let x = 3,相当于 c语言的 int x = 3;

1米距离对应的经纬度度数:

// 子午线 周长 40,009km
// 1 米 对应的经度数

  latitudeDegreesFor1Meter() {
    return 1.0/(40009000/360.0)
  },

// 赤道周长 40,076km
// 1 米 对应的纬度数

  longitudeDegreesFor1Meter() {
    return 1.0/(40076000/360.0)
  },
1度对应的距离-米

// 子午线 周长 40,009km
// 1 经度数 对应的 米数

  metersFor1latitudeDegrees() {
    return 40009000/360.0
  },

// 赤道周长 40,076km
// 1 纬度数 对应的

  metersFor1longitudeDegrees() {
    return 40076000/360.0
  },

两个地理坐标点之间距离换算

// 传入坐标,返回距离,单位 米
// 仅适合不跨越 东西、南北半球的两个坐标

  distance(fromLat, fromLng, toLat, toLng) {
    let fromLatNum = util.getNumber(fromLat)  // fromLat 可能是string,或number或其他类型。util.getNumber()确保它是number,或NaN
    let fromLngNum = util.getNumber(fromLng)
    let toLatNum = util.getNumber(toLat)
    let toLngNum = util.getNumber(toLng)
    let distance = -1
    if(isNaN(fromLatNum) || isNaN(fromLngNum) || isNaN(toLatNum) || isNaN(toLngNum)) {
    }else {
      let meters_lat = Math.abs((toLatNum - fromLatNum)*this.metersFor1latitudeDegrees())
      let meters_lng = Math.abs((toLngNum - fromLngNum)*this.metersFor1longitudeDegrees())
      let pow_lat = Math.pow(meters_lat, 2)
      let pow_lng = Math.pow(meters_lng, 2)
      distance = Math.sqrt(pow_lat + pow_lng)
      distance = Math.ceil(distance)
    }
    return distance
  },

备注:计算坐标点距离时,必须先在经度线和纬度线方向分别计算距离,得到以米为单位的边长,再利用勾股定理计算斜边长。
如果你拿经度差和纬度差直接求斜边‘度数’,那这个‘度数’是没有意义的,因为经度一度和纬度一度它的长度是不同的,你直接求出的斜边‘度数’是按经度,还是纬度换算长度呢?(举例说,你经度差是3度,纬度差是4度,斜边就是5‘度’,但斜边这个‘度’是没有定义,没有意义的,因为两个直角边的单位不一样,一个是经度一个是纬度;)。当然,经纬度每一度代表的距离,差距也不算太大。再加上地球是圆的,我们构造的‘三角形’,实际上两条斜边都是地球的弧,所以计算结果也没那么精确。

你可能感兴趣的:(地球经纬度坐标和距离的关系换算)