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‘度’,但斜边这个‘度’是没有定义,没有意义的,因为两个直角边的单位不一样,一个是经度一个是纬度;)。当然,经纬度每一度代表的距离,差距也不算太大。再加上地球是圆的,我们构造的‘三角形’,实际上两条斜边都是地球的弧,所以计算结果也没那么精确。
网友评论