0

マップ上にいくつかのマーカーがあり、一連のマーカー グループを表示する選択したポイントをクリックするたびに動的に中央に配置したいと考えています。

As3でそれを行う方法を知っている人はいますか?

4

1 に答える 1

0

ポリゴンであると仮定して、マーカーによって描画されたポリゴンの重心を取得する式を使用することができます。そうでない場合、それらが散在するポイントの束である場合は、最初に外側の境界セグメントを形成するものを取得する必要があります。また、コードはポリゴンが閉じている (ループ) と想定しているため、最後のポイントが再び最初のポイントになります。 .

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 のすばらしい Web サイトにあるものを移植しただけです。そこにはたくさんの便利なものがあります。

于 2009-11-23T19:41:54.747 に答える