杰瑞科技汇

ArcGIS Flex教程怎么学?入门到进阶指南?

重要声明:ArcGIS Flex API 已被官方废弃

在开始之前,必须强调一个非常重要的信息:Esri 已经在 2025 年正式停止了对 ArcGIS Flex API 的支持。 这意味着:

ArcGIS Flex教程怎么学?入门到进阶指南?-图1
(图片来源网络,侵删)
  • 不再更新:不会有新的功能、修复或安全补丁。
  • 不再支持:如果您遇到问题,Esri 官方将不再提供技术支持。
  • 未来风险:随着浏览器和操作系统的更新,使用 Flex API 构建的应用可能会出现兼容性问题甚至无法运行。

强烈建议您不要在新项目中使用 ArcGIS Flex API。


为什么还会有教程和需求?

尽管 Flex API 已被废弃,但仍然存在一些基于它构建的遗留系统需要维护、理解或迁移,学习 Flex API 的主要目的应该是:

  1. 维护旧项目:理解和修改现有的 Flex 应用程序。
  2. 知识迁移:理解 ArcGIS API 的核心概念(如地图服务、图层、查询、几何操作等),这些概念在后续的 JavaScript, Silverlight, 和现在的 API 中都是相通的。
  3. 历史研究:了解 Esri 平台的发展历程。

ArcGIS Flex API 核心概念(快速入门)

如果您需要维护旧项目,以下是 Flex API 的几个核心概念,可以帮助您快速上手。

基本组件

  • Map:地图容器,是所有地图操作的基石,你可以在其中添加图层、控件等。
  • TiledMapServiceLayer:切片图层,用于显示预先渲染好的瓦片地图服务(如底图、卫星影像),这是最常用的图层类型。
  • DynamicMapServiceLayer:动态图层,用于显示动态地图服务,服务器会根据请求实时渲染地图,适合需要查询、编辑等操作的图层。
  • GraphicsLayer:图形图层,用于在地图上叠加临时的矢量要素(点、线、面),常用于显示查询结果、绘制图形、GPS 定位点等。
  • Tool:工具类,用于与地图进行交互。
    • PanTool:平移工具。
    • ZoomTool:缩放工具。
    • DrawTool:绘制工具,用于在地图上绘制点、线、面。
    • IdentifyTool:查询工具,用于点击地图要素获取其属性信息。
    • QueryTask:查询任务,用于根据 SQL 查询条件批量获取要素数据。

开发环境准备

  1. Flex SDK:你需要安装 Adobe Flex SDK 来编译 Flex 应用。
  2. ArcGIS Flex API 库:从 Esri 官网下载 Flex API 的 SDK,里面包含了必要的 .swc 库文件和示例。
  3. 开发工具
    • Adobe Flash Builder:这是最主流的 Flex 开发 IDE,现在由 Adobe 停止维护,但仍是开发 Flex 应用的首选。
    • Flash Develop:一个免费的开源 Flex 开发环境。

ArcGIS Flex API 教程示例:一个简单的地图应用

下面我们通过一个简单的例子,来演示如何使用 Flex API 创建一个包含地图和基本查询功能的应用。

ArcGIS Flex教程怎么学?入门到进阶指南?-图2
(图片来源网络,侵删)

目标

创建一个 Flex 应用,加载一个公共的地图服务,并实现点击地图查询要素信息的功能。

步骤 1:项目设置

  1. 打开 Flash Builder,创建一个新的 Flex 项目
  2. 在项目设置中,确保将下载的 ArcGIS Flex API 的 .swc 文件添加到项目的库路径中。

步骤 2:编写 MXML 代码 (主界面)

打开 src/YourProjectName.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"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               pageTitle="Simple Map Query">
    <!-- 定义一个简单的布局 -->
    <s:layout>
        <s:VerticalLayout gap="0" />
    </s:layout>
    <!-- 1. 地图组件 -->
    <!-- 
        id: 用于在 ActionScript 中引用
        mapServiceURL: 指向一个 ArcGIS Server 的地图服务地址
        zoomSlider: 显示缩放滑块
        panButton: 显示平移按钮
    -->
    <esri:Map id="myMap"
              zoomSliderVisible="true"
              panButtonVisible="true">
        <!-- 2. 添加一个底图图层 (TiledMapServiceLayer) -->
        <!-- 这里使用 Esri 提供的公共底图服务 -->
        <esri:ArcGISTiledMapServiceLayer 
            url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" />
        <!-- 3. 添加一个可查询的动态图层 (DynamicMapServiceLayer) -->
        <!-- 这里使用一个包含世界主要城市的点服务 -->
        <esri:DynamicMapServiceLayer 
            id="citiesLayer"
            url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_Cities_LocalGovernment/MapServer" />
    </esri:Map>
    <!-- 4. 添加一个用于显示查询结果的文本区域 -->
    <mx:TextArea id="resultText" 
                 width="100%" 
                 height="150" 
                 editable="false"
                 wordWrap="true"/>
</s:Application>

步骤 3:编写 ActionScript 代码 (逻辑处理)

我们需要添加点击地图进行查询的逻辑。

  1. 在 MXML 文件中,为 <s:Application> 标签添加 creationComplete 事件,用于在应用加载完成后执行初始化代码。
  2. <fx:Script> 标签内编写 ActionScript 代码。

修改后的完整代码如下:

ArcGIS Flex教程怎么学?入门到进阶指南?-图3
(图片来源网络,侵删)
<?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"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               pageTitle="Simple Map Query"
               creationComplete="initApp()">
    <fx:Script>
        <![CDATA[
            // 导入必要的类
            import com.esri.ags.tasks.IdentifyTask;
            import com.esri.ags.events.IdentifyEvent;
            // 定义变量
            private var myIdentifyTask:IdentifyTask;
            // 初始化函数
            private function initApp():void
            {
                // 1. 创建 IdentifyTask 实例
                // URL 必须指向一个可以进行 Identify 操作的服务
                myIdentifyTask = new IdentifyTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_Cities_LocalGovernment/MapServer");
                // 2. 为地图添加 Identify 事件监听器
                // 当用户点击地图时,会触发此事件
                myMap.addEventListener(IdentifyEvent.IDENTIFY, onIdentifyComplete);
                // 3. (可选)添加鼠标样式,提示用户地图可点击
                myMap.useHandCursor = true;
                myMap.buttonMode = true;
            }
            // Identify 事件处理函数
            private function onIdentifyComplete(event:IdentifyEvent):void
            {
                // 清空之前的结果
                resultText.text = "";
                // 遍历查询结果
                for each (var result:Object in event.identifyResults)
                {
                    // 获取要素的属性
                    var attributes:Object = result.feature.attributes;
                    // 将属性信息追加到文本区域
                    resultText.text += "城市名称: " + attributes.CITY_NAME + "\n";
                    resultText.text += "国家: " + attributes.CNTRY_NAME + "\n";
                    resultText.text += "人口: " + attributes.POP + "\n";
                    resultText.text += "------------------------\n";
                }
                // 如果没有查询到结果
                if (event.identifyResults.length == 0) {
                    resultText.text = "点击位置未找到城市信息。";
                }
            }
        ]]>
    </fx:Script>
    <s:layout>
        <s:VerticalLayout gap="0" />
    </s:layout>
    <esri:Map id="myMap" zoomSliderVisible="true" panButtonVisible="true">
        <esri:ArcGISTiledMapServiceLayer 
            url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" />
        <esri:DynamicMapServiceLayer 
            id="citiesLayer"
            url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_Cities_LocalGovernment/MapServer" />
    </esri:Map>
    <mx:TextArea id="resultText" width="100%" height="150" editable="false" wordWrap="true"/>
</s:Application>

步骤 4:运行和测试

  1. 在 Flash Builder 中,右键点击项目,选择 “运行方式” -> “Flex 应用程序”
  2. 应用程序会启动,并显示地图。
  3. 点击地图上的任意点,如果点中了城市,下方的文本区域就会显示该城市的名称、国家和人口信息。

学习资源和迁移路径

官方资源 (存档)

由于 Flex API 已被废弃,官方资源也大多被归档,但它们仍然是宝贵的参考资料。

  • ArcGIS Flex API Resource Center:
    • 这是 Flex API 最权威的官方文档中心,包含了所有组件、任务的详细说明和 API 参考。
    • 链接: https://developers.arcgis.com/flex/ (注意:此链接已归档,内容可能无法访问或显示不正常)
  • Esri GitHub - Flex API Samples:

迁移到现代 API

如果您需要将旧的 Flex 项目迁移到现代技术栈,ArcGIS API for JavaScript 是目前最主流、最推荐的选择。

  • 为什么选择 JavaScript API?

    • 官方支持:Esri 的重点和未来发展方向。
    • 跨平台:可以在任何现代浏览器中运行,无需插件。
    • 生态系统成熟:拥有庞大的开发者社区、丰富的第三方库和工具。
    • 性能优异:利用浏览器的原生能力,性能表现良好。
  • 核心概念对比 (从 Flex 到 JavaScript)

Flex API 概念 ArcGIS API for JavaScript 对应概念 描述
Map Map (esri/Map) 地图容器,基本一致。
TiledMapServiceLayer TileLayer (esri/layers/TileLayer) 或 Basemap 用于显示瓦片底图。
DynamicMapServiceLayer MapImageLayer (esri/layers/MapImageLayer) 用于显示动态地图服务。
GraphicsLayer GraphicsLayer (esri/layers/GraphicsLayer) 用于叠加临时矢量要素。
DrawTool Draw (esri/tasks/Draw) 绘制工具,使用 draw() 方法。
IdentifyTool / IdentifyTask IdentifyTask (esri/tasks/IdentifyTask) 查询工具,通过 execute() 方法执行。
QueryTask QueryTask (esri/tasks/QueryTask) 查询工具,通过 execute() 方法执行。
mx:TextArea dijit/Textarea 或 HTML <textarea> UI 控件,在 Web 环境中使用 HTML/Dijit 控件。
  • ArcGIS Flex API 是一项过时的技术,仅建议用于维护旧项目。
  • 学习其核心概念(地图、图层、任务、工具)有助于理解 Esri 平台的设计哲学。
  • 所有新项目都应使用 ArcGIS API for JavaScript 或其他现代 API(如 .NET, Python SDK 等)。
  • 迁移时,重点关注核心概念的对应关系,并利用官方的 JavaScript 教程和示例来快速上手新的开发范式。
分享:
扫描分享到社交APP
上一篇
下一篇