arcpy 诸多操作教程代码 读取shp保存到mxd等

本文介绍了使用Python的arcpy模块进行ArcGIS操作的方法,包括读取mxd中的图层,将shp添加到mxd,按属性选择导出shp,以及读取shp和图层的属性字段信息。重点强调了Python2.7的ASCII编码问题及解决方案。

1. 解决途径

        【1】arcgis帮助文档10.2链接,对于有对应工具箱中的tool,那么直接在arcgis软件中点击帮助查看即可,然后再组合。对于一些工具箱中不存在的,需要专门搜索arcpy中对应的函数。

        【2】百度(不一定有合适的)

        【3】chatgpt,由于国外网站的内容质量相较更高一些,并且arcpy的网站也正规,因此chatgpt的arcpy的代码生成质量很高,改动的较小。

        由于arcgis10.x系列均使用python2.7,python2.7采用ASCII编码格式,不像python3采用utf-8,因此写代码时需要特别注意。

2. arcpy的一些使用

       【1】读取mxd中有那些layer

       【2】读取shp,并将shp写入mxd图层

        【3】按属性选择,并导出shp

        【4】读取shp、要素图层的属性字段信息内容

        ......

--------------------------------------------------------------------------------------------------------------

        【1】读取mxd中有那些layer

# -*- coding: utf-8 -*-

'''python独立脚本,推荐采用vscode'''

import os
import time
import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')

mxd = arcpy.mapping.MapDocument(ur"***.mxd")
# df = arcpy.mapping.ListDataFrames(mxd)[0]  # 可不使用
# layers = arcpy.mapping.ListLayers(mxd, "", df)

layers = arcpy.mapping.ListLayers(mxd)
for layer in layers:
    print(layer.name)
    if layer.name=="中文layer名字".decode("utf-8"):
        print(222222)
        break
# 获取此layer的数据源
print(layer.dataSource)

        【2】读取shp,并将shp写入mxd图层

# -*- coding: utf-8 -*-

'''python独立脚本,推荐采用vscode'''

import os
import time
import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')

mxd = arcpy.mapping.MapDocument(mxd_path)
df = arcpy.mapping.ListDataFrames(mxd)[0]

# mxd打开时自动将对应路径的shp添加进arcgis界面,推荐shp_path为相对mxd路径
layer = arcpy.mapping.Layer(shp_path)
arcpy.mapping.AddLayer(df, layer)

# 保存; 删除内存mxd
mxd.save()
del mxd

        【3】按属性选择,并导出shp

# -*- coding: utf-8 -*-

'''python独立脚本,推荐采用vscode'''

import os
import time
import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')


# 按属性查找 sql语句类似如下 不论中英文
sql = "%s='%s'" % (sql_field, k)
# sql = '%s=\'%s\''% (sql_field, k)
# sql = "{}='{}'".format(sql_field, k)

# 创建1个图层layer 即导入shp内容 图层名称为lyr
arcpy.MakeFeatureLayer_management(shp_path, "lyr")

# 在lyr图层上 根据sql 新建内容 相当于重写lyr
arcpy.SelectLayerByAttribute_management("lyr", "NEW_SELECTION", sql)

# 将最新的lyr导出成shp
arcpy.CopyFeatures_management("lyr", os.path.join(save_shp_root, "***.shp"))

time.sleep(1)  # 由于arcpy底层处理可能是异步的 可能阻塞 因此睡一会 要不就容易for遍历程序死掉

# 删除图层layer
arcpy.Delete_management("lyr") 

        【4】读取shp、要素图层的属性字段信息内容

# -*- coding: utf-8 -*-

'''python独立脚本,推荐采用vscode'''

import os
import time
import arcpy
import sys
reload(sys)
sys.setdefaultencoding('utf8')

sql_field = "NAME"
# 若要查询多个字段则在 [] 中填写多个,若全部返回 则写"*",也可去掉[]-没有第2个参数即可arcpy.SearchCursor(shp_path)
# 推荐使用arcpy.da.SearchCursor 其与arcpy.SearchCursor参数有所不同 查看官网文档即可使用
# https://resources.arcgis.com/en/help/main/10.2/index.html#//018w00000011000000
shp_rows = arcpy.SearchCursor(shp_path, [sql_field])

# 遍历每一行 字段内容
while True:
    row = shp_rows.next()
    if not row:
        break
    # name = row.NAME # 不推荐这样使用
    name = row.getValue(sql_field)
    print(name)

### ArcGISMXDSHP 文件的区别与用途 #### 定义与功能差异 MXD文件是ArcGIS的项目文件,包含了地图布局的所有元素,如图层、符号样式、比例尺和图例等[^1]。此类型的文件主要用于保存整个地图项目的配置信息以及可视化设置。 相比之下,SHP文件是一种矢量数据格式,专门用来存储地理特征的位置、形状及其属性信息。这类文件并不包含任何关于如何显示这些要素的信息——这通常是在MXD或其他类似的制图环境中定义的[^2]。 #### 数据存储方式的不同 MXD文件本质上是一个容器,它记录了指向各个图层和其他资源(例如图像或表格)的链接路径,而不是实际的数据副本。因此,在打开一个MXD文件时,如果原始数据源发生了变化,则可能会看到更新后的结果。 另一方面,SHP文件则是独立存在的实体,它们直接保存着具体的地理位置坐标及相关描述字段等内容。这意味着即使脱离了创建它的应用程序环境之外,只要拥有相应的解析工具,仍然可以读取并利用其中所含有的空间信息[^3]。 #### 应用场景对比 当涉及到复杂的地图制作过程时,比如需要精确控制不同层次之间的叠加顺序、应用高级渲染效果或是准备出版质量的地图产品时,MXD文件就显得尤为重要。通过它可以轻松管理多个数据集,并实现一键式的高质量输出。 而对于那些侧重于数据分析而非最终呈现的任务来说,SHP文件则更为实用。由于其轻量化的特点加上广泛的支持度,使得这种格式非常适合用于交换共享地理信息资源,尤其是在互联网上传播小型至中型规模的空间数据集方面表现出色。 ```python import arcpy # 打开现有的MXD文件 mxd = arcpy.mapping.MapDocument(r"C:\path\to\yourfile.mxd") # 列出所有的图层名称 for lyr in arcpy.mapping.ListLayers(mxd): print(lyr.name) del mxd # 关闭MXD对象以释放资源 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值