0

我的地图上有几个标记,并且每次单击显示一堆标记组的选定点时都希望动态居中。

有谁知道如何在 As3 中做到这一点?

4

1 回答 1

0

您可以尝试使用 a 公式来获取由标记绘制的多边形的质心,假设它是一个多边形。如果不是,并且它们是一堆分散的点,则需要首先获取形成外部边界段的点。此外,代码假设多边形是闭合的(循环),所以最后一个点又是你的第一个点.

function centreOfMass(polyPoints:Array):Point{
 var cx:Number = 0;
 var cy:Number = 0;
 var area:Number = area(polyPoints);
 var result:Point = new Point();
 var i:Number,j:Number,n:Number = polyPoints.length;
 var factor:Number = 0;
 for(i = 0; i < n ; i++){
  j = (i+1) % n;
  factor = polyPoints[i].x * polyPoints[j].y - polyPoints[j].x * polyPoints[i].y;
  cx += polyPoints[i].x + polyPoints[j].x * factor;
  cy += polyPoints[i].y + polyPoints[j].y * factor;
 }
 area *= 6.0;
 factor = 1 / area;
 cx *= factor;
 cy *= factor;
 result.offset(cx,cy);//sets x and y to cx and cy
 return result;
}

function area(polyPoints:Array):Number{
 var i:int,j:int,n:int = polyPoints.length;
 var area:Number = 0;
 for(i = 0; i < n; i++){
  j = (i+1) % n;
  area += polyPoints[i].x * polyPoints[j].y;
  area -= polyPoints[j].x * polyPoints[i].y;
 }
 area *= 0.5;
 return area;
}

您创建一个点数组,并将纬度/经度坐标用作 x,y 坐标。如果您使用的是 flash player 10,请随意将数组更改为 Vector。并且不要忘记执行 import.flash.geom.Point。

我没有想出代码,我只是移植了令人惊叹的 Paul Bourke 网站上的内容。那里有很多方便的东西。

于 2009-11-23T19:41:54.747 回答