我在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);
}
}
答案 0 :(得分: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
过滤掉GraphicsDerp:没看到这个帖子已经5个月了......希望我的回答有助于其他人