我的地图上有几个标记,并且每次单击显示一堆标记组的选定点时都希望动态居中。
有谁知道如何在 As3 中做到这一点?
我的地图上有几个标记,并且每次单击显示一堆标记组的选定点时都希望动态居中。
有谁知道如何在 As3 中做到这一点?
您可以尝试使用 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 网站上的内容。那里有很多方便的东西。