js计算 不规则区域的质心(坐标系)

417 阅读1分钟

业务说明

iShot2021-09-13 19.05.21.png

有多个坐标系组成的区域图,需要在区域中心标注区域名称

数据格式(坐标)

[[120.636804,31.424965],[120.641453,31.424861],[120.64131,31.421327],[120.637984,31.421504],[120.63739,31.418098],[120.635566,31.419856]]

计算区域质心

// 计算质心的方法
	function Area(p0, p1, p2) {
		var area = 0.0;
		area = p0[0] * p1[1] + p1[0] * p2[1] + p2[0] * p0[1] - p1[0] * p0[1] - p2[0] * p1[1] - p0[0] * p2[1]
		return area / 2;
	}

	//line 249 计算polygon的质心
	function getPolygonAreaCenter(points) {
		var sum_x = 0;
		var sum_y = 0;
		var sum_area = 0;
		var p1 = points[1];
		for (var i = 2; i < points.length; i++) {
			let p2 = points[i];
			area = Area(points[0], p1, p2);
			sum_area += area;
			sum_x += (points[0][0] + p1[0] + p2[0]) * area;
			sum_y += (points[0][1] + p1[1] + p2[1]) * area;
			p1 = p2;
		}
		var xx = sum_x / sum_area / 3;
		var yy = sum_y / sum_area / 3;
		return [xx, yy];
	}