• FlexViewer框架地图控件三问


    FlexViewer框架地图控件三问

    1) 地图如何设置初始级别或比例尺?
    在config.xml中设置map节点。
    center必须有,否则level和scale则无效。
    如果level和scale同时有值,则会取scale。
    center格式为: "x y",必须用空格隔开。

    可查看MapManager.mxml文件的configMapAttributes()函数。具体见331行。
    else if (id == "center")
    {
        map.addEventListener(MapEvent.LOAD, map_loadHandler);
    }
    这行添加事件监听map_loadHandler。

    map_loadHandler方法设置中心点代码:
    map.centerAt(centerPt);
    if (scale > 0)
    {
        map.scale = scale;
    }
    else if (level >= 0)
    {
        map.level = level;
    }

    总结如下: 在config.xml的map节点中设置center属性和(level、scale任选一个)属性。

    2)是谁发布MapEvent.LOAD事件的呢?
    public static const LOAD:String = "load";

    com.esri.ags.Map对象方法:
    creationCompleteHandler方法会执行如下代码:
    private function creationCompleteHandler(event:FlexEvent) : void
    {
        this.m_creationComplete = true;
        this.checkIfCompleteAndHasWidthAndHeightAndBaseLayerLoaded();
        return;
    }

    在checkIfCompleteAndHasWidthAndHeightAndBaseLayerLoaded中发布这个事件:
    private function checkIfCompleteAndHasWidthAndHeightAndBaseLayerLoaded() : void
    {
        if (this.m_creationComplete)
        {
        }
        if (this.m_widthAndHeightNotZero)
        {
        }
        if (this.m_baseLayerLoaded)
        {
        this.m_mouseHandler.enable();
        if (this.m_keyboardNavigationEnabled)
        {
            this.m_keyboardHandler.enable();
        }
        var _loc_1:* = this.reaspect(this.m_extent);
        this.m_oldExtent = this.reaspect(this.m_extent);
        this.extent = _loc_1;
        this.m_loaded = true;
        this.m_layerContainer.setMapOnLoadedLayers();
        if (!this.m_mapLoadEventWasDispatched)
        {
            this.m_mapLoadEventWasDispatched = true;
            dispatchEvent(new MapEvent(MapEvent.LOAD, this));  //发布地图加载事件
        }
        }
        return;
    }

    总结如下:Map类创建完成后发布地图加载事件。

    3)Map控件是在何时被创建?
    Map类定义如下:
    public class Map extends UIComponent
    {
        ...
    }

    MapManager.mxml文件中标签:
    <s:SkinnableContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx"
                          width="100%" height="100%"
                          creationComplete="this_creationCompleteHandler()"
                          skinClass="com.esri.viewer.skins.MapManagerSkin">

    其中skinClass标签,指向MapManagerSkin.mxml文件。
    在这个里面有如下代码
    <s:Group id="managerView"
                 width="100%" height="100%">
            <!-- Start map at size 0 so that only one extentChange is fired after it's been sized and had its extent set. -->
            <esri:Map id="map"
                      width="0" height="0"
                      left.resized="{hostComponent.mapLeft}" right.resized="{hostComponent.mapRight}" top.resized="{hostComponent.mapTop}" bottom.resized="{hostComponent.mapBottom}"
                      zoomSliderVisible="false"/>
    </s:Group>

    总结如下: Map对象在index.mxml加载时就被创建。

    转载:http://www.cnblogs.com/janehlp/archive/2012/09/18/2689989.html

  • 相关阅读:
    查看whl包名是否满足系统的条件的命令,以此解决whl包出现“is not a supported wheel on this platform”错误提示的问题
    C++-文件输入输出流
    C++-PTA-6-7-1 地下迷宫探索
    C++-PTA-时钟模拟
    数据结构-深入虎穴-树的应用
    数据结构-二叉树-(先序|后序)+中序求(后序|先序)笔记
    C++-课后习题-日期类DATE时间类Time
    C++-课后习题-学生类
    数据结构-串数组广义表笔记
    数据结构-PTA-银行业务队列简单模拟
  • 原文地址:https://www.cnblogs.com/x38160/p/3173059.html
Copyright © 2020-2023  润新知