0

マップ、ポイントのデータベース、および検索ツールを備えた Flex 4 のアプリケーションがあります。ユーザーが何かを入力して検索すると、データベース内のオブジェクトの名前、詳細、および座標が返されます。

検索結果の 1 つをクリックすると、マップの選択したポイントをズームする機能があります。

問題は、すべての結果ポイントを一度にズームする機能が欲しいということです。たとえば、「背の高い木」を検索して 10 ポイントが返された場合、一度に 10 ポイントを表示できる位置にマップをズームしたいと考えています。

以下は、一度に1つのポイントをズームするために使用するコードです。フレックスには「ポイントのグループにズームする」何らかの機能があると思いましたが、このようなものは見つかりません。

private function ResultDG_Click(event:ListEvent):void
        {

            if (event.rowIndex < 0) return;

            var obj:Object = ResultDG.selectedItem;

            if (lastIdentifyResultGraphic != null)
            {
                graphicsLayer.remove(lastIdentifyResultGraphic);
            }
            if (obj != null)
            {
                lastIdentifyResultGraphic = obj.graphic as Graphic;
                switch (lastIdentifyResultGraphic.geometry.type)
                {
                    case Geometry.MAPPOINT:
                        lastIdentifyResultGraphic.symbol = objPointSymbol
                        _map.extent = new Extent((lastIdentifyResultGraphic.geometry as MapPoint).x-0.05,(lastIdentifyResultGraphic.geometry as MapPoint).y-0.05,(lastIdentifyResultGraphic.geometry as MapPoint).x+0.05,(lastIdentifyResultGraphic.geometry as MapPoint).y+0.05,new SpatialReference(29101)).expand(0.001);

                        break;
                    case Geometry.POLYLINE:
                        lastIdentifyResultGraphic.symbol = objPolyLineSymbol;
                        _map.extent = lastIdentifyResultGraphic.geometry.extent.expand(0.001);

                        break;
                    case Geometry.POLYGON:
                        lastIdentifyResultGraphic.symbol = objPolygonSymbol;
                        _map.extent = lastIdentifyResultGraphic.geometry.extent.expand(0.001);

                        break;
                }
                graphicsLayer.add(lastIdentifyResultGraphic);

            }


        }
4

1 に答える 1

1

com.esri.ags.Utils パッケージの GraphicUtil クラスを参照してください。「getGraphicsExtent」メソッドを使用して、Graphics の配列からエクステントを生成できます。次に、範囲を使用してマップのズーム率を設定します。

var graphics:ArrayCollection = graphicsLayer.graphicProvider as ArrayCollection;
var graphicsArr:Array = graphics.toArray();

// Create an extent from the currently selected graphics
var uExtent:Extent;

uExtent = GraphicUtil.getGraphicsExtent(graphicsArr);

// Zoom to extent created
if (uExtent) 
{
    map.extent = uExtent;
}    

この場合、グラフィック レイヤーのコンテンツ全体にズームします。ズームしたいフィーチャのみを含む配列をいつでも作成できます。ズームがデータに近すぎる場合は、範囲を設定した後に map.zoomOut() を使用することもできます。

注: グラフィックスに TextSymbols がある場合は注意してください。GraphicUtil が壊れます。この場合、TextSymbols で Graphics を除外する必要があります。

Derp : スレッドが 5 か月前のものであることがわかりませんでした...私の回答が他の人の役に立てば幸いです

于 2012-11-15T19:51:05.300 に答える