
做项目汇报需要展示城市之间的通勤流量领导要求出一张“看起来专业、能讲清方向”的图。我第一反应就是OD图。所谓OD就是Origin和Destination起点到终点的一条有向连线。在ArcGIS里做OD图其实是很多规划、交通、物流类项目的基础操作但网上教程要么只讲工具点击不讲数据逻辑要么上来就让你写脚本对新手不太友好。这篇文章我按实际项目流程来写从数据准备到出图把每一步为什么要这么做讲清楚。适合刚接触ArcGIS矢量制图、需要完成课程作业或者项目汇报的读者。你不会写代码也能完全跟下来用的都是ArcGIS自带工具不需要额外装插件。1. 做OD图之前先搞明白数据长什么样1.1 OD图的本质是什么OD图粗暴点说就是“画线”把每一对起终点用一条直线连起来。但这条线不是随便连的它承载着两个关键信息一个是起终点之间的空间关系另一个是流量属性也就是有多少人、多少货、多少订单在这条线上流动。ArcGIS里做OD图最常用的是XY转线工具在ArcToolbox里的路径是“数据管理工具要素XY转线”。这个工具的核心逻辑很简单读取属性表里表示起点X、起点Y、终点X、终点Y的四个字段生成一个线要素类。它的底层不涉及路网分析就是纯粹的几何连线两点之间拉一条直线。如果你要的是沿实际道路的路径OD那属于网络分析里的“OD成本矩阵”另外还有一套流程这篇文章先不展开。这里重点讲直线OD图因为它适合展示宏观格局比如城市群之间的经济联系强度、不同区域之间的客流交换量视觉上干净利落。1.2 准备OD数据的标准格式要做图第一步是数据。OD数据最常见的形式是一张二维表每一行代表一条起终点记录。最核心的字段至少有四个坐标字段再加一个权重字段权重用来控制线的粗细。字段名含义示例O_X起点经度/横坐标113.26O_Y起点纬度/纵坐标23.13D_X终点经度/横坐标116.41D_Y终点纬度/纵坐标39.90FLOW流量/权重值2580这四个坐标字段是XY转线工具能够出图的前提缺一个都运行不了。权重字段不是必须的但建议一定要有否则做出来的图所有线一样粗信息量损失一大半。我见过很多朋友拿到Excel数据就开始在ArcGIS里找工具结果发现XY转线根本拉不进去。原因很简单工具要求输入的是要素类不是表格。你需要先把Excel表格转成点要素或者至少转成dBASE表或者地理数据库表才能被ArcGIS识别。2. 核心实操用XY转线功能把OD表变成线2.1 Excel数据导入ArcGIS的三种方法导入数据是整个流程里最容易出问题的一步我分开仔细说。第一种直接拖拽法。打开ArcMap或者ArcGIS Pro把Excel文件直接拖到内容列表里。ArcGIS能识别xls和xlsx格式但要求工作表结构规范第一行是字段名不能有合并单元格。如果Excel里有复杂的表头格式建议先整理成一张干净的表再导入。第二种使用“表转要素”工具。如果OD表已经有起点的XY坐标可以先单独把起点转成点要素再把终点转成点要素后面用“连接”工具把它们连起来。不过这个过程比较绕一般不建议作为首选方案。第三种最推荐的方式直接用ArcToolbox里的“添加XY坐标”或者通过“创建XY事件图层”把Excel点数据加载成临时点层。这里要注意一点创建XY事件图层生成的是临时图层默认不写入磁盘做OD线之前最好用“数据导出”把它存成真正的Shapefile或者地理数据库要素类否则关闭软件再打开就找不到了。2.2 XY转线工具界面逐项解析打开XY转线工具之后界面参数看起来多实际核心就三个部分输入表、输出要素、字段映射。输入表建议选择导入ArcGIS之后的表格要素而不是原始的Excel路径。输出要素设置一个保存路径文件名不要用中文尽量用字母或下划线这是ArcGIS的老传统了虽然现在中文支持好了很多但为了省事还是英文稳当。字段映射部分是最关键的一步起点X字段选择表里起点经度那一列起点Y字段选择表里起点纬度那一列终点X字段选择表里终点经度那一列终点Y字段选择表里终点纬度那一列这四个字段选完之后工具还会问你“线类型”用什么坐标系。这里一定要选投影坐标系千万不要选地理坐标系。原因我下一节详细讲。所有参数都填好后点确定输出的线要素会直接加到图层里。这时候你已经成功了一半屏幕上出现了一堆从起点指向终点的直线段。2.3 为什么必须用投影坐标系而不是经纬度这是很多新手最容易踩的坑。直接用WGS84或者CGCS2000地理坐标系做出来的OD线在全球尺度可能看不出问题但一旦你的研究范围是市级、省级线会明显偏斜看起来方向不对。原因是经纬度坐标系下的度不是等距单位纬度越高同样一度的经度对应实际距离越短。在两个不同纬度之间连直线相当于在球面上画了一条“看起来是直线”的路径但在平面图上展示时会被拉伸或扭曲。要保证OD线的方向和距离在二维平面图上准确必须把坐标转换到投影坐标系比如常用的Albers等积投影、Gauss-Kruger投影、Web Mercator或者UTM。在实际项目中我会根据研究区域选择坐标系。全国尺度用Albers省级图幅常用Gauss-Kruger 3度带市级范围直接用地方坐标或者Web Mercator都可以。如果你还不确定用什么投影一个简单原则你的底图或者背景图层是什么坐标系你的OD线就统一用什么坐标系。保持所有图层坐标系一致这是ArcGIS制图的基本素养。3. 放射状流向图的进阶改造3.1 放射状图的两种典型场景放射状流向图本质上是以一个中心节点向外辐射的OD图。常见于分析某一座核心城市与周边城市之间的客流联系、一个港口与内陆腹地的货运关系、一个产业园区与外部供应商的空间联系。和普通OD图相比放射状图最大的特点是起点高度统一通常只有一个或几个核心点。比如分析广州与珠三角城市之间的联系起点始终是广州终点是佛山、东莞、中山、珠海等。做出来之后全图呈现出由一个中心向外散射的形态所以叫放射状流向图。放射状流向图的做法和普通OD图一模一样工具还是那个XY转线区别在于你给工具的输入表里每一行的起点坐标都指向同一个点而终点坐标各不相同。也就是说在数据准备阶段你需要在Excel里把起点城市的那四列坐标复制粘贴到每一行。3.2 从OD表生成放射状流向数据的公式方法这里分享一个非常实用的技巧。假设原始数据表里有一列是“起点城市编码”另有一列已经通过VLOOKUP从城市坐标表里带出了每个城市的XY坐标。现在要做的是把起点城市的XY坐标赋给当前行的O_X和O_Y字段。如果你用Excel可以这样操作先建一个“城市坐标对照表”城市名加上它的XY坐标。然后在OD数据表里新增四个字段直接用VLOOKUP公式匹配O_X VLOOKUP(起点城市, 城市坐标表, 2, 0)O_Y VLOOKUP(起点城市, 城市坐标表, 3, 0)D_X VLOOKUP(终点城市, 城市坐标表, 2, 0)D_Y VLOOKUP(终点城市, 城市坐标表, 3, 0)这个思路适用于任何规模的OD数据整理比手工复制粘贴高效得多。如果OD表是长格式也就是每一行只有一个城市对那用VLOOKUP会非常顺手。如果数据是宽格式先逆透视成长表再匹配。3.3 用符号化打造层次感数据转成线之后默认都是一样的灰线直接拿去汇报肯定不行。放射状流向图的视觉重点在于流量等级的表达这里需要用到分级符号。在图层属性里找到符号系统选项卡选择“数量分级符号”。这个功能按照某个数值字段把图层里的要素分成几个等级每个等级用不同的线宽表示。通常建议分5到7级太多太细反而看不出规律太少又损失信息。分级方法我推荐用“自然间断点”。这个方法会自动寻找数据分布中的“断裂点”让每一级内部的差异最小级与级之间差异最大。对于大多数OD流量数据来说自然间断点比等间距分级更符合直觉不会出现极端大值把其他所有线都压扁的情况。线宽的设置范围根据图幅大小定。A4幅面的图线宽从0.4到4.0磅比较合适太粗会糊成一团太细打印出来根本看不见。如果导出的图分辨率是300dpi还可以适当放大范围。3.4 方向箭头怎么加怎么调OD图必须有方向信息否则读者分不清是A到B还是B到A。在ArcGIS中给线加箭头有几种做法。第一种最简单在符号系统的线符号编辑器里选择“制图线符号”类型然后在线端点或中间位置添加箭头标记。具体路径右键图层打开属性进入符号系统单击当前线符号打开符号选择器选择“编辑符号”切换成“制图线符号”在“线属性”里可以设置箭头样式、尺寸、是否放在线的末端。第二种使用“箭头线”样式。有些符号库已经内置了带箭头的线型但问题是方向可能控制不好。ArcGIS默认的箭头方向是按线的数字化方向来的也就是从起始点指向终止点。如果你的OD线方向不对检查一下是不是XY转线时起点终点字段填反了这个在工具参数里一一对应就不会错。第三种如果追求专业效果可以在布局视图里用“标记填充”做循环箭头符号这个比较高级适合做交通流专题图。但对大多数场景前两种就足够了。还需要强调一下箭头的视觉层级。当线数量很多时箭头的尺寸要跟着线宽走线越粗箭头越大线细的用极小箭头甚至不标否则细线上一颗大箭头非常突兀。设置分级符号的时候每一级都要单独编辑箭头尺寸。4. 影响出图效果的关键细节4.1 底图选择与坐标系一致OD图是叠加在底图上看的底图提供了一个空间参照框架让读者识别起终点在哪个位置。底图选择没有绝对标准但有几个原则可以遵守。使用在线底图时比如天地图或者ArcGIS Online的影像底图要注意坐标匹配。天地图默认是CGCS2000的地理坐标系或者Web Mercator投影如果你的OD线是Albers投影直接叠加会出现偏移。解决办法是先把OD线要素类的坐标系定义成底图的坐标系用“投影”工具做一次坐标转换再叠加显示。如果不想折腾坐标系一个取巧的办法是把OD线的坐标系直接定义成和底图一致的坐标系然后用“投影”工具转换。ArcGIS会自动做动态投影在正常缩放范围内视觉效果基本一致。另一个原则是底图色彩不要太抢眼。放射状流向图的主角是那些线底图尽量选择浅灰色行政边界、淡色水系、低饱和度的街区底色把视觉焦点留给流向线。4.2 透明度与压盖处理当OD线数量很多、彼此交叉密集的时候线之间会产生严重的压盖。这时候需要在符号系统里调透明度。透明度设置路径在符号系统里选中最顶层的线符号右键打开属性把“透明度”从0调到30到50之间。这样多条线相互叠加的部分会自然加深单条线仍然清晰可辨。透明度配合分级线宽能够有效解决“蜘蛛网”问题。如果线条仍然压盖严重还有一个思路是只用部分数据作图。先按流量从大到小排序取前80%或者前60%的OD记录参与制图保住核心骨架舍弃噪声细节。很多专业专题图都不是全要素展示而是有取舍地呈现。4.3 标注起终点名称OD图上没有地名标注读者会看得很吃力。标注可以用ArcGIS的标注功能自动实现具体做法是在OD线的属性表里建立“显示字段”然后用Python等表达式拼接起点名称和终点名称。举个例子如果属性表里有“起点城市”和“终点城市”两个字段标注表达式可以写成def labelText([起点城市], [终点城市]): return [起点城市] → [终点城市]在ArcGIS的标注表达式编辑器里可以直接用Python字符串拼接。这个表达式需要修改成适合自己字段名的版本。设置完成后在图层属性里开启标注选择合适的字体大小和位置即可。标注位置建议放在线段的中间点附近。如果所有标注都堆在起点和终点图上会乱成一团。ArcGIS标注位置默认有几种策略可以在标注管理器里调整选择“在线的中部”附近放置。5. 做OD图常见的坑与解决方案5.1 坐标字段填反线飞到了地球另一面这个问题出现频率极高。Excel表里如果字段名不够清晰比如只有CoordinateA、CoordinateB没写清楚哪个是经度哪个是纬度XY转线工具导出的数据可能全部跑到莫名其妙的位置。解决办法是在导入前就把字段重命名成容易识别的名字比如O_LON、O_LAT、D_LON、D_LAT。同时在XY转线界面里要明确X字段对应经度或横坐标Y字段对应纬度或纵坐标这个对应关系不要搞反。一个快速自检方法生成线之后随手加载一个在线底图看线是否落在预期区域。如果落在海洋或者别的国家基本就是坐标填反。5.2 投影坐标系选错看起来线是歪的这一点在2.3小节里说过再补充一个常见场景。如果是全国范围数据直接用WGS1984地理坐标系的经纬度连线画出来的是球面大圆线在平面展示时线条会呈弧形。很多做省际联系图的同学用这个方法结果线全部弯了看起来很不专业。正确做法是使用Albers等积投影或者Lambert等角投影作为输出线要素的坐标系。高版本ArcGIS的XY转线工具在输出时会自动根据输入表的坐标系做转换但如果输入表本身没定义坐标系工具可能默认存成GCS_WGS_1984这时候就需要手动指定输出坐标系。5.3 OD表太大工具运行卡死几千条OD线对ArcGIS来说其实不算大但如果数据到了几万条甚至几十万条XY转线工具会变得很慢代码层面的优化不在这次讨论范围内但可以用下面的方法缓解。先简化表把不需要的字段删除只保留坐标字段、权重字段和名称字段。然后通过定义查询或者属性选择过滤掉流量过小的OD对。最后再跑工具效率会明显提升。还有一个容易忽略的点输出路径不要放到C盘系统盘里最好放在项目的数据库或者单独文件夹。ArcGIS在写入较大的矢量数据时需要消耗临时空间C盘空间不足也会导致工具异常退出。5.4 线的数字化方向与期望相反做放射状图时如果所有箭头都指向了中心点而不是从中心向外说明起点和终点字段填反了。这个问题的排查方式在属性表里随机挑一条线浏览它的起点坐标和终点坐标跟原始Excel表对比。如果每行的起点都对应了中心节点那肯定是起点坐标匹配错了。修正方式有两种重新跑一次XY转线工具或者在属性表里新增字段、用字段计算器交换四列坐标再生成新线。字段计算器交换坐标的表达式很简单新建四个字段把D_X赋给临时字段再把O_X赋给D_X最后把临时字段赋给O_X。四列坐标全部交换即可。这个方法适合已经处理了一半、不想重新整理表格的情况。5.5 无法在ArcMap中直接编辑带箭头的线符号我在ArcMap 10.x版本里踩过一个很实际的坑普通线符号和制图线符号的箭头设置入口差异很大高版本和低版本界面还不一样。ArcMap 10.2或10.3要进入符号系统选择线符号然后双击打开“符号选择器”点击“编辑符号”在“类型”下拉框里选“制图线符号”这里才有箭头端点设置选项。如果你选的是标准线符号就找不到箭头配置。ArcGIS Pro的逻辑类似但界面在“符号系统”面板的“图层”选项卡里选择一个线符号后点击“属性”往下拉找到“样式”里的端点选项卡里面有箭头可选项。如果你用的是Pro 3.x路径基本一致。6. 我自己的出图流程参考项目不同需求也不同但有一个相对通用的出图顺序可以作为参考。第一步整理OD数据表。在Excel里把坐标字段补全格式统一成数值类型千万不能是文本格式否则坐标读取会出现问题。第二步导入ArcGIS。把Excel拖入内容列表右键打开属性表确认字段类型。打开XY转线工具按映射关系填写参数选择投影坐标系作为输出坐标系。第三步结果检查。加载在线底图目视判断线是否落位合理方向是否正确。发现有异常线后回到原始表排查。第四步符号化。进入符号系统选择“数量分级符号”设置自然间断点和5到7级线宽。再调整透明度到30到40左右。第五步添加方向箭头。在编辑符号面板里选择制图线符号按分级设置对应的箭头大小。第六步添加标注。设置SQL查询只标注核心节点名称避免标签拥挤。第七步切换到布局视图插入图例、比例尺、指北针、标题。导出图片时选择300dpi以上的分辨率。这套流程从数据到成图大概需要15到20分钟。熟练之后会快很多主要时间都花在数据整理和符号调整上。7. 实操过程中的几条重要注意事项第一不要把Excel直接当要素类用。坐标字段虽然Excel里能看出来但ArcGIS不会自动把它当空间数据对待。你需要先用“创建XY事件图层”或者“添加XY坐标”把表格变成带坐标的点。第二图层的坐标系一定要设置正确。如果你不确定就在内容列表里右键图层属性看“源”选项卡里显示的坐标系信息。如果显示的是Unknown后面所有叠加、投影操作都会出问题。第三做放射状流向图时中心点的选取要符合业务逻辑。不是说随手选一个城市而是根据实际OD数据里的高频起点来确定通常是数据中出现次数最多、流量汇聚最集中的那个点。这个点选对了图才真正有解释力。第四图例一定要和分级符号对应。很多同学做完图忘记更新图例导致图例还是默认的单一符号读者根本看不懂线宽的含义。第五输出图片格式方面如果是在ArcMap里使用布局视图导出TIFF和JPG都行但推荐用PNG支持透明背景且没有压缩痕迹放到PPT和Word里更清晰。这些注意事项都是从实际项目中摔出来的经验写在这里给后来者避坑。尤其是坐标系和字段映射这两关过了OD图基本就成功了一大半。我在实际做图的过程中最深的体会是做OD图不难真正花时间的是前期数据清洗和后期符号调整。数据不干净工具再熟悉也白搭。而符号化调整得是否细致直接决定了这张图是“作业水平”还是“汇报水平”。每次做完图我都会问自己一句这张图不看图例别人能看懂吗如果能说明信息传达是成功的如果不能再回去改符号和标注。按照上文这条路子走下来你会发现放射状流向图其实一点都不神秘它就是在合适的坐标系下把OD表变成可视化语言的过程。