0

我在 Flex 4 中有一个带有地图、点数据库和搜索工具的应用程序。当用户输入内容并进行搜索时,它会返回数据库中对象的名称、详细信息和坐标。

我有一个功能,当我单击搜索结果之一时,它会缩放地图的选定点。

问题是,我想要一个可以一次缩放所有结果点的函数。例如,如果我搜索“高大的树木”并返回 10 个点,我希望地图缩放到我可以一次看到 10 个点的位置。

下面是我用来一次缩放一个点的代码,我认为 flex 会有某种功能“缩放到一组点”,但我找不到这样的东西。

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”方法从图形数组生成范围。然后使用范围设置地图的缩放系数:

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 回答