|
|
|
@ -1078,8 +1078,8 @@ export class PolygonIcon extends PIXI.Container {
|
|
|
|
|
this.addChild(this.polygonLineGraphics); |
|
|
|
|
|
|
|
|
|
this.text.anchor.set(0.5); |
|
|
|
|
// this.text.position = this.getCenterOfGravityPoint(this.pointsData);
|
|
|
|
|
console.log(this.polygonLineGraphics._bounds); |
|
|
|
|
this.text.position = this.calculatePolygonGravityCenter(this.pointsData); |
|
|
|
|
// console.log(this.calculatePolygonGravityCenter(this.pointsData));
|
|
|
|
|
this.polygonLineGraphics.addChild(this.text); |
|
|
|
|
// 添加圆点事件
|
|
|
|
|
this.pointsGraphics.forEach((item, index, array) => { |
|
|
|
@ -1123,6 +1123,8 @@ export class PolygonIcon extends PIXI.Container {
|
|
|
|
|
this.polygonLineGraphics.lineStyle(1, 0xFFBD01, 1); |
|
|
|
|
this.polygonLineGraphics.drawPolygon(this.getPoints()); |
|
|
|
|
this.polygonLineGraphics.closePath(); |
|
|
|
|
|
|
|
|
|
this.text.position = this.calculatePolygonGravityCenter(this.pointsData); |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
.on('rightclick', event => { |
|
|
|
@ -1176,31 +1178,30 @@ export class PolygonIcon extends PIXI.Container {
|
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public getCenterOfGravityPoint(points) { |
|
|
|
|
let sumX = 0; |
|
|
|
|
let sumY = 0; |
|
|
|
|
let sumArea = 0; |
|
|
|
|
let area = 0; |
|
|
|
|
let p1 = points[1]; |
|
|
|
|
for (let i = 2; i < points.length; i++) { |
|
|
|
|
const p2 = points[i]; |
|
|
|
|
area = this.Area(points[0], p1, p2); |
|
|
|
|
sumArea += area; |
|
|
|
|
sumX += (points[0][0] + p1[0] + p2[0]) * area; |
|
|
|
|
sumY += (points[0][1] + p1[1] + p2[1]) * area; |
|
|
|
|
p1 = p2; |
|
|
|
|
} |
|
|
|
|
const pointX = sumX / sumArea / 3; |
|
|
|
|
const pointY = sumY / sumArea / 3; |
|
|
|
|
console.log(pointX); |
|
|
|
|
console.log(pointY); |
|
|
|
|
return new PIXI.Point(pointX, pointY); |
|
|
|
|
} |
|
|
|
|
Area(p0, p1, p2) { |
|
|
|
|
let 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; |
|
|
|
|
} |
|
|
|
|
public calculatePolygonGravityCenter(points: PIXI.Point[]) { |
|
|
|
|
let area = 0.0; // 多边形面积
|
|
|
|
|
let gravityLat = 0.0; // 重心点 latitude
|
|
|
|
|
let gravityLng = 0.0; // 重心点 longitude
|
|
|
|
|
points.forEach((item, index) => { |
|
|
|
|
// 1
|
|
|
|
|
const lat = item.x; |
|
|
|
|
const lng = item.y; |
|
|
|
|
const nextLat = points[(index + 1) % points.length].x; |
|
|
|
|
const nextLng = points[(index + 1) % points.length].y; |
|
|
|
|
// 2
|
|
|
|
|
const tempArea = (nextLat * lng - nextLng * lat) / 2.0; |
|
|
|
|
// 3
|
|
|
|
|
area += tempArea; |
|
|
|
|
// 4
|
|
|
|
|
gravityLat += tempArea * (lat + nextLat) / 3; |
|
|
|
|
gravityLng += tempArea * (lng + nextLng) / 3; |
|
|
|
|
}); |
|
|
|
|
// 5
|
|
|
|
|
gravityLat = gravityLat / area; |
|
|
|
|
gravityLng = gravityLng / area; |
|
|
|
|
|
|
|
|
|
return new PIXI.Point(gravityLat, gravityLng); |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* 获取点集合 |
|
|
|
|
*/ |
|
|
|
|