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

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。
教程目标
本教程将引导您:
- 理解 Flex API 的基本架构和概念。
- 搭建一个基本的 Flex 开发环境。
- 创建您的第一个地图应用程序。
- 加载和显示底图和图层。
- 执行空间查询和识别等基本操作。
第一部分:准备工作与开发环境搭建
由于 Flex 是一个较老的技术,环境搭建与现在的前端开发有所不同。

安装 Adobe Flash Builder
这是官方推荐的 Flex 应用程序开发 IDE(集成开发环境),您可能需要寻找旧版本(如 Flash Builder 4.7)的安装包,因为较新版本可能不再支持 Flex 4.x SDK。
获取 ArcGIS API for Flex SDK
从 Esri 的旧版资源库下载 API 文件和示例,您可以在以下链接找到:
- Esri ArcGIS Flex API Resource Center (旧版): https://developers.arcgis.com/flex/
下载后,您会得到一个压缩包,解压后包含 arcgis-flex-api 文件夹,里面包含了库文件(.swc)、文档和示例。
配置 Flash Builder
- 创建新 Flex 项目:打开 Flash Builder,选择
File -> New -> Flex Project。 - 项目名称:
MyFirstFlexMap。 - 应用程序类型:选择
Web (running in Adobe Flash Player)。 - 构建路径:
- 切换到
Flex Build Path选项卡。 - 在
Library path部分,点击Add SWC...。 - 浏览并添加您从 Esri 下载的
arcgis-flex-api文件夹中的libs目录下的ArcGIS.swc文件。
- 切换到
- Flex SDK 版本:确保您选择了一个兼容的 Flex SDK 版本(Flex 4.6 或 4.7 是一个不错的选择)。
第二部分:创建您的第一个地图应用
让我们开始编写代码。

创建 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 /> 