arcgisPro
arcgisPro制图出图
新建布局
- 新建布局,如下:


插入地图
- 插入地图框,如下:


点击之后,鼠标图标变化成十字架样式,随后在布局纸张内按住左键,向右划出一个区域,该区域即为地图显示区域。结果如下:

选中地图框,激活地图框,如下:

激活之后,就可以使用鼠标滚轮放大缩小地图在纸张内的大小。也就是说,激活后,地图框之外的部分会被固定住,此时可调节地图在纸张上的大小。

添加要素
- 添加指北针,图例、标题。如下:
首先,要取消激活,
然后插入相关信息


插入网格
输出地图
- 地图输出。如下:



参考来源
- 参考来源: CSDN
投影转换
ArcGIS Pro 中将数据从 EPSG:4546 (CGCS2000 / 3-degree Gauss-Kruger CM 120E) 转换为 EPSG:3857 (WGS 84 / Pseudo-Mercator) 可以通过以下几种核心方法实现。
EPSG:4546 是一个投影坐标系(基于CGCS2000大地基准,使用高斯-克吕格投影),而 EPSG:3857 是另一个投影坐标系(基于WGS84大地基准,使用Web墨卡托投影)。因此,这个转换过程通常包含两个步骤:
将源投影坐标系反向投影到其对应的地理坐标系(CGCS2000,EPSG:4490)。
将地理坐标系(CGCS2000)转换到另一个地理坐标系(WGS84,EPSG:4326)。这一步通常需要一个地理变换(Geographic Transformation),因为CGCS2000和WGS84使用的是不同的椭球体和基准面。
最后将WGS84地理坐标系投影到目标投影坐标系(Web墨卡托,EPSG:3857)。
ArcGIS Pro 会自动处理这些步骤,但你需要注意选择正确的地理变换。
设置数据框的坐标系(动态投影) - 适用于可视化
这是最简单的方法,适用于临时查看和与其他数据(如在线底图)叠加,不会永久修改源数据。
打开工程:在 ArcGIS Pro 中打开包含您的 EPSG:4546 数据的工程。
添加在线底图(可选但推荐):为了直观地看到转换效果,可以添加一个使用 EPSG:3857 的在线底图(如“世界影像图”或“OpenStreetMap”)。添加后,您的数据框坐标系会自动变为 EPSG:3857,您的数据可能会暂时错位。
更改数据框坐标系:
- 在内容列表(Contents)中,右键单击 Map(或您的数据框名称),选择 Properties。
- 在弹出的地图属性窗口中,选择 Coordinate Systems 选项卡。
- 在顶部的搜索框中输入
3857,然后从列表中找到并选择 **WGS 84 / Pseudo-Mercator (EPSG:3857)**。 - 点击 确定。
处理地理变换警告(关键步骤):
- 当两个坐标系的大地基准不同时,ArcGIS Pro 会弹出一个 Geographic Transformation Warning 对话框。
- 它会提示你需要一个变换才能正确地将数据从 CGCS2000 转换到 WGS84。
- 在 Transformations 区域,ArcGIS Pro 通常会自动推荐一个最合适的变换方法。对于中国区域的CGCS2000到WGS84,常见的推荐变换是:
CGCS2000_to_WGS_1984_1(精度较低,适用于中国大陆)CGCS2000_to_WGS_1984_2(精度较高,适用于中国近海)
- 如果系统没有自动选择,请点击下拉菜单手动选择一个。对于大部分情况,使用默认推荐即可。
- 点击 确定 关闭对话框。
现在,您的数据框将显示在 EPSG:3857 坐标系下,数据被动态投影并正确叠加在在线底图上。这只是视觉上的改变,您的源数据文件本身没有被修改。
使用“投影”工具(Project Tool) - 用于永久转换数据
此方法会创建一个新的、永久转换后的数据集(如新的要素类或Shapefile)。这是最标准、最推荐的数据处理方式。
打开工具:
- 在顶部功能区点击 Analysis 选项卡。
- 点击 Tools 按钮打开 Geoprocessing 面板。
- 在搜索框中输入
Project(投影),然后从结果中选择 Project (Data Management) 工具。
设置参数:
- Input Dataset or Feature Class:选择你要转换的 EPSG:4546 数据。
- Output Dataset or Feature Class:指定输出数据的保存路径和名称(如
MyData_3857)。 - Output Coordinate System:点击右侧的“地球仪”图标,在搜索框中输入
3857,然后选择 **WGS 84 / Pseudo-Mercator (EPSG:3857)**。 - **Geographic Transformation (可选但关键)**:
- 当你设置好输出坐标系后,这个参数框会被激活。
- 点击下拉菜单,系统会列出所有可用的从 CGCS2000 到 WGS84 的变换方法。
- 同样,选择系统推荐的或适合你数据区域的变换(如
CGCS2000_to_WGS_1984_1)。
运行:点击 Run 执行工具。
工具运行完成后,你会得到一个新的、坐标系为 EPSG:3857 的数据集。你可以将它添加到地图中,它会完美地与在线底图对齐。
使用“导出”功能 - 快速创建新数据
这是一个基于图形界面的快捷方式,本质上也调用了“投影”工具。
- 在内容列表(Contents)中,右键单击你要转换的图层。
- 选择 Data -> Export Features。
- 在弹出的 Export Features 窗口中:
- 设置 Output Feature Class 的路径和名称。
- 点击 Output Coordinate System 旁的“地球仪”图标,选择 EPSG:3857。
- 点击 Run。同样,系统在后台处理时会自动应用必要的地理变换。
总结与关键点
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 方法一:设置数据框 | 快速、非破坏性、不创建新数据 | 只改变显示,不改变源数据 | 临时查看、制图、与在线底图叠加 |
| 方法二:投影工具 | 创建永久转换后的新数据,可精确控制参数 | 需要运行工具,生成新文件 | 数据处理、分析、共享和发布 |
| 方法三:导出要素 | 操作简单快捷 | 参数选项相对“投影”工具较少 | 快速创建新数据文件 |
核心注意事项:
- 地理变换 (Geographic Transformation):这是最关键的一步。CGCS2000 和 WGS84 之间存在微小但不可忽略的差异(尽管非常接近,约1米内)。如果不指定地理变换,ArcGIS Pro 可能会默认进行简单的经纬度赋值,导致转换结果存在微小偏差。请务必在弹出警告或工具参数中确认已选择了合适的地理变换。
- 自动选择:对于中国大陆的数据,信任 ArcGIS Pro 自动推荐的变换(如
CGCS2000_to_WGS_1984_1)通常是安全且正确的。
对于绝大多数用户,推荐使用“方法二:投影工具”,因为它是最规范、功能最全的数据处理流程。
定义投影?
如果您的原始数据没有坐标系定义(在ArcGIS Pro中显示为“Unknown”),那么直接进行转换是无效的。您必须先正确地告诉ArcGIS Pro这个数据实际使用的坐标系是什么。
这个过程叫做“定义投影”。请注意,这个工具只是修改了数据的元数据,告诉软件它的坐标值是基于哪个坐标系的,并不会改变坐标值本身。如果定义错了,后续所有操作都会错。
确认原始数据的真实坐标系
在定义之前,你必须百分之百确认你的数据使用的就是 EPSG:4546。可以通过以下方法验证:
- 数据来源:数据提供方是否明确说明了坐标系?
- 坐标值范围:
- 在ArcGIS Pro中右键图层 -> Attribute Table,打开属性表。
- 右键 Shape 或 Geometry 字段 -> Calculate Geometry。
- 查看一个点的X和Y坐标值。如果X坐标值在 12000000 左右(例如 12345678.9),Y坐标值在 4百万左右(例如 4321000.0),这非常符合高斯-克吕格投影(带号120°E)的坐标特征,单位是米,基本可以确定是EPSG:4546。
使用“定义投影”工具
确认无误后,就可以使用工具来定义投影了。
打开工具:
- 在顶部功能区点击 Analysis 选项卡。
- 点击 Tools 按钮打开 Geoprocessing 面板。
- 在搜索框中输入
Define Projection,然后从结果中选择 Define Projection (Data Management) 工具。
设置参数:
- Input Dataset or Feature Class:选择你的“Unknown”原始数据。
- Coordinate System:点击右侧的“地球仪”图标。
- 在弹出的坐标系统窗口中,在搜索框里输入
4546或CGCS2000 120E。 - 从列表中找到并选择 **CGCS2000 / 3-degree Gauss-Kruger CM 120E (EPSG:4546)**。
- 点击 OK。
运行:点击 Run 执行工具。
工具运行完成后,数据的元数据就被更新了。你现在可以在内容列表(Contents)中右键该图层 -> Properties -> Source 选项卡中,看到它的坐标系已经正确显示为 EPSG:4546。
完整的后续工作流程
现在,你的数据已经有了正确的投影定义,接下来就可以按照我们第一次讨论的方法进行转换了:
- 定义投影(你刚完成的步骤):
Unknown->EPSG:4546 - 投影转换(接下来的步骤):
EPSG:4546->EPSG:3857
使用“投影”工具完成第二步:
- 再次打开 Geoprocessing 面板,搜索并运行 Project 工具。
- 输入:你刚定义好投影的数据。
- 输出坐标系:选择
EPSG:3857。 - 地理变换:在 Geographic Transformation 参数中选择一个合适的变换(如
CGCS2000_to_WGS_1984_1)。 - 运行工具,即可得到最终想要的
EPSG:3857数据。
重要警告和注意事项
- 切勿滥用:“定义投影”工具仅在数据坐标系元数据丢失或错误时使用。如果你的数据本来就是
EPSG:4326(WGS84经纬度),你错误地给它定义了EPSG:4546,那它的位置会变得完全错误,因为软件会把本应是度分的坐标值误认为是米。 - 备份数据:在对原始数据进行操作前,最好先复制一份备份。
- 如果定义错了怎么办:如果不小心定义错了坐标系,解决方法是:
- 再次运行“定义投影”工具,选择它原本正确的坐标系(如果你还记得的话)。
- 如果不知道原本正确的坐标系,那就比较麻烦了,可能需要重新找数据源或联系提供方。
总结:先通过来源或坐标值确认坐标系,然后用 “定义投影” 工具为其指定正确的坐标系(EPSG:4546),最后再用 “投影” 工具进行真正的坐标转换(到EPSG:3857)。
加载GCP数据
怎么将CSV文件GCP数据加载到 arcgis pro项目中?
步骤 1: 准备CSV文件
检查CSV文件格式:
- 确保CSV文件中包含GCP的地理坐标信息。
- 至少需要有两列:一列表示经度(Longitude)或X坐标,另一列表示纬度(Latitude)或Y坐标。如果GCP使用的是投影坐标系(如UTM),那么这两列应分别表示X和Y坐标。
- 示例:
ID, X, Y, Name
1, 112.1234, 23.4567, GCP_1
2, 112.2345, 23.5678, GCP_2
步骤2:将CSV文件加载到ArcGIS Pro
- 打开ArcGIS Pro:
启动ArcGIS Pro,并打开您需要处理的项目。
- 添加CSV文件到项目:
- 在内容面板(Contents pane)中,右键点击地图(Map),选择添加数据(Add Data)。
- 导航到保存CSV文件的位置,选择该文件并点击添加(Add)。
CSV文件会被加载到ArcGIS Pro的内容面板中。
步骤3:将CSV文件转换为点要素图层
显示XY数据:
在内容面板(Contents pane)中,右键点击刚刚加载的CSV文件图层,选择显示XY数据(Display XY Data)。
设置字段映射:
在弹出的窗口中,设置对应的坐标字段:
X字段(X Field):选择CSV文件中表示经度或X坐标的列。
Y字段(Y Field):选择CSV文件中表示纬度或Y坐标的列。
设置坐标系:
在同一窗口中,点击坐标系(Coordinate System)按钮,选择GCP数据所在的坐标系。
如果数据为经纬度坐标(WGS_1984或CGCS_2000),请选择合适的地理坐标系;如果数据是UTM坐标,请选择正确的投影坐标系。
完成转换:
点击“确定(OK)”,ArcGIS Pro会将CSV文件转换为一个点要素图层,并显示在地图上。
步骤4:检查和保存点要素图层
检查和保存点要素图层
检查数据:
转换完成后,检查GCP点是否正确显示在地图上,确保它们位于预期的地理位置。
保存为矢量数据集:
右键点击新生成的点要素图层,在弹出的菜单中选择数据(Data) > 导出要素(Export Features)。
选择输出文件格式(例如Shapefile或GeoDatabase Feature Class),并保存为新的数据集。
通过上述步骤,您可以将CSV文件中的GCP数据加载到ArcGIS Pro中,并将其转换为点要素图层,供后续的地理配准或其他空间分析使用。
计算shp面积
转换投影并计算面积
EPSG:4326 是 地理坐标系必须投影到等积或近似等积的投影坐标系(单位:米) 才能正确统计面积。最常用的是 UTM
- ArcGIS Pro 中转换投影
Analysis → Tools → Search → “Project”
Project 工具参数设置
| 参数 | 内容 |
|---|---|
| Input Dataset | 你的 EPSG:4326 的 polygon shp |
| Input Coordinate System | WGS 1984(EPSG 4326) |
| Output Dataset | 例如:landuse_UTM49N.shp |
| Output Coordinate System | WGS 1984 UTM Zone XXN(根据你研究区选择) |
如果你在中国大陆,可按经度选择:
| 经度范围 | UTM Zone |
|---|---|
| 108°E–114°E | 49N |
| 114°E–120°E | 50N |
| 120°E–126°E | 51N |
例如海南 → UTM 49N。 |
- 检查投影是否正确
右键图层→Properties→Source
确认:
Projected Coordinate System: WGS_1984_UTM_Zone_49N
Units: meter
- 计算真实面积(
m²或hm²)
添加字段:
右键图层 → Attribute Table → Add Field
| 字段名 | 类型 | 说明 |
|---|---|---|
| Area_m2 | Double | 存面积(m²) |
| Area_hm2 | Double | 存面积(公顷,hm²) |
计算面积字段:
右键 Area_m2 → Calculate Field:
!shape.area@SQUAREMETERS!
计算 Area_hm2:
!shape.area@HECTARES!
计算行总面积
打开图层属性表
找到字段 Area_hm2
右键字段名称 → Statistics(统计)
弹出的统计窗口中找到:Sum = xxx.xx
这就是所有行的总面积(单位:hm²)。
分区统计面积
如何统计斑块面积在(0,1hm2], (1,5], (5,10],大于 10hm2,这些区间的斑块数目?
创建面积(hm²)字段
打开图层属性表
点击
Add Field(添加字段)字段名:
Area_hm2类型:
Double右键字段 →
Calculate Field表达式:
!shape.area@SQUAREMETERS! / 10000, (把面积从 m² 转为 hm²)
创建分类字段, 用于把每个 polygon 分到对应区间。
再添加一个
字段:字段名:
AreaClass类型:
Text(长度 ≥ 20)右键 →
Calculate Field选择解析器:
Python 3表达式输入:
classify(!Area_hm2!)在
代码块输入以下代码:
def classify(a):
if a is None:
return "Unknown"
if 0 < a <= 1:
return "(0,1]"
elif 1 < a <= 5:
return "(1,5]"
elif 5 < a <= 10:
return "(5,10]"
elif a > 10:
return ">10"
else:
return "Unknown"

- 统计每个区间的斑块数量
使用 频率统计(Frequency) 工具: Analysis → Tools → Search “Frequency”
设置:
| 参数 | 内容 |
|---|---|
| Input Table | 你的 polygon 图层 |
| Frequency Fields | AreaClass |
| Summary Fields | 可留空 |
| Output Table | 自己命名 |
运行后得到类似表:
| AreaClass | FREQUENCY |
|---|---|
| (0,1] | 128 |
| (1,5] | 93 |
| (5,10] | 21 |
| >10 | 6 |
这就是每个面积区间的 斑块数量。
严重侵蚀
查找严重侵蚀区域
arcgis 10.8
- 右键字段 → “计算字段值(Field Calculator)”
- 在计算器窗口 上方选择:解析器(Parser) → 选择 Python, 勾选 “显示代码块(Show Codeblock)”
- 上方的“表达式(Expression)”框:
classify(!NSM!), 下方的“代码块(Code Block)”框:
def classify(n):
try:
val = float(n)
if val <= -75:
return "Retreat>=75m"
else:
return "Other"
except:
return "Other"
- 你要计算的字段(Category)应当是:类型:
Text(文本), 长度:建议 ≥ 20
统计严重侵蚀比率
统计Retreat≥75m的岸线长度,占总岸线长度的百分比
import arcpy
import os
# ------------------------------
# 输入参数(请根据自己的路径修改)
# ------------------------------
transects_rate = r"E:\prj_zhu\DSAS_HeKou\south_transects_rates_20251105_210516.shp" # South transects_rate shp
# transects_rate = r"E:\prj_zhu\DSAS_HeKou\north_transect_rates_20251105_203057.shp" # north
# transects_rate = r"E:\prj_zhu\DSAS_HeKou\shoreline_trans.shp" # 延伸线
shoreline = r"E:\prj_zhu\DSAS_HeKou\south_2025.shp" # south 原始岸线
# shoreline = r"E:\prj_zhu\DSAS_HeKou\north_2025.shp" # north 原始岸线
# shoreline = r"E:\prj_zhu\DSAS_HeKou\shoreline_2025.shp" # 延伸线
nsm_threshold = -75 # 退缩阈值
arcpy.env.workspace = r"E:\prj_zhu\DSAS_HeKou"
arcpy.env.overwriteOutput = True
output_table = r"E:\prj_zhu\DSAS_HeKou\retreat_summary.dbf"
# ------------------------------
# 1️⃣ 检查输入文件
for f in [transects_rate, shoreline]:
if not arcpy.Exists(f):
raise Exception("输入文件不存在: {}".format(f))
# 2️⃣ Shoreline 总长度字段
length_field_shoreline = "Length_m"
fields = [f.name for f in arcpy.ListFields(shoreline)]
if length_field_shoreline not in fields:
arcpy.management.AddField(shoreline, length_field_shoreline, "DOUBLE")
# 使用 shape.length3D 处理带 Z/M 值的岸线
arcpy.management.CalculateField(shoreline, length_field_shoreline, "!shape.length3D!", "PYTHON_9.3")
# 3️⃣ 统计总岸线长度
total_length = 0.0
with arcpy.da.SearchCursor(shoreline, [length_field_shoreline]) as cursor:
for row in cursor:
total_length += row[0]
# 4️⃣ 确认 transects_rate 有 NSM 字段
transect_fields = [f.name for f in arcpy.ListFields(transects_rate)]
nsm_field = None
for f in transect_fields:
if f.lower() == "nsm":
nsm_field = f
break
if nsm_field is None:
raise Exception("transects_rate shapefile 中未找到 NSM 字段")
# 5️⃣ 统计退缩 transects(NSM <= 阈值)的数量
count_retreat = 0
with arcpy.da.SearchCursor(transects_rate, [nsm_field]) as cursor:
for row in cursor:
nsm_val = row[0]
if nsm_val is not None and nsm_val <= nsm_threshold:
count_retreat += 1
# 6️⃣ 估算退缩长度占比
# 方法:退缩长度占比 ≈ 退缩 transects 数 / transects 总数 × shoreine 总长度
total_transects = int(arcpy.GetCount_management(transects_rate).getOutput(0))
if total_transects == 0:
raise Exception("transects_rate 中没有 transect")
retreat_length = (count_retreat / float(total_transects)) * total_length
percent_retreat = (retreat_length / total_length) * 100 if total_length != 0 else 0
# 7️⃣ 输出 DBF 表
if arcpy.Exists(output_table):
arcpy.management.Delete(output_table)
arcpy.management.CreateTable(arcpy.env.workspace, os.path.basename(output_table))
arcpy.management.AddField(output_table, "Category", "TEXT") # 8 个字符
arcpy.management.AddField(output_table, "SUM_LEN", "DOUBLE") # 7 个字符
arcpy.management.AddField(output_table, "Percent", "DOUBLE") # 7 个字符
with arcpy.da.InsertCursor(output_table, ["Category", "SUM_LEN", "Percent"]) as cursor:
cursor.insertRow(["Retreat>=75m", retreat_length, percent_retreat])
# 8️⃣ 打印结果
print("总岸线长度: {:.2f} m".format(total_length))
print("退缩岸线长度: {:.2f} m".format(retreat_length))
print("退缩占比: {:.2f} %".format(percent_retreat))
运行结果:

矢量编辑
打断线
打开你的工程,并加载要操作的线图层。
在顶部菜单栏点击:
编辑(Edit) → 选择(Select)在菜单栏中选择:
编辑(Edit) → 分割(Split), 鼠标指针会变成分割符号。 在想要打断的位置上 单击一次,系统会自动把线在该点打断。打断完成后,点击保存编辑(Save Edits)。
kml 转 shp
- 在 Catalog(目录)面板 中,展开:
Toolboxes → Conversion Tools → From KML - 双击工具 KML To Layer;在参数中设置:
Input KML File:选择你的 .kml 或 .kmz 文件;Output Location:选择输出文件夹;Output Data Name:设置输出文件名(生成一个 .gdb 数据库和图层文件)。
运行后会生成一个 File Geodatabase (.gdb),其中包含一个或多个要素类(点、线、面)。







