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

(图片来源网络,侵删)
- 不再更新:不会有新的功能、修复或安全补丁。
- 不再支持:如果您遇到问题,Esri 官方将不再提供技术支持。
- 未来风险:随着浏览器和操作系统的更新,使用 Flex API 构建的应用可能会出现兼容性问题甚至无法运行。
强烈建议您不要在新项目中使用 ArcGIS Flex API。
为什么还会有教程和需求?
尽管 Flex API 已被废弃,但仍然存在一些基于它构建的遗留系统需要维护、理解或迁移,学习 Flex API 的主要目的应该是:
- 维护旧项目:理解和修改现有的 Flex 应用程序。
- 知识迁移:理解 ArcGIS API 的核心概念(如地图服务、图层、查询、几何操作等),这些概念在后续的 JavaScript, Silverlight, 和现在的 API 中都是相通的。
- 历史研究:了解 Esri 平台的发展历程。
ArcGIS Flex API 核心概念(快速入门)
如果您需要维护旧项目,以下是 Flex API 的几个核心概念,可以帮助您快速上手。
基本组件
Map:地图容器,是所有地图操作的基石,你可以在其中添加图层、控件等。TiledMapServiceLayer:切片图层,用于显示预先渲染好的瓦片地图服务(如底图、卫星影像),这是最常用的图层类型。DynamicMapServiceLayer:动态图层,用于显示动态地图服务,服务器会根据请求实时渲染地图,适合需要查询、编辑等操作的图层。GraphicsLayer:图形图层,用于在地图上叠加临时的矢量要素(点、线、面),常用于显示查询结果、绘制图形、GPS 定位点等。Tool:工具类,用于与地图进行交互。PanTool:平移工具。ZoomTool:缩放工具。DrawTool:绘制工具,用于在地图上绘制点、线、面。IdentifyTool:查询工具,用于点击地图要素获取其属性信息。QueryTask:查询任务,用于根据 SQL 查询条件批量获取要素数据。
开发环境准备
- Flex SDK:你需要安装 Adobe Flex SDK 来编译 Flex 应用。
- ArcGIS Flex API 库:从 Esri 官网下载 Flex API 的 SDK,里面包含了必要的
.swc库文件和示例。 - 开发工具:
- Adobe Flash Builder:这是最主流的 Flex 开发 IDE,现在由 Adobe 停止维护,但仍是开发 Flex 应用的首选。
- Flash Develop:一个免费的开源 Flex 开发环境。
ArcGIS Flex API 教程示例:一个简单的地图应用
下面我们通过一个简单的例子,来演示如何使用 Flex API 创建一个包含地图和基本查询功能的应用。

(图片来源网络,侵删)
目标
创建一个 Flex 应用,加载一个公共的地图服务,并实现点击地图查询要素信息的功能。
步骤 1:项目设置
- 打开 Flash Builder,创建一个新的 Flex 项目。
- 在项目设置中,确保将下载的 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 代码 (逻辑处理)
我们需要添加点击地图进行查询的逻辑。
- 在 MXML 文件中,为
<s:Application>标签添加creationComplete事件,用于在应用加载完成后执行初始化代码。 - 在
<fx:Script>标签内编写 ActionScript 代码。
修改后的完整代码如下:

(图片来源网络,侵删)
<?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:运行和测试
- 在 Flash Builder 中,右键点击项目,选择 “运行方式” -> “Flex 应用程序”。
- 应用程序会启动,并显示地图。
- 点击地图上的任意点,如果点中了城市,下方的文本区域就会显示该城市的名称、国家和人口信息。
学习资源和迁移路径
官方资源 (存档)
由于 Flex API 已被废弃,官方资源也大多被归档,但它们仍然是宝贵的参考资料。
- ArcGIS Flex API Resource Center:
- 这是 Flex API 最权威的官方文档中心,包含了所有组件、任务的详细说明和 API 参考。
- 链接: https://developers.arcgis.com/flex/ (注意:此链接已归档,内容可能无法访问或显示不正常)
- Esri GitHub - Flex API Samples:
- Esri 将官方示例代码托管在 GitHub 上,这是学习具体实现方式的绝佳资源。
- 链接: https://github.com/Esri/arcgis-api-flex-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 控件。 |
- JavaScript API 学习资源:
- ArcGIS API for JavaScript 官方教程: https://developers.arcgis.com/javascript/
- Esri GitHub - JavaScript API Samples: https://github.com/Esri/jsapi-resources
- ArcGIS Flex API 是一项过时的技术,仅建议用于维护旧项目。
- 学习其核心概念(地图、图层、任务、工具)有助于理解 Esri 平台的设计哲学。
- 所有新项目都应使用 ArcGIS API for JavaScript 或其他现代 API(如 .NET, Python SDK 等)。
- 迁移时,重点关注核心概念的对应关系,并利用官方的 JavaScript 教程和示例来快速上手新的开发范式。
