python3.x系列小案例集锦(不断更新中......)

前言:

ArcMap中的python环境是2.x,ArcGISPro的Python环境是3.x,3.x系列对中文字符的支持更好,如果用独立的python编辑器(例如:pycharm)使用中文字符时,不需要在脚本中去声明编码格式;同时测试时发现python3.x运行时速度要快很多。另外在pycharm中如何切换python版本,如下图:

1、缩放至图层 

import arcpy
aprx = arcpy.mp.ArcGISProject(r"current")

m = aprx.listMaps()[0]
lyr = m.listLayers("北京各区县")[0]
lyt = aprx.listLayouts("Layout")[0]
mf = lyt.listElements("mapframe_element", "Map Frame")[0]
mf.camera.setExtent(mf.getLayerExtent(lyr, False, True))
import arcpy
aprx = arcpy.mp.ArcGISProject(r"D:\temp\pro\currentproject\Mapping\Mapping3.aprx")

m = aprx.listMaps()[0]
lyr = m.listLayers("北京各区县_1")[0]
lyt = aprx.listLayouts("Layout")[0]
mf = lyt.listElements("mapframe_element", "Map Frame")[0]
mf.camera.setExtent(mf.getLayerExtent(lyr, False, True))

aprx.saveACopy(r"D:\temp\pro\currentproject\Mapping\Mapping4.aprx")
del aprx

其中listElements()函数的解释如下:

listElements ({element_type}, {wildcard})
参数说明数据类型

element_type

代表用于过滤已返回元素列表的元素类型的字符串。

(默认值为 None)

String

wildcard

通配符基于元素名称且不区分大小写。星号 (*) 和字符的组合可用于帮助限制生成的结果。

(默认值为 None)

String

效果图:

参考链接:

https://pro.arcgis.com/zh-cn/pro-app/arcpy/mapping/camera-class.htm

https://pro.arcgis.com/zh-cn/pro-app/arcpy/mapping/layout-class.htm

2、图层符号化

arcmap中的符号是只读的,但是arcgispro中的符号是可以改写的,也就是arcmap中arcpy不能更换图层的符号化方法,但是arcgispro中的arcpy可以。那么如何实现呢?下述例子,讲述了如何更换图层的符号化方法。

import arcpy

myproject = arcpy.mp.ArcGISProject(r"E:\03 资料\python资料大全\python公开课资料\Python 数据处理与制图\demos\demo11\new.aprx")
maps = myproject.listMaps()
m = maps[1]
print(m.name)
for lyr in m.listLayers():
    if lyr.isFeatureLayer:
        sym = lyr.symbology
        if hasattr(sym, 'renderer'):
            if sym.renderer.type == 'SimpleRenderer':
                sym.updateRenderer('GraduatedColorsRenderer')
                sym.renderer.breakCount = 10
                lyr.symbology = sym


mylayer = m.listLayers("主要公路4m")[0]
mysym = mylayer.symbology
colorreb=myproject.listColorRamps()[0]
if hasattr(mysym, 'renderer'):
    # if mysym.renderer.type == 'SimpleRenderer':
        mysym.updateRenderer('GraduatedColorsRenderer')
        mysym.renderer.classificationField = 'Shape_Length'
        mysym.renderer.breakCount = 20
        mysym.renderer.colorRamp = colorreb
        mylayer.symbology = mysym
myproject.saveACopy(r"E:\03 资料\python资料大全\python公开课资料\Python 数据处理与制图\demos\demo11\new111.aprx")

上述例子是将aprx中的第二个地图视图中的图层的符号化方法由默认的简单渲染更改为分级色彩,同时设置了分割数量,并且对“主要公路4m”图层进行单独处理,将其符号化的分类字段设置为shape_length,并且将色带设置为第一个色带。

3、对图层中的不同字段进行IDW插值

#2020-1-19
#对图层中的不同字段进行IDW插值
#
# -*-coding:utf-8-*-
import arcpy
from arcpy import env

env.workspace = r"D:\GPTOOL\空间插值气象站点数据\test.gdb"
inputFeaClsCName="气象数据201706"
outputRasterPath="D:/GPTOOL/output"
# 字段列表
fieldList = arcpy.ListFields(inputFeaClsCName)
# 遍历污染指标
for fld in fieldList:
    # 判断图层要素记录的条数,如果少于3条则提示不能进行空间差值操作;
    # 如果多余或者等于3条,那么可以进行空间插值操作
    featureRecord = arcpy.GetCount_management(inputFeaClsCName)
    featureRecordCount = int(featureRecord.getOutput(0))
    if featureRecordCount <3 :
        print(str(fld.name) + "图层" +  "的要素记录少于3个,不能进行空间差值......")
        break

    if  fld.name.upper() == "OBJECTID" or fld.name.upper() == "SHAPE" or fld.name.upper() == "SHAPE_LENGTH" or fld.name.upper() == "SHAPE_AREA"or fld.name == "sheng"or fld.name== "stationid"or fld.name == "name":
        continue
    else:
        # 将当前遍历出的污染指标赋值给zField,用此作为空间插值的Z值
        zField = fld.name
        outLayer = "outLPI" + str(zField)
        outRaster =  outputRasterPath+ "/"+str(zField) + ".tif"
        cellSize = 3
        power = 2

        # Set variables for search neighborhood
        majSemiaxis = 250
        minSemiaxis = 250
        angle = 0
        maxNeighbors = 15
        minNeighbors = 10
        sectorType = "ONE_SECTOR"
        searchNeighbourhood = arcpy.SearchNeighborhoodStandard(majSemiaxis, minSemiaxis,
                                                               angle, maxNeighbors,
                                                               minNeighbors, sectorType)

        # Check out the ArcGIS Geostatistical Analyst extension license
        arcpy.CheckOutExtension("GeoStats")

        # Execute IDW
        arcpy.IDW_ga(inputFeaClsCName, zField, outLayer, outRaster, cellSize, power, searchNeighbourhood, "")

print("ok.......")

4、批量添加字段:将其它图层(图层A、B)的字段添加到另一图层(图层C)属性表中

https://blog.csdn.net/gislaozhang/article/details/104042653

5、Python工具箱中使用值表(GPValueTable)

https://blog.csdn.net/gislaozhang/article/details/104687007

6、二维矢量拉伸成三维

数据需要有z值

import arcpy
aprx = arcpy.mp.ArcGISProject("CURRENT")
# aprx = arcpy.mp.ArcGISProject("CURRENT")
for m in aprx.listMaps():
    print("Map: " + m.name)
    for lyr in m.listLayers():
        print("  " + lyr.name)
        if lyr.name=="汉街":
            print("ok....")
            lyr.extrusion('BASE_HEIGHT',"100")

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值