arcgis api for flex 鹰眼 可动态缩放
来源:互联网 发布:适合高中生的淘宝店铺 编辑:程序博客网 时间:2024/04/30 20:28
<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.com/flex/spark"xmlns:mx="library://ns.adobe.com/flex/mx"xmlns:viewer="com.commpent.widget.*" xmlns:esri="http://www.esri.com/2008/ags" xmlns:maplib="com.esri.maplib.*"pageTitle="Flex Overview Map"backgroundColor="#333333"creationComplete="init()"><fx:Script><![CDATA[import com.esri.ags.Graphic;import com.esri.ags.geometry.Extent;import com.esri.ags.layers.ArcGISDynamicMapServiceLayer;import com.esri.ags.layers.GraphicsLayer;import com.esri.ags.layers.Layer;import mx.core.FlexGlobals;import mx.events.EffectEvent;[Bindable]private var openToolTip:String;[Bindable]private var closeToolTip:String;private var overviewGraphic:Graphic = new Graphic();private function init():void{overviewGraphic.buttonMode = true;toggleIcon.addEventListener(MouseEvent.CLICK, toggleIcon_clickHandler);viewBox.setStyle("backgroundColor", FlexGlobals.topLevelApplication.getStyle("backgroundColor"));/* //若鹰眼的地图需要动态从地图获得,可用如下代码overviewMap.mainMap.level = 2;var rectLayer:GraphicsLayer = overviewMap.layers[0];overviewMap.removeAllLayers();for(var i:int = 0; i<map.layers.length; i++){var type:String = map.layers[i].className;var otherWinLayer:Layer = null;if(type == "ArcGISDynamicMapServiceLayer"){otherWinLayer = new ArcGISDynamicMapServiceLayer(map.layers[i].url);}else if(type == "ArcGISTiledMapServiceLayer"){otherWinLayer = new ArcGISTiledMapServiceLayer(map.layers[i].url);}else{continue;}overviewMap.addLayer(otherWinLayer);}overviewMap.addLayer(rectLayer); */}private function toggleIcon_clickHandler(event:MouseEvent):void{currentState = (currentState == "collapsed") ? "expanded" : "collapsed";}]]></fx:Script><s:states><s:State name="collapsed"/><s:State name="expanded"/></s:states><s:transitions><s:Transition fromState="*" toState="*"><s:Sequence><s:Resize duration="800" target="{viewBox}"/><s:Rotate angleBy="180" autoCenterTransform="true" duration="300" target="{toggleIcon}"/></s:Sequence></s:Transition></s:transitions><esri:Map id="map" extent="{new Extent(-77, 38, -71, 44)}"><esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer"/></esri:Map><s:BorderContainer id="viewBox" bottom="10" right="10" width.collapsed="{toggleIcon.width}" width.expanded="250" height.collapsed="{toggleIcon.height}" height.expanded="250" backgroundAlpha="1.0"><maplib:OverviewMap mainMap="{map}" id="overviewMap" width="250" height="250" clickRecenterEnabled="false" doubleClickZoomEnabled="false" keyboardNavigationEnabled="false" logoVisible="false" mask="{mapMask}" panArrowsVisible="false" panEnabled="false" rubberbandZoomEnabled="false" scaleBarVisible="false" scrollWheelZoomEnabled="false" wrapAround180="{map.wrapAround180}" zoomSliderVisible="false"><esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer"/><esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/Reference/ESRI_BoundariesPlaces_World_2D/MapServer"/></maplib:OverviewMap><s:BorderContainer id="mapMask" width="{viewBox.width}" height="{viewBox.height}"/><s:Group width="{viewBox.width}" height="{viewBox.height}"><mx:Image id="toggleIcon" width="23" height="23" buttonMode="true" mask="{iconMask}" smoothBitmapContent="true" source="assets/i_expand2.png" toolTip.collapsed="{openToolTip}" toolTip.expanded="{closeToolTip}" useHandCursor="true"/><s:BorderContainer id="iconMask" width="{toggleIcon.width}" height="{toggleIcon.height}"/></s:Group></s:BorderContainer><!--<mx:Canvas bottom="10" right="10" width="250" height="200" backgroundColor="#333333" backgroundAlpha="1.0" borderStyle="solid" borderColor="#000000" cornerRadius="5"><maplib:OverviewMap mainMap="{map}"><esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer"/><esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/Reference/ESRI_BoundariesPlaces_World_2D/MapServer"/></maplib:OverviewMap></mx:Canvas>--></s:Application>
OverviewMap.as
/* * Copyright 2009 ESRI * * All rights reserved under the copyright laws of the United States * and applicable international laws, treaties, and conventions. * * You may freely redistribute and use this sample code, with or * without modification, provided you include the original copyright * notice and use restrictions. * * See use restrictions at http://resources.esri.com/help/9.3/usagerestrictions.htm. */package com.esri.maplib{import com.esri.ags.Graphic;import com.esri.ags.Map;import com.esri.ags.events.ExtentEvent;import com.esri.ags.events.MapEvent;import com.esri.ags.geometry.Extent;import com.esri.ags.geometry.MapPoint;import com.esri.ags.layers.GraphicsLayer;import com.esri.ags.symbols.FillSymbol;import com.esri.ags.symbols.SimpleFillSymbol;import com.esri.ags.symbols.SimpleLineSymbol;import flash.events.Event;import flash.events.MouseEvent;//--------------------------------------// Other metadata//--------------------------------------[IconFile("overview-map.gif")]/** * An overview map that extends the base Map component and provides a convenience * for linking the overview map to the main map. */public class OverviewMap extends Map{//--------------------------------------------------------------------------//// Constructor////--------------------------------------------------------------------------/** * Creates a new overview map instance. * * @param map The main map that is linked to this overview map. */public function OverviewMap( mainMap:Map = null ){super();this.mainMap = mainMap;// Disable map navigationmapNavigationEnabled = false;// Hide the map controlslogoVisible = false;panArrowsVisible = false;scaleBarVisible = false;zoomSliderVisible = false;addEventListener(MouseEvent.CLICK, onOverviewClick);}//--------------------------------------------------------------------------//// Constants////--------------------------------------------------------------------------/** * Overview mode in which the overview map's extent remains constant. */public static const STATIC_MODE:String = "static";/** * Overview mode in which the overview map's extent changes to track the extent * of the associated main map. This is the default overview mode. */public static const DYNAMIC_MODE:String = "dynamic";//--------------------------------------------------------------------------//// Variables////--------------------------------------------------------------------------private var _mainMap:Map;private var _extentBox:Graphic;private var _graphicsLayer:GraphicsLayer;private var _boxFillSymbol:FillSymbol;private var _dragging:Boolean = false;private var _dragStartPoint:MapPoint;private var _dragStartExtent:Extent;//--------------------------------------------------------------------------// Property: mainMap//--------------------------------------------------------------------------[Bindable("mainMapChanged")]/** * The main map that is linked to this overview map. */public function get mainMap():Map{return _mainMap;}/** * @private */public function set mainMap( value:Map ):void{if (value !== _mainMap){removeMapListeners();_mainMap = value;addMapListeners();dispatchEvent(new Event("mainMapChanged"));}}//--------------------------------------------------------------------------// Property: overviewMode//--------------------------------------------------------------------------[Bindable][Inspectable(category="Mapping", enumeration="dynamic,static", defaultValue="dynamic")]/** * The display mode of the overview. * Use STATIC_MODE to lock the overview map at its current extent. * Use DYNAMIC_MODE to allow the overview map extent to change in relation to * the main map's extent. * * @default dynamic */public var overviewMode:String = DYNAMIC_MODE;//--------------------------------------------------------------------------// Property: overviewClickRecenterEnabled//--------------------------------------------------------------------------[Bindable][Inspectable(category="Mapping", defaultValue="true")]/** * Enables clicking on the overview map to recenter the main map to the clicked location. * * @default true */public var overviewClickRecenterEnabled:Boolean = true;//--------------------------------------------------------------------------// Property: overviewDragExtentBoxEnabled//--------------------------------------------------------------------------private var _overviewDragExtentBoxEnabled:Boolean = true;[Bindable][Inspectable(category="Mapping", defaultValue="true")]/** * Enables dragging the overview indicator box to recenter the main map. * * @default true */public function get overviewDragExtentBoxEnabled():Boolean{return _overviewDragExtentBoxEnabled;}/** * @private */public function set overviewDragExtentBoxEnabled( value:Boolean ):void{_overviewDragExtentBoxEnabled = value;if (_extentBox){_extentBox.buttonMode = _overviewDragExtentBoxEnabled;_extentBox.useHandCursor = _overviewDragExtentBoxEnabled;}}//--------------------------------------------------------------------------// Property: boxFillSymbol//--------------------------------------------------------------------------[Bindable("boxFillSymbolChanged")]/** * The fill symbol that is used to draw the indicator box that signifies the main map extent. */public function get boxFillSymbol():FillSymbol{return _boxFillSymbol;}/** * @private */public function set boxFillSymbol( value:FillSymbol ):void{_boxFillSymbol = value;// Apply the new symbol if the graphics layer is already createdif (_graphicsLayer){_graphicsLayer.symbol = effectiveBoxFillSymbol();}dispatchEvent(new Event("boxFillSymbolChanged"));}//--------------------------------------------------------------------------//// Methods////--------------------------------------------------------------------------/** * @private */override protected function createChildren():void{super.createChildren();// Create a graphics layer to display the extent box of the main map_graphicsLayer = new GraphicsLayer();_graphicsLayer.symbol = effectiveBoxFillSymbol();addLayer(_graphicsLayer);// Create the extent indicator box_extentBox = new Graphic();_extentBox.buttonMode = overviewDragExtentBoxEnabled;_extentBox.useHandCursor = overviewDragExtentBoxEnabled;_extentBox.addEventListener(MouseEvent.MOUSE_DOWN, onBoxDragStart);_extentBox.addEventListener(MouseEvent.CLICK, onBoxClick);_graphicsLayer.add(_extentBox);if (mainMap && mainMap.loaded){updateOverviewExtent();}}private function addMapListeners():void{if (mainMap){if (mainMap.loaded){updateOverviewExtent();}else{mainMap.addEventListener(MapEvent.LOAD, onMainMapLoad, false, 0, true);}mainMap.addEventListener(ExtentEvent.EXTENT_CHANGE, onMainMapExtentChange, false, 0, true);}}private function removeMapListeners():void{if (mainMap){mainMap.removeEventListener(MapEvent.LOAD, onMainMapLoad);mainMap.removeEventListener(ExtentEvent.EXTENT_CHANGE, onMainMapExtentChange);}}private function onMainMapLoad( event:MapEvent ):void{event.map.removeEventListener(MapEvent.LOAD, onMainMapLoad);updateOverviewExtent();}private function onMainMapExtentChange( event:ExtentEvent ):void{updateOverviewExtent();}private function onBoxDragStart( event:MouseEvent ):void{// Check if this map interaction is enabledif (!overviewDragExtentBoxEnabled){return;}if (!_dragging && loaded){addEventListener(MouseEvent.MOUSE_MOVE, onBoxDragUpdate);addEventListener(MouseEvent.MOUSE_UP, onBoxDragEnd);stage.addEventListener(MouseEvent.MOUSE_UP, stage_onBoxDragEnd);// Start dragging the extent boxvar mapPoint:MapPoint = toMapFromStage(event.stageX, event.stageY);_dragStartPoint = mapPoint;_dragStartExtent = Extent(_extentBox.geometry);_dragging = true;}}private function onBoxDragUpdate( event:MouseEvent ):void{if (_dragging && loaded){// Calculate the drag delta and reposition the extent boxvar mapPoint:MapPoint = toMapFromStage(event.stageX, event.stageY);var dx:Number = mapPoint.x - _dragStartPoint.x;var dy:Number = mapPoint.y - _dragStartPoint.y;var newExtent:Extent = _dragStartExtent.offset(dx, dy);updateExtentBox(newExtent);}}private function onBoxDragEnd( event:MouseEvent ):void{if (_dragging && loaded){removeEventListener(MouseEvent.MOUSE_MOVE, onBoxDragUpdate);removeEventListener(MouseEvent.MOUSE_UP, onBoxDragEnd);stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onBoxDragEnd);// Calculate the drag delta and reposition the extent boxvar mapPoint:MapPoint = toMapFromStage(event.stageX, event.stageY);var dx:Number = mapPoint.x - _dragStartPoint.x;var dy:Number = mapPoint.y - _dragStartPoint.y;var newExtent:Extent = _dragStartExtent.offset(dx, dy);updateOverviewExtent(newExtent);// Update the extent of the main map when dragging has finishedif (mainMap){mainMap.extent = newExtent;}_dragStartPoint = null;_dragStartExtent = null;_dragging = false;}}private function stage_onBoxDragEnd( event:MouseEvent ):void{if (_dragging && loaded){removeEventListener(MouseEvent.MOUSE_MOVE, onBoxDragUpdate);removeEventListener(MouseEvent.MOUSE_UP, onBoxDragEnd);stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onBoxDragEnd);// Use the previously set extent box location (from onBoxDragUpdate)// rather than calculating the delta based on the current mouse coordinates.// This is because the mouse is now outside the overview map and we don't// want to move the extent box to some far off location.var newExtent:Extent = _extentBox.geometry as Extent;updateOverviewExtent(newExtent);// Update the extent of the main map when dragging has finishedif (mainMap){mainMap.extent = newExtent;}_dragStartPoint = null;_dragStartExtent = null;_dragging = false;}}private function onBoxClick( event:MouseEvent ):void{if (overviewDragExtentBoxEnabled){// Prevent the click event from bubbling up to the map.// Otherwise the drag-end action is interfered with.event.stopPropagation();}}private function onOverviewClick( event:MouseEvent ):void{// Check if this map interaction is enabledif (!overviewClickRecenterEnabled){return;}if (!_dragging && loaded){var mapPoint:MapPoint = toMapFromStage(event.stageX, event.stageY);// Recenter the extent boxif (_extentBox && _extentBox.geometry){var newExtent:Extent = Extent(_extentBox.geometry).centerAt(mapPoint);updateOverviewExtent(newExtent);}// Recenter the main map on the click pointif (mainMap && mainMap.loaded){mainMap.centerAt(mapPoint);}}}/** * Updates the geometry of the map extent indicator box to the specified extent. * If the specified extent is null, then the extent of the main map is used. * * If this overview map is in dynamic overview mode, then the extent of this * overview is updated to track the main map's extent. */private function updateOverviewExtent( mainMapExtent:Extent = null ):void{if (!mainMapExtent){mainMapExtent = mainMap.extent;}// Set the location of the extent indicator boxupdateExtentBox(mainMapExtent);if (overviewMode == DYNAMIC_MODE){// Set the extent of this overview map to be 9 times larger (3x3) than the main map extentsuper.extent = mainMapExtent.expand(3);}}/** * Updates the geometry of the map extent indicator box. */private function updateExtentBox( extent:Extent ):void{if (_extentBox){_extentBox.geometry = extent;}}/** * Returns the actual fill symbol to use for the extent indicator box. */private function effectiveBoxFillSymbol():FillSymbol{if (_boxFillSymbol){return _boxFillSymbol;}// Default fill symbol, similar to the Map rubberband zoom box stylereturn new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x666666, 0.4,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0xFF0000, 1.0, 2));}}}
0 0
- arcgis api for flex 鹰眼 可动态缩放
- ArcGis api for flex鹰眼功能
- arcgis api for flex 两种鹰眼的实现方法
- arcgis api for flex 地图选点画线 可拖动变色【写给已逝去的arcgis flex】
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(二)鹰眼模块
- ArcGIS API For Flex 动态画点和线
- ArcGIS Api For Flex 动态画点和线
- ArcGIS Api For Flex 动态画点和线
- ArcGIS API for Flex(五) 加载动态地图
- ArcGIS API for JavaScript v3.9实现鹰眼图
- ArcGIS API for Flex Beta
- ArcGIS API for Flex 概览
- arcgis api for flex学习
- ArcGIS for Flex API官网
- ArcGIS API For Javascript之地图基本加载与显示,地图切换、缩放、定位、比例尺、鹰眼图、坐标显示、查询搜索功能实现
- ArcGIS Flex for API一例
- ArcGIS API for Flex入门 - 1.概述
- ArcGIS for Flex API 资料收集
- 五大开源ESB项目
- Android之再现Adapter用法总结
- 在iOS中如何设置默认语言
- Android 自定义ViewGroup (一)
- 对Android项目中的文件夹进行解释
- arcgis api for flex 鹰眼 可动态缩放
- centos下apache多域名单ip配置
- Internet应用技术与Html课程总结
- shell获取时间
- android java.net.BindException: bind failed: EADDRINUSE (Address already in use)
- 基于 Web 的 Go 语言 IDE - Wide 1.1.0 发布!
- iOS开发UIImage和UIImageView属性介绍,实现图片动画,实现开始/停止按钮效果
- Android Activity和Fragment的转场动画
- 字符串相关操作