杰瑞科技汇

ArcGIS for Flex教程如何快速上手?

ArcGIS API for Flex 已经过时,并被 Esri 官方停止支持。

ArcGIS for Flex教程如何快速上手?-图1
(图片来源网络,侵删)

Esri 已经将开发重心完全转移到了现代的 Web 技术,特别是 ArcGIS API for JavaScript,这意味着:

  • 官方已停止更新:不会再有新功能、性能优化或安全补丁。
  • 不再兼容新环境:它依赖于 Adobe Flash Player,而 Flash Player 本身已于 2025年12月31日 被官方弃用和支持,现代浏览器(如 Chrome, Firefox, Edge, Safari)默认不再支持 Flash 内容。

强烈建议您不要在新项目中使用 ArcGIS API for Flex。 如果您需要维护旧的 Flex 项目,本教程可以提供帮助;但对于任何新的开发,请直接学习 ArcGIS API for JavaScript


教程目标

本教程将引导您:

  1. 理解 Flex API 的基本架构和概念。
  2. 搭建一个基本的 Flex 开发环境。
  3. 创建您的第一个地图应用程序。
  4. 加载和显示底图和图层。
  5. 执行空间查询和识别等基本操作。

第一部分:准备工作与开发环境搭建

由于 Flex 是一个较老的技术,环境搭建与现在的前端开发有所不同。

ArcGIS for Flex教程如何快速上手?-图2
(图片来源网络,侵删)

安装 Adobe Flash Builder

这是官方推荐的 Flex 应用程序开发 IDE(集成开发环境),您可能需要寻找旧版本(如 Flash Builder 4.7)的安装包,因为较新版本可能不再支持 Flex 4.x SDK。

获取 ArcGIS API for Flex SDK

从 Esri 的旧版资源库下载 API 文件和示例,您可以在以下链接找到:

下载后,您会得到一个压缩包,解压后包含 arcgis-flex-api 文件夹,里面包含了库文件(.swc)、文档和示例。

配置 Flash Builder

  1. 创建新 Flex 项目:打开 Flash Builder,选择 File -> New -> Flex Project
  2. 项目名称MyFirstFlexMap
  3. 应用程序类型:选择 Web (running in Adobe Flash Player)
  4. 构建路径
    • 切换到 Flex Build Path 选项卡。
    • Library path 部分,点击 Add SWC...
    • 浏览并添加您从 Esri 下载的 arcgis-flex-api 文件夹中的 libs 目录下的 ArcGIS.swc 文件。
  5. Flex SDK 版本:确保您选择了一个兼容的 Flex SDK 版本(Flex 4.6 或 4.7 是一个不错的选择)。

第二部分:创建您的第一个地图应用

让我们开始编写代码。

ArcGIS for Flex教程如何快速上手?-图3
(图片来源网络,侵删)

创建 MXML 主应用程序文件

src 文件夹下,打开默认的 MyFirstFlexMap.mxml 文件,用以下代码替换其全部内容:

<?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:esri="http://www.esri.com/2008/ags"
               minWidth="955" minHeight="600">
    <!--
        应用程序布局:使用垂直布局,顶部是标题,下面是地图容器
    -->
    <s:layout>
        <s:VerticalLayout />
    </s:layout>
    <!-- 标题 -->
    <s:Label text="我的第一个 ArcGIS Flex 地图" 
             fontSize="24" 
             fontWeight="bold" 
             color="#333333"
             paddingTop="10" 
             paddingLeft="10"/>
    <!-- 地图容器 -->
    <!-- 
        id: 给地图组件一个唯一的ID,方便在ActionScript中引用。
        width/height: 设置地图的宽高,这里设置为100%以填充剩余空间。
    -->
    <esri:Map id="myMap" width="100%" height="100%">
        <!-- 
            TiledMapServiceLayer: 瓦片图层,通常用于显示底图,如卫星、街道图等。
            url: 指向 Esri 提供的公共地图服务 URL。
        -->
        <esri:ArcGISTiledMapServiceLayer 
            url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"/>
        <!-- 
            FeatureLayer: 要素图层,用于显示矢量数据,如点、线、面。
            mode: OnDemand 表示按需加载,适合大数据量。
            outFields: 指定要从服务中查询哪些字段。
        -->
        <esri:FeatureLayer 
            url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/0"
            outFields=["CITY_NAME", "STATE_NAME"]>
        </esri:FeatureLayer>
    </es:Map>
</s:Application>

代码解释

  • 命名空间: xmlns:esri="http://www.esri.com/2008/ags" 是关键,它告诉 Flex 应用程序 Esri 的组件库在哪里,之后我们就可以使用 <esri:Map> 这样的标签了。
  • <esri:Map>: 这是地图的主容器,所有图层都将添加到这个组件中。
  • <esri:ArcGISTiledMapServiceLayer>: 这是用于显示瓦片图层的组件,我们使用了 Esri 提供的全球影像底图作为背景,您也可以换成其他服务,
    • 街道图: http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer
    • 地形图: http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer
  • <esri:FeatureLayer>: 这是用于显示矢量要素的图层,我们加载了一个包含美国主要城市的点图层。url 是该图层的 REST 服务地址。

运行项目

在 Flash Builder 中,点击运行按钮(通常是一个绿色的播放按钮),它会在默认浏览器中打开一个 HTML 页面,该页面会启动 Flash Player 插件并加载您的地图应用。

如果一切顺利,您将看到一张带有美国城市点的卫星影像地图。


第三部分:常用功能示例

添加一个简单的控件(缩放条)

<esri:Map> 标签内,添加一个缩放控件。

<esri:Map id="myMap" width="100%" height="100%">
    <!-- ... 其他图层 ... -->
    <!-- 添加缩放控件 -->
    <esri:NavigationSlider id="navSlider" 
                           map="{myMap}" 
                           horizontalCenter="0" 
                           bottom="20"/>
</esri:Map>

map="{myMap}" 属性将控件与我们的地图实例关联起来。

使用 ActionScript 添加图层(动态加载)

除了在 MXML 中静态定义图层,您也可以在代码中动态添加,这通常在组件的 creationComplete 事件中完成。

修改 MyFirstFlexMap.mxml

<?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:esri="http://www.esri.com/2008/ags"
               minWidth="955" minHeight="600"
               creationComplete="onCreationComplete()"> <!-- 添加此事件 -->
    <fx:Script>
        <![CDATA[
            import com.esri.ags.layers.FeatureLayer;
            import com.esri.ags.tasks.QueryTask;
            import com.esri.ags.tasks.supportClasses.Query;
            // 当应用程序创建完成时,此函数被调用
            private function onCreationComplete():void
            {
                // 创建一个新的要素图层
                var countiesLayer:FeatureLayer = new FeatureLayer();
                countiesLayer.url = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/2";
                countiesLayer.outFields = ["NAME", "POP2007"];
                // 将新图层添加到地图中
                myMap.addLayer(countiesLayer);
                // 设置地图的初始范围,使其聚焦于美国
                myMap.extent = new Extent(-14367791, 2870369, -7454376, 6549791, new SpatialReference(102100));
            }
        ]]>
    </fx:Script>
    <s:layout>
        <s:VerticalLayout />
分享:
扫描分享到社交APP
上一篇
下一篇