zoukankan      html  css  js  c++  java
  • 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加载时就被创建。

  • 相关阅读:
    前端之CSS盒模型介绍
    前端之CSS列表及背景类属性
    前端之CSS字体和文本类属性
    流程控制语句
    前端之CSS语法及选择器
    前端之CSS创建的样式
    前端之HTML语法及常用标签
    前端之HTML样式
    网页制作之前端简介
    jQuery(一)、核心
  • 原文地址:https://www.cnblogs.com/janehlp/p/2689989.html
Copyright © 2011-2022 走看看