Python arcpy检查矢量自相交_arcpy 判断两个面是否相交-程序员宅基地

技术标签: 自相交  arcpy  shp  遥感  Python  

arcpy检查面矢量自相交或异相交的问题。 

相交的基本思路如下:

检查相交的Python脚本如下,需在ArcGIS 10以上版本中运行 ,最后生成__WT.shp的矢量,即为问题矢量:

import arcpy
#打开覆盖写入
arcpy.env.overwriteOutput=True
A="E:\\zxj\\hh.shp"
fold="E:\\zxj\\"
index=A.rfind("\\")
B=fold+A[index:-4]+"B.shp"
C=fold+A[index:-4]+"C.shp"
D=fold+A[index:-4]+"D.shp"
E=fold+A[index:-4]+"E.shp"
G=fold+A[index:-4]+"G.shp"
#问题区域
prob=fold+A[index:-4]+"__WT.shp"
#关闭结果加入图层
arcpy.env.addOutputsToMap=False
arcpy.FeatureToLine_management(A,B)
arcpy.FeatureToPolygon_management(B,C) 
arcpy.Intersect_analysis([C,A],G)
arcpy.FeatureToPoint_management(G, D)
arcpy.FeatureToPoint_management(A, E)
#打开结果加入图层
arcpy.env.addOutputsToMap=True
arcpy.Erase_analysis(E,D,prob)

 

检查相交、重复、重叠

效果如下。重复只会标记一次,相交会标记两次,重叠标记一次。重叠指一个要素在另一个要素内部

import arcpy
import os
#检查相交或重复的问题

A = r"D:\data\test.shp"
fold = r'D:\data\bb'

#打开覆盖写入
arcpy.env.overwriteOutput=True
index=A.rfind("\\")
B=fold+A[index:-4]+"B.shp"
C=fold+A[index:-4]+"C.shp"
D=fold+A[index:-4]+"D.shp"
E=fold+A[index:-4]+"E.shp"
G=fold+A[index:-4]+"G.shp"
if not os.path.exists(fold):
    os.makedirs(fold)
#问题区域 相交的问题
prob=fold+A[index:-4]+"H.shp"
prob2=fold+A[index:-4]+"__WT.shp"
#关闭结果加入图层
arcpy.env.addOutputsToMap=False
arcpy.FeatureToLine_management(A,B)
arcpy.FeatureToPolygon_management(B,C) 
arcpy.Intersect_analysis([C,A],G)
arcpy.FeatureToPoint_management(G, D)
arcpy.FeatureToPoint_management(A, E)
arcpy.Erase_analysis(E,D,prob)
#添加字段 问题类型
arcpy.AddField_management(prob, "problem", "TEXT","","", 12)
with arcpy.da.UpdateCursor(prob, "problem") as cursor:
    for row in cursor:
        row[0] = "相交"
        cursor.updateRow(row)
del cursor
#检查重复的问题,根据坐标是否一致判断


#E = r'D:\data\fumz\test\testE.shp'
sets = set()
sets2 = set()
arcpy.AddField_management(E, "problem", "TEXT","","", 12)
fields = ['SHAPE@WKT','problem','SHAPE@X','SHAPE@Y']

with arcpy.da.UpdateCursor(E, fields) as cursor:
    for row in cursor:
        id = row[0]
        id2 = '%s,%s'%(row[2],row[3])
        if id in sets:
            row[1] = '重复'
            cursor.updateRow(row)
        elif id2 in sets2:
            row[1] = '疑似相交'
            cursor.updateRow(row)     
        else:
            cursor.deleteRow()
            #cursor.updateRow(row)
            sets.add(id)
            sets2.add(id2)
del cursor
#打开结果加入图层
arcpy.env.addOutputsToMap=True


#合并图层
arcpy.Merge_management([E, prob], prob2)
#arcpy.env.addOutputsToMap=False

delete = False
#删
if delete:
    arcpy.Delete_management(B)
    arcpy.Delete_management(C)
    arcpy.Delete_management(D)
    arcpy.Delete_management(E)
    arcpy.Delete_management(G)
    arcpy.Delete_management(prob)

批处理版

# -*- coding: utf-8 -*-
import arcpy
import os
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#检查相交或重复的问题

shpFolder = r"D:\data\a"   #shp文件夹
fold = r'D:\data\a\bc'  #输出文件夹
#---------------------分割线-------------------------------
files = [shpFolder+"\\"+i for i in os.listdir(shpFolder) if i.endswith('.shp')]
for A in files:
    #打开覆盖写入
    A = A.decode('gbk')
    arcpy.env.overwriteOutput=True
    index=A.rfind("\\")
    B=fold+A[index:-4]+"B.shp"
    C=fold+A[index:-4]+"C.shp"
    D=fold+A[index:-4]+"D.shp"
    E=fold+A[index:-4]+"E.shp"
    G=fold+A[index:-4]+"G.shp"
    if not os.path.exists(fold):
        os.makedirs(fold)
    #问题区域 相交的问题
    prob=fold+A[index:-4]+"H.shp"
    prob2=fold+A[index:-4]+"__WT.shp"
    #关闭结果加入图层
    arcpy.env.addOutputsToMap=False
    arcpy.FeatureToLine_management(A,B)
    arcpy.FeatureToPolygon_management(B,C) 
    arcpy.Intersect_analysis([C,A],G)
    arcpy.FeatureToPoint_management(G, D)
    arcpy.FeatureToPoint_management(A, E)
    arcpy.Erase_analysis(E,D,prob)
    #添加字段 问题类型
    arcpy.AddField_management(prob, "problem", "TEXT","","", 12)
    with arcpy.da.UpdateCursor(prob, "problem") as cursor:
        for row in cursor:
            row[0] = "相交"
            cursor.updateRow(row)
    del cursor
    #检查重复的问题,根据坐标是否一致判断


    #E = r'D:\data\fumz\test\testE.shp'
    sets = set()
    sets2 = set()
    arcpy.AddField_management(E, "problem", "TEXT","","", 12)
    fields = ['SHAPE@WKT','problem','SHAPE@X','SHAPE@Y']

    with arcpy.da.UpdateCursor(E, fields) as cursor:
        for row in cursor:
            id = row[0]
            id2 = '%s,%s'%(row[2],row[3])
            if id in sets:
                row[1] = '重复'
                cursor.updateRow(row)
            elif id2 in sets2:
                row[1] = '疑似相交'
                cursor.updateRow(row)     
            else:
                cursor.deleteRow()
                #cursor.updateRow(row)
                sets.add(id)
                sets2.add(id2)
    del cursor
    #打开结果加入图层
    arcpy.env.addOutputsToMap=True


    #合并图层
    arcpy.Merge_management([E, prob], prob2)
    #arcpy.env.addOutputsToMap=False

    delete = True
    #删
    if delete:
        arcpy.Delete_management(B)
        arcpy.Delete_management(C)
        arcpy.Delete_management(D)
        arcpy.Delete_management(E)
        arcpy.Delete_management(G)
        arcpy.Delete_management(prob)

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40450867/article/details/81171470

智能推荐

深度学习_目标检测_YOLOv5训练Pascal VOC格式的数据集教程_yolov5 pascal-程序员宅基地

文章浏览阅读7.9k次,点赞7次,收藏54次。1.搭建环境要求Python版本>=3.7,PyTorch版本>=1.5。并且安装需要的库源:pip install -U -r requirements.txt2.开始准备Pascal VOC格式的数据上图是Pascal VOC格式数据集的标准格式。为了应对YOLOv5的darknet格式 ,我们使用如下代码生成labels标签文件(为了狄简单期间,我们对train和test标签进行生成):import xml.etree.ElementTree as ETimport p_yolov5 pascal

java 模拟刷点击量_csdn博客刷点击率(java代码)-程序员宅基地

文章浏览阅读1k次。importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importorg.apache.commons.httpclient.HttpClient;importorg.apache.commons.httpclient.HttpStatus;importorg.apache.commons.h..._java 点击率

CMake编译Nginx源码_cmake 编译 nginx-程序员宅基地

文章浏览阅读2k次。背景最近打算学习nginx源码,但使用clion IDE查看不支持跳转。因为源码是使用autotool维护的,而clion需要CMake管理项目。着手编译nginx源码。环境os : ubuntu 18.04nginx: nginx-1.16.1cmake: 3.10.2clion: 2019.2原生编译解压源码包后,执行configure命令。./configure --p..._cmake 编译 nginx

IDEA Missing package statement-程序员宅基地

文章浏览阅读1.6w次,点赞9次,收藏2次。如图所示,Demo1这个类名下面出现了红线,我完全是按照老师的文档来进行的,只有一个地方不一样我的模块里面本身没有.java文件,这个Demo1是我从别的地方搬过来的,只搬了Demo1.java导入包后先显示,没有配置相关的JDK,然后JDK配置完成后,就出现了这个问题。MIissng package statement / 缺少包语句https://blog.csdn.net/a_b..._missing package statement

beep.sys/Trojan.NtRootKit.1192,msplugplay 1005.sys/BackDoor.Pigeon.13201等2-程序员宅基地

文章浏览阅读249次。beep.sys/Trojan.NtRootKit.1192,msplugplay 1005.sys/BackDoor.Pigeon.13201等2endurer 原创2008-06-25 第1版(续1)先修正电脑日期,然后下载 DrWeb CureIt!扫描。同时下载 bat_do、FileInfo 提取文件信息,打包备份,延时删除。接着下载 瑞星卡卡安全助手清理恶意程序..._68d3795a-886f-46d0-977b-f0acd82c5966

清空Qtablewiget 表格的内容_tableweight 清空-程序员宅基地

文章浏览阅读3.2k次。 void QTableWidget::clear () [slot]//清空掉表格内所有内容,包括标题头Removes all items in the view. This will also remove all selections. The table dimensions stay the same. void QTableWidget::clearContents (..._tableweight 清空

随便推点

linux 查看mtd分区,查看系统磁盘信息/proc/mtd分区和/proc/partitions全部分区信息-程序员宅基地

文章浏览阅读2.6k次。# cat /proc/mtddev: size erasesize namemtd0: 00040000 00040000 "RedBoot"mtd1: 00200000 00040000 "zImage"mtd2: 00180000 00040000 "initramfs"mtd3: 00001000 00040000 "RedBoot config"mtd4: 00040000 ..._查看proc/mtd大小

docker 报错 devmapper : Thin Pool-程序员宅基地

文章浏览阅读886次。docker在运行新镜像时报错报错reason:FailedSync, count:1, message:Error syncing pod, skipping: failed to "StartContainer" for "docker-11" with RunContainerError: "runContainer: Error response from daemon: {\"messa..._error: error response from daemon: devmapper: thin pool has 27640 free data

华为鸿蒙为什么还没有其他手机品牌接入_华为鸿蒙没有同行用-程序员宅基地

文章浏览阅读8.4k次,点赞58次,收藏41次。本文转载自IT之家7 月 8 日消息,华为HarmonyOSUX 设计交流中,华为方面透露,华为 Harmony OS 2.0 用户已经达到了 3000 万。华为在 6 月初举行鸿蒙OS 2.0 发布会,并宣布了多款华为机型可升级华为系统。首批设备包括华为 Mate 40 系列、华为 P40 系列以及华为 Mate 30 系列智能手机,随后 nova 系列也加入了升级。华为 MatePad Pro 等平板电脑也能率先升级到 HarmonyOS 2.0。发布不到一周的时间,Harmony..._华为鸿蒙没有同行用

[转载自小百合]复习与妻书,兼怀林觉民zz -程序员宅基地

文章浏览阅读1.5k次。作 者: AWholeNuWld 标 题: [转载] Re: 复习与妻书,兼怀林觉民zz 时 间: Sat Jan 1 13:53:51 2005 点 击: 7 【 以下文字转载自 History 讨论区 】 【 原文由 JackyWu 所发表 】 诀别   词:童安格、刘虞瑞   曲:童安格   夜冷清 独饮千言万语   难舍弃 思国心情   灯欲尽 独锁千愁万绪   言难启 诀别吾妻

【应用】Docker-多容器部署Django+Vue项目(nginx+uwsgi+mysql)_容器 安装 vue-程序员宅基地

文章浏览阅读1.5k次,点赞27次,收藏28次。基于Linux CentOS 7系统(虚拟机),使用Docker,多容器部署Django+Vue项目整体部署用到了:Django+Vue+nginx+mysql+uwsgi先每一个容器单独部署,最后用Docker compose 语法整合,统一部署总结梳理放在前边,方便整体理解写项目部署步骤的时候,总有步骤”想当然“而没有展示出来。本文已尽可能展示所有的修改动作,希望文章对你有所帮助。至此,三个容器都已成功启动,可以在客户端用浏览器访问项目,并进行操作,来验证是否能够成功交互。_容器 安装 vue

在Spring boot中加入web.xml_springboot项目加载web.xml文件-程序员宅基地

文章浏览阅读5.1w次,点赞2次,收藏23次。公司有个项目,有两个子项目,两个独立的工程,我们组用的Spring boot,没有web.xml的,另一个项目组是用的liferay,有liferay6定制的tomcat7,做到中后期,客户说要放在一个tomcat里面,但是spring boot的war包放在liferay的tomcat下报错,特么只好去找怎么在spring boot里面搞个web.xml。。。先在java/webapp/WEB-_springboot项目加载web.xml文件

推荐文章

热门文章

相关标签