arcmap教程怎样导出坐标?最全arcmap教程入门解析
很多同学在 ArcMap 做完制图或分析后,会被“如何把要素的坐标导出来”难住:点要导出经纬度还是投影坐标?线面该取哪个点代表?数据框坐标系与图层坐标系不一致会不会错位?作为实践导向的总结,我将用通俗但严谨的方式,把常见方法、注意事项与自动化方案讲清楚。
基础认知:坐标值是什么、来自哪里?
在 ArcGIS Desktop(ArcMap)里,坐标值本质上来自几何对象(Geometry)。同一个地物,在不同坐标参考系(Spatial Reference)下会呈现不同的数字。理解这一点,比“按哪个按钮”更重要。
- 地理坐标系(GCS):单位为度(经纬度)。示例:WGS 1984。
- 投影坐标系(PCS):单位常为米或英尺。示例:CGCS2000 / 高斯-克吕格某带、Web Mercator、UTM。
- 数据框 vs 图层坐标系:ArcMap 的数据框可以“动态重投影”显示;而工具计算时可能以“图层自身坐标系”为准。选择不当,数字会“看似正常却单位错误”。
因此,在导出坐标前,先回答两个问题:我要导出到哪个坐标系(度还是米)?我要导出的是哪个几何位置(点坐标、线的中点、面的质心或顶点)?
方法一:零代码,内置工具快速导出
这是多数人最稳妥的路径,适合点、线、面的“代表点”坐标导出。
- 检查坐标系:在内容列表中右键图层→属性→源信息,核对坐标系;再检查数据框坐标系(数据框→属性→坐标系)。确保你知道“以谁为准”。
- 点图层直接生成 XY 字段:
- 使用 工具箱→数据管理→要素→“Add XY Coordinates”。它会在属性表新增字段 POINT_X、POINT_Y(以及 Z/M 若存在)。
- 注意:该工具的计算基于图层数据源的坐标系,不是数据框。若你需要经纬度而数据源是投影坐标,先对图层投影到目标坐标系或用下面的“计算几何”。
- 线/面或需要特定坐标系时:计算几何:
- 在属性表新建两个字段(类型:Double),命名如 X、Y。
- 右键字段→“计算几何”,选择“X 坐标/质心(或点坐标/顶点)”;勾选“使用数据框坐标系”,即可在数据框坐标系(例如 WGS84)下生成数值。
- 对于线,可选择“长度加权中心”不合适时,优先使用“几何质心”或“线中点”(中点可通过字段计算器或地理处理工具实现,见下文)。
- 导出为表格:
- 属性表左上角菜单→导出→保存为 dBASE 或 .txt;或用 工具箱→转换工具→到地理数据库→“Table To Table” 输出到 .csv。
- 建议输出 CSV 并在表头说明坐标系与单位。
OID | NAME | POINT_X | POINT_Y | 备注 |
---|---|---|---|---|
1 | A | 116.39135 | 39.90750 | WGS84,经纬度 |
2 | B | 500123.12 | 4420012.77 | UTM 50N,米 |
方法二:字段计算器(Python 解析器),灵活取点
当你需要“点取 first vertex、线取中点、面取质心”或“在计算时就转坐标系”,字段计算器的 Python 解析器非常好用。
基础:直接读取几何属性(使用图层坐标系)
- 新增字段 X、Y(Double)。
- 右键字段→“字段计算”,选择解析器为 Python,勾选“显示代码块”。
- 常用表达式:
- 点要素:在 X 字段表达式填 !SHAPE!.firstPoint.X;在 Y 字段填 !SHAPE!.firstPoint.Y。
- 线/面代表点(质心):X 用 !SHAPE!.centroid.X;Y 用 !SHAPE!.centroid.Y。
- 线中点(测地或按线路径):可在代码块内定义函数,表达式调用:
# 代码块(Python)
def midx(shp):
return shp.positionAlongLine(0.5, True).firstPoint.X
def midy(shp):
return shp.positionAlongLine(0.5, True).firstPoint.Y
# X 字段表达式
midx(!SHAPE!)
# Y 字段表达式
midy(!SHAPE!)
进阶:计算时就投影到目标坐标系(例如 WGS84)
# 代码块
import arcpy
sr = arcpy.SpatialReference(4326) # WGS 1984
def projX(shp):
return shp.projectAs(sr).centroid.X
def projY(shp):
return shp.projectAs(sr).centroid.Y
# X 字段表达式
projX(!SHAPE!)
# Y 字段表达式
projY(!SHAPE!)
提示:
- 字段计算器默认使用图层自身坐标系;若使用 projectAs,请确保本地已安装正确的坐标变换方法(尤其国内坐标系间转换)。
- 对多部件几何(multipart),centroid 默认会对整体求质心;若需针对每一部件,可先“Explode”或用地理处理将多部件拆分。
方法三:批量自动化导出为 CSV(ArcPy)
当数据量大、需要可复用脚本时,推荐使用 arcpy.da 搜索游标导出。
# coding: utf-8
import arcpy, csv, os
fc = r"C:Datamy.gdbfeatures" # 输入要素类或图层
out_csv = r"C:Datacoords.csv"
target_sr = arcpy.SpatialReference(4326) # 目标坐标系(WGS 1984)
fields = ["OID@", "SHAPE@", "NAME"] # 根据需要附带属性
rows = []
with arcpy.da.SearchCursor(fc, fields) as cur:
for oid, geom, name in cur:
if not geom:
continue
# 代表点:点要素为自身,线/面取质心
g = geom.projectAs(target_sr) if geom.spatialReference and target_sr else geom
p = g.centroid
rows.append((oid, name, p.X, p.Y))
with open(out_csv, "w", newline="") as f:
w = csv.writer(f)
w.writerow(["OID", "NAME", "X", "Y", "SRID"])
for r in rows:
w.writerow([r[0], r[1], "{:.8f}".format(r[2]), "{:.8f}".format(r[3]), target_sr.factoryCode if target_sr else ""])
print("OK:", out_csv)
要导出点要素的真实观测坐标,可将代表点改为 geom.firstPoint;要导出线中点,用 geom.positionAlongLine(0.5, True).firstPoint;若要导出所有顶点,见下一节。
进阶:导出顶点坐标或沿线加密点
当下游需要每个顶点或等距采样点时,推荐两种路线。
- 无代码工作流:
- 工具箱→数据管理→要素→“Feature Vertices To Points”(可选 ALL、START、END)。
- 再对输出点图层使用“Add XY Coordinates”或“计算几何”,最后导出表格。
- 等距采样:工具箱→数据管理→要素→“Generate Points Along Lines”,指定间距后重复上一步。
- ArcPy 精细控制:
# 导出所有顶点坐标(含部件与环)
import arcpy, csv
fc = r"C:Datamy.gdbpoly_or_line"
sr = arcpy.SpatialReference(4326) # 若需要统一到 WGS84
out_csv = r"C:Datavertices.csv"
with open(out_csv, "w", newline="") as f:
w = csv.writer(f)
w.writerow(["OID", "PART", "VERT_IDX", "X", "Y"])
with arcpy.da.SearchCursor(fc, ["OID@", "SHAPE@"]) as cur:
for oid, geom in cur:
if not geom:
continue
g = geom.projectAs(sr) if sr else geom
part_id = 0
for part in g: # 每个部件(外环/内环)
vert_id = 0
for pt in part:
if pt: # 跳过可能的 None(表示环分隔)
w.writerow([oid, part_id, vert_id, "{:.8f}".format(pt.X), "{:.8f}".format(pt.Y)])
vert_id += 1
part_id += 1
print("OK:", out_csv)
常见陷阱与校验清单
- 单位错位:导出数值“看着很大/很小”,多数是 PCS 与 GCS 混用。明确“需要度还是米”。
- 坐标系未定义或定义错误:Define Projection 与 Project 是两件事。未定义请先正确定义,再 Project。
- 动态重投影误解:数据框重投影仅影响显示;某些工具(如 Add XY Coordinates、字段计算器直取 firstPoint/centroid)默认用图层坐标系。
- 多部件与洞:面的几何质心可能落在洞内;需要“真实质心”或“点在面内”的,可选 true centroid 或用“Feature To Point(Inside)”。
- 经度跨 180°:跨经线的线/面,质心可能不直观;可按业务改用“加权中点”或分割后处理。
- 精度与格式:Double 字段保留小数位建议 6–8 位;CSV 导出时写明坐标系与单位,避免二次误解。
- 变换方法:不同大地基准间转换(例如 CGCS2000 ↔︎ WGS84)需合适的地理坐标变换参数;在项目中统一约定并固化为模型或脚本。
工作流模板(可直接照做)
- 明确目标坐标系与代表位置(点/中点/质心/顶点)。
- 检查并修正图层的坐标系定义,必要时使用 Project 生成目标坐标系副本。
- 点用 Add XY;线/面或跨坐标系计算用“计算几何”或字段计算器 Python。
- 导出表格为 CSV(Table To Table),在表头或元数据写明坐标系与单位。
- 抽检 3–5 个要素:在数据框开启坐标捕捉或用 Identify 工具核对数值与位置一致性。
结语
要点回顾:坐标导出=明确坐标系+选定代表点+正确工具路径。零代码方法快捷稳妥;字段计算器灵活好用;ArcPy 适合批量与可复用。任何“数值对不上”的问题,十有八九是坐标系与单位造成。
你的团队更常用哪种坐标导出方式?是否遇到过“值对、图不对”的情况?欢迎把案例与问题发给我,我们一起打磨成最佳实践。也欢迎关注 GIS研习社(gisyxs.com),与同行持续切磋。
参考文献
- ArcGIS Desktop: Add XY Coordinates(Data Management)
- ArcMap: Calculating Geometry Attributes
- Field Calculator: Python Examples
- arcpy.da.SearchCursor
- Feature Vertices To Points
- Generate Points Along Lines
-
ArcMap入门指南:从解答arcmap和arcgis一样吗、arcmap是什么软件谈起 2025-09-28 12:49:33
-
arcmap内容列表怎么调出来,arcmap左边的内容列表不见哪里开及arcmap怎么显示地块名称解析 2025-09-28 11:24:07
-
ArcMap新手教程:arcmap转换坐标系与arcmap怎么导入地图解析 2025-09-28 10:30:49
-
arcmap教程入门指南,带你全面掌握arcmap10.7教程 2025-08-27 17:09:12
-
arcmap教程入门指南,从arcmap基础操作学起 2025-08-27 17:09:12
-
arcmap教程详解:arcmap新手教程 入门教程全解析 2025-08-27 17:09:11
-
arcmap教程入门指南,轻松掌握arcmap基础教程要点 2025-08-27 17:09:10
-
arcmap教程全解,包含arcmap使用教程入门方法 2025-08-27 17:09:09
-
arcmap教程入门指南,含arcmap新手视频教程解析 2025-08-27 17:09:09
-
arcmap教程入门到精通详解,轻松掌握arcmap教程 2025-08-25 14:48:31
-
arcmap属性表导出excel详解,arcmap实用操作入门 2025-08-25 14:48:30
-
arcmap怎么读?最全arcmap入门解析与发音指南 2025-08-25 14:48:29
-
arcmap如何加载奥维影像,arcmap详细入门解析 2025-08-25 14:48:28
-
arcmap下载全攻略,arcmap新手入门详细解析 2025-08-25 14:48:27
-
arcmap怎么导出shp文件?arcmap详细操作教程解析 2025-08-25 14:48:27
-
arcmap怎么导入地图详细解析,arcmap新手入门指南 2025-08-25 14:48:26
-
arcmap是什么软件?一文读懂arcmap功能与应用 2025-08-25 14:48:25
-
arcmap和arcgis一样吗?arcmap入门解析全面解答 2025-08-25 14:48:24
-
arcmap入门指南,全面解析arcmap基础与应用 2025-08-25 14:48:24
-
arcmap基础操作详解,arcmap教程新手入门必看 2025-08-25 14:48:23