gpt4 book ai didi

javascript - 用 n 个 gps 坐标测量区域

转载 作者:行者123 更新时间:2023-11-30 17:21:10 25 4
gpt4 key购买 nike

我需要能够使用 javascript/jquery 测量具有 n 个 gps 坐标的区域。我找不到使用 javascript 或使用 n 个坐标完成此操作的方法,所以我决定问问是否有人知道该怎么做?

一个例子是我有 6 个单独的纬度/经度坐标,我需要用它们来测量它们的面积(以平方米为单位)。

有什么帮助吗? :)

最佳答案

此解决方案仅适用于由纬度/经度点形成的凸多边形。大部分工作是按逆时针顺序重新排列纬度/经度点。重新排序完成后,您可以轻松找到不规则多边形的面积。

//make sure to add the first term to the end of both arrays

// ---------------SAME---------------
// | |
var lats = [25.767368, 34.088808, 40.727093, 25.767368];
// | |
var lons = [-80.18930, -118.40612, -73.97864, -80.18930];

//get the average center point of the polygon
var lats_sum = 0;
var lons_sum = 0;

for (var i=lats.length; i--;) {
lats_sum += lats[i];
lons_sum += lons[i];
}

var lat_origin = lats_sum / lats.length;
var lon_origin = lons_sum / lons.length;

//translate origin to (0,0) by shifting lat lons
//and calculate the standard angle of the point
var angles = new Array(lats.length);

for (var j=lats.length; j--;) {
lats[j] -= lat_origin;
lons[j] -= lon_origin;

if (lons[j] >= 0 && lats[j] >= 0) {
angles[j] = Math.abs(Math.atan(lats[j]/lons[j]) * 180 / Math.PI);
} else if (lons[j] < 0 && lats[j] >= 0) {
angles[j] = 90 + Math.abs(Math.atan(lats[j]/lons[j]) * 180 / Math.PI);
} else if (lons[j] < 0 && lats[j] < 0) {
angles[j] = 180 + Math.abs(Math.atan(lats[j]/lons[j]) * 180 / Math.PI);
} else if (lons[j] >= 0 && lats[j] < 0) {
angles[j] = 270 + Math.abs(Math.atan(lats[j]/lons[j]) * 180 / Math.PI);
}
}

//re-arrange the points from least to greatest angle
var cur_ang, cur_lat, cur_lon;

for (var l = 0; l < angles.length; l++) {
for (var k = 0; k < angles.length - 1; k++) {
cur_ang = angles[k];
cur_lat = lats[k];
cur_lon = lons[k];

if (cur_ang < angles[k+1]) {
angles[k] = angles[k+1];
lats[k] = lats[k+1];
lons[k] = lons[k+1];

angles[k+1] = cur_ang;
lats[k+1] = cur_lat;
lons[k+1] = cur_lon;
}
}
}

//calculate area for irregular polygon
var sum1 = 0;
var sum2 = 0;

for (var t = 0; t < lats.length; t++) {

if (t != lats.length - 1) {

sum1 += lats[t] * lons[t+1];
sum2 += lons[t] * lats[t+1];

} else {

sum1 += lats[t] * lons[0];
sum2 += lons[t] * lats[0];

}
}

var area = (sum1 - sum2) / 2.0;

console.log("Area: " + area);

然后,当涉及到将经纬度面积转换为平方米时,我就不知道了。这是我在网上找到的一个功能,可以帮助您入门。

// Use to convert from lat long dist to meters
function measure(lat1, lon1, lat2, lon2){ // generally used geo measurement function
var R = 6378.137; // Radius of earth in KM
var dLat = (lat2 - lat1) * Math.PI / 180;
var dLon = (lon2 - lon1) * Math.PI / 180;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d * 1000; // meters
}

关于javascript - 用 n 个 gps 坐标测量区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25122185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com