当前位置: 首页 > news >正文

arcgis api for flex 高级主题(二) 自定义控件的开发

arcgis api for flex 高级主题(二) 自定义控件的开发
arcgis api for flex 本身只提供了Navigation和ScaleBar两个控件,并且api中
对如何开发自定义的控件做详细的描述(也可能有,是我没找到)、
下面就介绍一下我的方法。以实现一个能在地图上动态显示当前鼠标经纬度的控
件。
1 定义控件类,集成UIComponent ,实现IMapAware接口
2 重载createChildren函数
3 实现public function set map(map:Map) : void 函数
4 添加自己的功能代码
ContractedBlock.gif ExpandedBlockStart.gif Code
package com.esri
{
  import com.esri.ags.*;
     import com.esri.ags.events.*;
     import com.esri.ags.geometry.MapPoint;
     import com.esri.ags.utils.*; 
  import flash.display.*;
  import flash.events.MouseEvent;
  import flash.filters.*;
  import flash.text.*;
  import flash.geom.Point;
  import mx.core.*;
  import mx.events.*;
public class ESRIStatusBar extends UIComponent implements 
IMapAware
{
  private var m_map:Map;
   private var m_stateLabel:TextField;
  public function ESRIStatusBar()
  {
   m_stateLabel = new TextField();
   m_stateLabel.width = 152;
  }
        override protected function updateDisplayList(log:Number, 
pow:Number) : void
        {
           super.updateDisplayList(log, pow);
            return;
        }// end function
  override protected function createChildren() : void
        {
            super.createChildren();
      
        var pnt:Point  = new Point;
        if(m_map.loaded)
        {
   var mapPnt:MapPoint = new MapPoint
(m_map.extent.xmax,m_map.extent.ymin);
   pnt = m_map.toScreen(mapPnt);
    m_stateLabel.x = pnt.x-150;
            m_stateLabel.y = pnt.y-16;
        }
   
           

            addChild(m_stateLabel);
            return;
        }// end function
     private function mouseMoveHandler
(event:MouseEvent):void
     {
      if(m_map)
      {
       if(m_map.loaded)
       {
        var mapPoint : MapPoint = 
m_map.toMapFromStage(event.stageX, event.stageY);
        m_stateLabel.text = 
"x="+mapPoint.x.toString()+" , y="+mapPoint.y.toString(); 
       }
      }
     }
     private function extentChangeHandler
(event:ExtentEvent):void
     {
      var pnt:Point  = new Point;
   var mapPnt:MapPoint = new MapPoint
(m_map.extent.xmax,m_map.extent.ymin);
   pnt = m_map.toScreen(mapPnt);
   
            m_stateLabel.x = pnt.x-150;
            m_stateLabel.y = pnt.y-16;
     }
        public function set map(map:Map) : void
        {
            m_map = map;
            m_map.addEventListener
(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
            m_map.addEventListener(ExtentEvent.EXTENT_CHANGE, 
extentChangeHandler);
        }// end function
}
}

把这个控件添加到map上
var statusBar:ESRIStatusBar = new ESRIStatusBar();
             IMapAware(statusBar).map = EsriMap;
             EsriMap.addChild(statusBar);   
放代码

 

ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    
xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:esri
="http://www.esri.com/2008/ags"
    styleName
="plain" >
    
<mx:Script>
     
<![CDATA[
       import com.esri.*;
   import com.esri.ags.*; 
      private function EsriMapCreateComplete():void
      {
       var statusBar:ESRIStatusBar = new 
ESRIStatusBar(); 
             IMapAware(statusBar).map = EsriMap;
             EsriMap.addChild(statusBar);   
      }
     
]]>
    
</mx:Script>
    
<esri:Map crosshairVisible="true" id="EsriMap" 
creationComplete
="EsriMapCreateComplete()">
        
<esri:ArcGISTiledMapServiceLayer
            
url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap
_World_2D/MapServer"
 />
    
</esri:Map>
</mx:Application>

 

 

本文转自温景良(Jason)博客园博客,原文链接:http://www.cnblogs.com/wenjl520/archive/2009/06/02/1494586.html,如需转载请自行联系原作者

 

相关文章:

  • Table Dragger - 简单的 JS 拖放排序表格插件
  • 算法数据结构复习[单链表]
  • Openstack Swift 原理、架构与 API 介绍
  • RHEL5+postfix+mysql+extmai(源代码)续
  • 超级网管员——网络设备
  • linux RTC 驱动模型分析【转】
  • 互连网拒绝色情,该不该拒绝庸俗?
  • 5种方法让你成为php开发高手!
  • jQuery 使用收集
  • Chrome 63 Beta新特性介绍
  • AIX 5.3 安装 Oracle 10g R2(64)
  • 项目经理成长日记(3)——给自己的定位
  • Lync Server存档和监控服务器PART B:部署篇
  • perl实现对各种命令的守护进程,能够自动重启进程
  • 管道符和作业控制,shell变量,环境变量配置文件
  • [case10]使用RSQL实现端到端的动态查询
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 2017 前端面试准备 - 收藏集 - 掘金
  • ES6系统学习----从Apollo Client看解构赋值
  • express如何解决request entity too large问题
  • Javascript弹出层-初探
  • JavaScript设计模式与开发实践系列之策略模式
  • Linux中的硬链接与软链接
  • Making An Indicator With Pure CSS
  • PHP 的 SAPI 是个什么东西
  • Python学习之路13-记分
  • Vue小说阅读器(仿追书神器)
  • win10下安装mysql5.7
  • 搞机器学习要哪些技能
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 想写好前端,先练好内功
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 鱼骨图 - 如何绘制?
  • 怎么把视频里的音乐提取出来
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $$$$GB2312-80区位编码表$$$$
  • $.ajax()参数及用法
  • (1) caustics\
  • (LeetCode 49)Anagrams
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (差分)胡桃爱原石
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)负载均衡,回话保持,cookie
  • (转)关于pipe()的详细解析
  • .NET gRPC 和RESTful简单对比
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • /dev/sda2 is mounted; will not make a filesystem here!