azimuthUtils
项目源码链接如下:Gitee项目链接
介绍
利用经纬度坐标,求解方位角【JS实现】
安装教程
本实现只用到了一个库 Threejs,Threejs主要用于实现3D场景,本实现利用Three.js中的一些工具类,进行数据转换
安装Threejs
npm install three --save
使用案例
//引入Threrjs
const THREE=require('three') //npm install three --save
// import * as THREE from 'three'
//用例数据
var lonlat0 = [ 34.80770804146611, 113.55585694313051] //参照点
var lonlat1 = [ 34.807743270320515, 113.55691373348238] //东
var lonlat2 = [ 34.807139974109454, 113.55676352977753] //东南
var lonlat3 = [ 34.807003461215416, 113.55584621429445] //南
var lonlat4 = [ 34.807126763194105, 113.55516493320467] //西南
var lonlat5 = [ 34.80772125228826,113.5548484325409] //西
var lonlat6 = [34.80861958322779, 113.55479478836061] //西北
var lonlat7 = [ 34.80863719746204,113.55581402778627] //北
var lonlat8 = [ 34.80850949417833, 113.5569351911545] //东北
// lon1经度 lat纬度
//lonlat1 坐标1
//lonlat2 坐标2
function azimuth(lonlat1, lonlat2) {
var lon1=THREE.MathUtils.degToRad(lonlat1[1])
var lat1=THREE.MathUtils.degToRad(lonlat1[0])
var lon2=THREE.MathUtils.degToRad(lonlat2[1])
var lat2=THREE.MathUtils.degToRad(lonlat2[0])
if(lon1==lon2){
if (lat2 >= lat1){
return 0
}else{
return 180
}
}
if (lat1 == lat2){
if(lon2 > lon1 ){
return 90
}else if(lon2 < lon1){
return 270
}
}
var a = THREE.Math.radToDeg(Math.atan((lon2 - lon1) * Math.cos(lat2) / (lat2 - lat1)))
if(lat2 > lat1){
if(lon2 > lon1){
return a
}else{
return a + 360
}
}else{
return a + 180
}
}
console.log("东",azimuth(lonlat0, lonlat1) )
console.log("东南",azimuth(lonlat0, lonlat2) )
console.log("南",azimuth(lonlat0, lonlat3) )
console.log("西南",azimuth(lonlat0, lonlat4) )
console.log("西",azimuth(lonlat0, lonlat5) )
console.log("西北",azimuth(lonlat0, lonlat6) )
console.log("北",azimuth(lonlat0, lonlat7) )
console.log("东北",azimuth(lonlat0, lonlat8) )
执行该程序
node .\index2.js
方位坐标系参照如下
结果如下
东 87.67505557361658
东南 127.34881807813873
南 180.7163204119453
西南 224.34785264592313
西 270.91401595485104
西北 316.26689801310204
北 357.8282236159254
东北 47.8461480246868