//计算的比例
var x4 = '31.060515451559638';
var y4 = '121.85861929760972';
var d1 = {x:481,y:334};
var d2 = {x:903,y:26};
var bl = getDistance(31.051878669835858,121.88823542629495,31.04110923834139,121.91168526936235)/distant(d1,d2);
var d4_1 = getDistance(31.051878669835858,121.88823542629495,x4,y4)
var d4_2 = getDistance(31.04110923834139,121.91168526936235,x4,y4)
var d4_3 = getDistance(31.027150463250678,121.87392325813505,x4,y4)
//获取平面第4个坐标
latlon(481,334,d4_1/bl,903,26,d4_2/bl,892,834,d4_3/bl);
//当前方法使用长方形验证,长4高3
//x1,y1为第1个点的坐标0,0
//x2,y2为第2个点的坐标0,3
//x3,y3为第3个点的坐标4,0
//x4,y4为第4个点,坐标未知
//已知第1个点距离第4个点5
//已知第2个点距离第4个点4
//已知第3个点距离第4个点3
//验证结果x4,y4坐标为x4=4,y4=3为正确
function latlon(x1,y1,d1,x2,y2,d2,x3,y3,d3) {
var a11 = 2 * (x1 - x3);
var a12 = 2 * (y1 - y3);
var b1 = Math.pow(x1, 2) - Math.pow(x3, 2)+ Math.pow(y1, 2) - Math.pow(y3, 2)+ Math.pow(d3, 2) - Math.pow(d1, 2);
var a21 = 2 * (x2 - x3);
var a22 = 2 * (y2 - y3);
var b2 = Math.pow(x2, 2) - Math.pow(x3, 2)+ Math.pow(y2, 2) - Math.pow(y3, 2)+ Math.pow(d3, 2) - Math.pow(d2, 2);
var d0 = (b1 * a22 - a12 * b2) / (a11 * a22 - a12 * a21);
var d1 = (a11 * b2 - b1 * a21) / (a11 * a22 - a12 * a21);
console.log(d0,d1);
//return {d0,d1};
}
//计算平面2点之间的距离
function distant(a,b){
let dx = Number(a.x) - Number(b.x)
let dy = Number(a.y) - Number(b.y)
return Math.pow(dx*dx + dy*dy, .5)
}
// 经纬度转换成三角函数中度分表形式。
function rad(d) {
return d * Math.PI / 180.0;
}
// 根据经纬度计算距离,参数分别为第一点的纬度,经度;第二点的纬度,经度
function getDistance(lat1, lng1, lat2, lng2) {
var radLat1 = rad(lat1);
var radLat2 = rad(lat2);
var a = radLat1 - radLat2;
var b = rad(lng1) - rad(lng2);
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378.137; // EARTH_RADIUS;
s = Math.round(s * 10000) / 10000; //输出为公里
var distance = s;
var distance_str = "";
if (parseInt(distance) >= 1) {
distance_str = distance.toFixed(1) + "km";
} else {
distance_str = distance * 1000 + "m";
}
//s=s.toFixed(4);
//console.info('lyj 距离是', s * 1000);
//console.info('lyj 距离是', distance_str);
return s * 1000;
}