【ArcGIS技巧】—村庄规划规划用地规划状态字段生成工具

"国土空间规划后续也是走向数据治理,数据建库已经是涉及到城市规划、建筑、市政、农业、地理信息、测绘等等方方面面。不得不说以后数据库建设跟维护,是很多专业的必修课。小编就湖南省的村庄规划建库过程中规划用地用海中规划状态字段写了个小工具,觉得有用的可以下载试试。"

1、数据准备

首先得有现状地类图斑、规划地类图斑两个要素图层,湖南省的村庄规划,这两个图层就是表达现状用地、规划用地。具体的地类图例对应的字段YJDLMC(规划一级地类)。

打开工具箱下面---规划状态字段确定脚本,输入规划地类图斑与现状地类图斑两个参数,确定运行工具即可。

完成后会生成GHZT字段(没有会新建),字段会根据规划地类图斑的YJDLMC字段是否变化做出判断,"10"为现状,"20"为规划。

2、脚本代码

具体代码:

python 复制代码
# -*- coding:utf-8 -*-
'''
判断规划用地与现状用地的区别,从而填写规划状态,与现状用地在地类与面积都一致,规划状态为"现状":"10","规划"填"20","在(待)建"填"30","其他"填"90"。
'''
import sys
import arcpy
import os
reload(sys)
sys.setdefaultencoding('utf-8')

# 设置工作空间
arcpy.env.workspace="in_memory" # 可以使用内存工作空间提高性能
arcpy.env.overwriteOutput=True

# 输入参数
gh_tb=arcpy.GetParameterAsText(0) #规划图斑
xz_tb=arcpy.GetParameterAsText(1) #现状图斑
yjdlmc_field="YJDLMC" #一级地类名称字段
ghzt_field="GHZT" #要添加的规划状态字段

try:
    # 检查规划图斑中是否已存在GHZT字符安,不存在则添加
    fields=arcpy.ListFields(gh_tb)
    has_ghzt=False
    for field in fields:
        if field.name==ghzt_field:
            has_ghzt=True
            break
    if not has_ghzt:
        arcpy.AddField_management(gh_tb,ghzt_field,"TEXT",field_length=255)

    # 创建空间连接临时图层,找出规划图斑与现状图斑相交的部分
    temp_fc="in_memory/temp_identity"
    arcpy.Identity_analysis(gh_tb,xz_tb,temp_fc,join_attributes="ALL")
    # 创建字典存储每个规划图斑的FID及其对应的YJDLMC是否变化
    change_dict={}
    gh_oid_field=None 
    #标识结果中规划图斑的原始ID字段
    for field in arcpy.ListFields(temp_fc):
        if field.name.startswith("FID_"):
            gh_oid_field=field.name
            break

    # 使用游标遍历空间连接结果
    with arcpy.da.SearchCursor(temp_fc,[gh_oid_field,"YJDLMC",yjdlmc_field+"_1"]) as cursor:
        for row in cursor:
            gh_fid=row[0]
            gh_yjdlmc=row[1]
            xz_yjdlmc=row[2]
            # 初始化字典条目
            if gh_fid not in change_dict:
                change_dict[gh_fid]="10"
            # 检查是否发生变化(包含空值判断)
            if xz_yjdlmc is None or gh_yjdlmc!=xz_yjdlmc:
                change_dict[gh_fid] = "20"

    # 更新规划图斑的GHZT字段
    with arcpy.da.UpdateCursor(gh_tb,["OID@",ghzt_field]) as cursor:
        for row in cursor:
            fid = row[0]
            if fid in change_dict:
                row[1]=str(change_dict[fid])
            else:
                row[1]="10"
            cursor.updateRow(row)
    # 清理临时数据
    arcpy.Delete_management("in_memory")
    arcpy.AddMessage("finish")
except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))
except Exception as e:
    arcpy.AddMessage("出现未知错误:%s" % str(e))

3、视频演示

规划状态字段生成工具

相关推荐
城数派13 小时前
2000-2025年我国省市县三级逐8天日间地表温度数据(Shp/Excel格式)
数据库·arcgis·信息可视化·数据分析·excel
GIS地信小匠16 小时前
(28)ArcGIS Pro 要素包络矩形转面与最小边界几何:边界提取双工具全攻略
arcgis·空间分析·gis制图·边界提取·空间数据处理·gis教程·arcgls pro
无心使然云中漫步19 小时前
ArcGis常用服务介绍及Arcgis,Openlayers,Leaflet加载
开发语言·arcgis·php
非科班Java出身GISer2 天前
ArcGIS JS 基础教程(1):地图初始化(含AMD/ESM两种引入方式)
javascript·arcgis·arcgis js·arcgis js 初始化·arcgis js 地图初始化
智航GIS2 天前
ArcGIS 启动报错?两种方法快速解决许可启动失败问题
arcgis
没有梦想的咸鱼185-1037-16632 天前
AI大模型支持下的顶刊绘图|散点图、气泡图、柱状图、热力图、柱状图、热力图、箱线图、热力图、云雨图、韦恩图、瀑布图、神经网络图、时间序列或分布展示
人工智能·神经网络·arcgis·信息可视化·数据分析·r语言·ai写作
七夜zippoe2 天前
OpenClaw 技能发布与共享:从开发到社区贡献的完整指南
arcgis·skills·openclaw·clawhub·技能发布·技能共享
GIS地信小匠3 天前
(27)ArcGIS Pro 范围内汇总、汇总统计数据与交集制表:空间统计三工具全攻略
arcgis·空间分析·数据处理·国土空间规划·空间统计·gis教程·arcgls pro
城数派3 天前
2014-2025年全国监测站点的逐月空气质量数据(15个指标\Excel\Shp格式)
arcgis·信息可视化·数据分析·excel
GIS地信小匠5 天前
(26)ArcGIS Pro 面要素叠加编辑:更新与交集取反工具实操全解
arcgis·空间分析·数据处理·gis教程·arcgls pro