2012-05-28 13 views
0

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

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

问题是,我想要一个功能,一次放大所有的结果点。例如,如果我搜索“高大的树木”,并返回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); 

      } 


     } 

回答

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图形

Derp:没有看到线程是5个月大...希望我的回答可以帮助其他人