
简介本资源是一套面向地籍调查人员、GIS工程师及不动产登记技术人员的ArcPy自动化处理工具包聚焦宗地四至东、南、西、北界线信息的批量提取与结构化填写有效替代传统手工录入显著提升土地证制发与权籍入库效率。压缩包共8个文件110KB含核心Python脚本.py、宗地矢量数据.shp/.shx/.dbf/.sbn/.sbx/.cpg及操作说明文档.docx其中.py脚本调用arcpy模块实现空间几何分析与方位判定shp数据为待处理宗地图层docx文档详述参数配置与字段映射逻辑。已有2527人学习下载适用于ArcGIS 10.6环境下的日常地籍业务场景。用户可直接运行脚本完成四至文本自动填充并导出标准格式结果配套数据结构清晰、即装即用兼具教学示范性与工程实用性。 做土地确权、不动产登记的朋友应该都对“四至”这两个字不陌生。一份土地证上东至、南至、西至、北至四行字看着简单写起来是真磨人——每一行都得写清楚宗地边界到底邻着什么是隔壁宗地、市政道路、河流沟渠还是某单位的围墙。单宗地手工填拉图、查档案、翻台账快则十分钟慢则半小时可一旦碰上整村整镇的确权登记项目几百上千宗地等着出证四至填报就成了整个流程里最烦琐、最容易出错、也最容易被验收打回的环节。这篇文章就围绕“地籍宗地四至批量填写”和“土地证四至界线文件”这两个关键词展开把我实际做过的批量方案完整讲一遍包含数据怎么准备、方向怎么切、邻宗怎么识别、文本怎么生成以及一堆只有在现场才会踩到的坑。适合正在做地籍调查、不动产登记、土地确权项目的同仁参考也适合刚接触GIS批处理、想用脚本替代手工录入的朋友。1. 四至到底是什么批量填写的难点在哪1.1 四至的法律意义与填写规范先把这个基础说透。四至指的是地块东、南、西、北四个方向上的边界线以及边界线所邻接的地物或权利人信息。在土地登记里四至描述是土地证的重要组成部分直接影响权属界线的法律效力。比如一本证上写“东至××路南至××河西至××村集体土地北至××公司”这句话在产权纠纷时就是现场核界的文字依据。所以四至不是随便写的地籍调查规程和各地的登记规范一般都有明确要求要写明邻接地物的名称、类型涉及邻宗地时最好注明相邻权利人描述顺序通常按东、南、西、北来组织用词必须规范统一不能出现“靠近”“大约”“旁边”这类模糊表述。很多地方还要求四至描述与界址线走向一致不能出现“东至”写的是实际在西侧地物的低级错误。1.2 手工填写的真实痛点在实际项目中手工填写四至的痛点非常集中数据分散。宗地图在CAD里权属信息在登记系统里邻宗关系要靠翻调查表三套数据来回对照效率极低。重复劳动量大。一个村里几十上百宗地地块形状相似但四至描述几乎没有完全相同的每宗都得重新看边界、重新查邻宗。出错率高。东、西方向搞反邻宗名称写错漏写共用界址线的情况在手工填报里非常常见而且自查很难发现。验收反复打回。登记机构审查时会逐宗核对四至与界址线是否一致一旦批量报上去被抽查出问题返工成本非常高。我见过最夸张的一次一个镇确权项目700多宗地四至填报靠两个实习生手工做做了三周提交后被抽查打回了两轮最后全组加班重填。其实这批地当初要是用几何分析自动生成四至两三天就能出完初稿。1.3 批量填写的核心思路批量填写这件事本质上是把“看图-判别-书写”这个人工过程拆成四步第一步把宗地边界按方向分成东、南、西、北四段 第二步对每一段边界做空间分析找到它邻接的地物类型和名称 第三步把邻接信息按照固定模板拼成规范的描述文本 第四步输出成可回填登记系统的批量结果。这四步里第一步和第二步是技术核心。方向分段要处理好不规则宗地邻宗识别要处理好宗地间隙、多义邻接和权属信息不全的情况。下面按流程一步步拆。2. 数据准备从CAD宗地图到可计算的GIS数据2.1 CAD数据整理是第一道坎四至批量填写的地基是宗地边界数据。很多项目里宗地图还停留在CAD格式也就是DWG或DXF文件。CAD数据的组织方式和GIS数据差异很大地块可能是闭合多段线PLINE也可能是一堆LINE和ARC拼出来的假闭合图形权属信息可能写在属性块里也可能就是图纸上的一行文字。所以在做任何空间分析之前必须先干三件事。第一把CAD图形转换成GIS面要素。推荐做法是在CAD里先把宗地边界线整理成闭合多段线然后通过FME或者ArcGIS的CAD转地理数据库工具转成Polygon。转换前一定要在CAD里把多余线头、重复线、未闭合的缺口处理干净否则转出来全是碎面或者空洞后面分析全乱套。第二把宗地编号、权利人、坐落地址等属性关联到面要素上。CAD里如果有属性块用属性提取功能比较方便如果没有就只能在GIS里通过宗地编号字段做连接。这块建议用“地籍号乡镇村组”联合编码作为唯一标识单纯用图幅号或者AutoCAD句柄都不够稳定容易在数据拼接时撞号。第三建立项目数据库。我一般用File Geodatabase统一要素类名、字段名和坐标系。这里必须强调坐标系统一批量项目经常有1980西安坐标系、2000国家大地坐标系混用的情况做空间分析前如果不统一投影邻宗识别会受几米甚至几十米的偏移影响识别的邻宗完全对不上。2.2 拓扑检查批量分析前必须做的事拿到GIS面数据后别急着写分析脚本先做拓扑检查。宗地数据最常见的拓扑问题是宗地之间有缝隙或者互相重叠。这些缝隙可能来自CAD图形闭合不严也可能是不同测绘时段的成果拼接导致的。缝隙和重叠对四至分析的影响非常大后面做邻宗匹配时缓冲区的参数设置全会被这些碎缝带偏。在ArcGIS里我用拓扑工具集创建拓扑规则重点检查两个规则“不能有间隙”和“不能重叠”。发现间隙后是缝隙还是合法空地需要结合影像和现场情况判断。如果是两宗地之间确实存在公共道路、河流等线性地物那是正常情况不需要修如果只是图形采集误差导致的细缝那就要通过捕捉、延伸线等手段把边界对齐。还有一个容易被忽略的问题界址点重复但顺序不同。相邻两个宗地共用的界址线在各自图形里可能节点顺序相反普通叠加分析会认为它们没有完全重合。这种情况要用“匹配同线段”的方式处理或者在拓扑里启用“不能有重叠-面”规则查看详细错误位置。2.3 建立邻宗台账和地物图层批量填写四至光有宗地面要素还不够还要准备“邻宗台账”和“地物图层”。邻宗台账是每个宗地相邻宗地的属性清单包括邻宗编号、权利人、权属性质、地类代码这些字段。这个台账不一定要一开始做全后面做空间匹配时可以用脚本自动生成初稿但权属性质、权利人名称这类需要人工核实的字段最好在前期利用调查底图、权属调查表先维护好因为自动匹配只能拿到图形上的邻接关系拿不到法律意义上的权属信息。地物图层指的是道路、河流、沟渠、林地等线状或面状地物要素。这类数据来源多样可能是测绘院提供的基础地形图也可能是从遥感影像上人工矢量化。这里有个实操经验地物图层一定要单独整理成一个要素类规范好地物名称字段比如道路要写“××公路”“××村道”河流写“××河”“××排灌渠”不能只写一个“路”或者“沟”否则后面四至文本生成时拼出来的句子又得返工。3. 方向分段整个流程的地基3.1 最小外接矩形方案四至批量填写的第一个技术核心是把任意形状的宗地边界切成东、南、西、北四段。最直观的方法是使用最小外接矩形Minimum Bounding Rectangle简称MBR。具体做法是对每个宗地面要素生成它的最小外接矩形然后用矩形的四条边向宗地中心方向投影把宗地边界按方位角分成四组。落在矩形东侧边附近的边界点归为“东段”南侧附近的归为“南段”依此类推。这个方案实现简单处理规则形状的宗地时效果很好。尤其是长方形的宅基地、标准厂房地块用MBR切分基本一次到位极少出错。我在项目里先用MBR方案跑了一遍全量数据大概有75%的宗地是满足要求的剩下的不规则宗地再用更精细的方法兜底。3.2 质心-象限分割方案MBR方案最大的弱点在于凹多边形和狭长弯曲地块。举个例子一个L形地块它的外接矩形会包含大量不属于宗地的空白区域仅仅按外接矩形的边去划分边界很容易把L形拐角处的边界误判到错误的方位段。这时需要用质心-象限分割方案。取宗地的质心作为原点把平面按方位角划分为四个象限北象限为-45°到45°东象限为45°到135°南象限为135°到225°西象限为225°到315°。然后遍历宗地边界上的每个折点根据折点相对质心的方位角把边界线段归类到对应的象限段里。最后把落在同一象限的线段合并成一个方向边界。这个方案的优点是适应性好凹多边形、带状地块都能处理得比较准。但要注意一个坑质心本身在凹多边形里可能落在宗地外部。这时候按质心做象限划分会得到错误的方向归属。我处理的办法是改进成“内部锚点”把质心移动到宗地多边形内部的一个稳定点比如用最大内接圆圆心或者用Pole of Inaccessibility算法GeoPandas库里的polylabel函数可以算再以这个内部锚点做象限划分准确率会明显提升。3.3 方向分段结果的可视化检查方向分段完成后务必做一次可视化检查。我的习惯是把四个方向段分别导出为四个线要素图层每个方向一种颜色叠在宗地图上抽查。抽查的重点有两个一是看方向段是否连续有没有该属于东段却断到南段的线段二看拐角处的归属特别是东南、西北这类转角位置容易出现边界在转角处被切成两半的情况。抽查比例不需要100%但一定要有代表性。把图斑面积从小到大排序小图斑、狭长图斑、异形图斑各抽10%看看基本能判断分段算法的整体质量。如果这三类都没问题规则形状的大图斑一般也不会出幺蛾子。4. 邻宗识别与四至文本生成4.1 缓冲区叠加法找到邻接地物方向段切好之后就要对每个方向段做邻宗识别。这一步的目标是给定东段边界找出这块宗地东边到底跟谁相邻。最常用的方法就是缓冲区叠加分析。对宗地的某个方向段比如东段边界线做缓冲区缓冲半径一般取0.5到1米然后与邻宗面图层、地物面图层做空间叠加。凡是与缓冲区相交的邻宗或地物都认为与当前宗地在东侧相邻。为什么用缓冲区而不是直接做“边界线-面”的相交分析因为宗地数据在采集时存在容差相邻宗地的共用边界点位不可能完全重合用缓冲区可以有效吸收这种微小偏差。实测下来在1:500的地籍图上0.3米的容差就能覆盖绝大多数点位偏差但保险起见我习惯用0.5米。缓冲半径也不能设太大。半径过大会把隔了一条路的对面宗地也识别进来出现“东至”错误地写成对面地块的情况。我的调试经验是先用0.5米跑一遍再抽查结果如果频繁出现漏识别逐步加大到0.8米、1米如果出现多识别则反向减小。4.2 多邻宗情况怎么处理一个方向段邻接多个宗地的情况非常普遍。比如东段边界本身就不长但挨着两户人家的宅基地。这种情况怎么填四至根据登记规范通常要写“东至××、××”把所有邻宗都列出来。但也有地方规定如果邻宗超过三个可以概括为“东至××等多宗地”。具体规则各地不一我在脚本里做成了可配置项默认全部列出超过三个则用“等”字概括。还有一个更加微妙的情况同一个方向段上半段邻路、下半段邻宗。这时候不能简单合并成一条描述需要按线段的接续顺序拆分描述比如“东至××路、××宗地”。实现上可以对方向段内的每条子线段单独做邻宗识别再把连续的、邻接同一个地物的线段合并最后按首尾相接的顺序生成描述序列。4.3 描述文本的生成规则与模板邻宗识别完成后最后一步是把邻接信息组织成规范的四至描述文本。我的模板一般是这样的东至{地物类型标记}{地物名称} 南至{地物类型标记}{地物名称} 西至{地物类型标记}{地物名称} 北至{地物类型标记}{地物名称}。其中地物类型标记要根据邻接要素的类型自动生成邻接宗地时用邻宗的权利人名称如“东至张三”邻接道路时在名称前不加“道路”二字因为“东至××路”里的“路”字本身就在名称里邻接河流时写法是“南至××河”邻接沟渠、林地、空地等则需要使用“××沟”“××林地”“××空地”这样的结构。这些字面差异看着小但直接影响文本的合规性必须把每个地物类型的命名规范提前跟项目负责人确认好。我还做了一点细节处理同一个方向段上如果识别到多个邻接地物且它们类型相同、名字相近会做去重合并相邻方向段在转角处邻接同一个地物时也只保留一侧的描述避免“东至××南至××”里重复出现同一个地物名称增加文本冗余。5. 用Python把整套流程串起来5.1 环境与数据准备这套流程我用Python GeoPandas来实现主要是因为开源生态里几何分析工具齐全而且脚本可以反复调整方便应对不同项目的细节差异。依赖库包括GeoPandas、Shapely、Pandas外加一个polylabel实现内部锚点计算。数据输入上我统一用GeoPackage或者Shapefile格式。如果你手里的源数据是File Geodatabase可以用FME先转一道或者用fiona配合pyogrio引擎直接读取。转之前强烈建议把字段名改成英文避免脚本里跟中文编码反复纠缠。5.2 核心代码拆解方向分段的核心函数我写成了这样import geopandas as gpd from shapely.geometry import LineString, MultiLineString from shapely.ops import split, linemerge from polylabel import polylabel import numpy as np def split_boundary_by_direction(parcel_geom): 将宗地边界按方向切分为东、南、西、北四段。 返回一个dictkey为方向value为对应的LineString。 boundary parcel_geom.boundary if isinstance(boundary, MultiLineString): boundary linemerge(boundary) # 计算内部锚点使用极远内点 interior_point polylabel([parcel_geom.exterior.coords], tolerance0.1) anchor interior_point # 将边界线拆成小线段 coords list(boundary.coords) segments [] for i in range(len(coords) - 1): seg LineString([coords[i], coords[i 1]]) segments.append(seg) # 计算每个小线段中点相对锚点的方位角 dir_buckets {东: [], 南: [], 西: [], 北: []} for seg in segments: mid seg.interpolate(0.5, normalizedTrue) dx mid.x - anchor.x dy mid.y - anchor.y # 方位角逆时针正东为0 angle np.degrees(np.arctan2(dy, dx)) if angle -45 and angle 45: dir_buckets[东].append(seg) elif angle 45 and angle 135: dir_buckets[北].append(seg) elif angle 135 and angle 225: dir_buckets[西].append(seg) else: dir_buckets[南].append(seg) # 合并每个方向的小线段 result {} for direction, segs in dir_buckets.items(): if not segs: result[direction] None else: merged linemerge(segs) result[direction] merged return result注意上面的角度划分里我按测绘惯例以东方向为0度、逆时针为正北象限落在45到135度。实际使用时如果项目方向约定不同调整角度区间即可。关键点在于小线段合并后可能得到一个MultiLineString而不是单一LineString这种情况需要继续拆成多个子线段分别做邻宗识别最后按位置顺序生成描述。邻宗识别和文本生成的核心逻辑大致是这样的def identify_adjacent_features(direction_line, parcel_gdf, feature_gdf, buffer_dist0.5): 对方向线做缓冲区识别邻接的宗地和地物。 buf direction_line.buffer(buffer_dist) # 与邻宗面叠加 adjacent_parcels parcel_gdf[parcel_gdf.geometry.intersects(buf)] # 与地物面叠加 adjacent_features feature_gdf[feature_gdf.geometry.intersects(buf)] return adjacent_parcels, adjacent_features实际项目里建议在叠加前先给邻宗面和地物面建空间索引用geopandas.sjoin做空间连接百万级数据量下速度仍然很快。缓冲区半径作为参数单独提出来方便网格化调试。5.3 结果输出与回填脚本跑完后我习惯输出两份结果。一份是四至文本汇总表字段包括宗地编号、东至、南至、西至、北至导出为Excel直接给登记人员审核确认另一份是把四至文本作为属性字段回写到宗地面要素输出成新的Shapefile或GeoPackage方便在GIS里做图数一致性检查。这里有个实操细节四至文本里的标点符号统一用全角方向词和地物名称之间不留空格。有些登记系统的字段长度有限制比如四至字段只给200个字符生成文本时要在脚本里做截断和校验截断后末尾补“等”字防止数据入库时报长度错误。6. 常见问题与排查实录6.1 方向段切分错误L形地块东段包含南段边界我在一个村里跑批量分析时发现大量L形宅基地的东段边界被错误地包含了南向的边界线。排查下来问题出在内部锚点计算这些宅基地是狭长的南北向地块最大内接圆圆心偏向地块北端导致东南角的边界被算进东段。解决办法是给内部锚点加一个校正逻辑先按锚点做方向划分然后检查各方向线段在空间上的方位范围如果东段里出现了一段明显的南北走向线且该线段靠近地块南端就把它重新划入南段。说白了就是加一道基于线段走向的二次判定能有效解决这一类“锚点偏移”引发的方向误判。6.2 邻宗漏识别细长公共通道被遗漏另一个高频问题是邻宗漏识别。有个项目里两宗地之间有一条2米宽的公共巷道巷道在图上被单独画成了线状地物。做缓冲区叠加时因为缓冲半径只有0.5米巷道面与宗地方向段边界的缓冲区只有很窄的重叠加上数据存在点位偏移部分宗地的巷道完全没被识别出来。排查后我把缓冲区半径从0.5米调到0.8米同时增加了一个“最近邻」补充识别”逻辑对方向段上未匹配到任何邻接地物的子线段找到距离最近的邻宗或地物面只要距离小于1.5米就认为相邻。这个补充逻辑非常实用几乎把漏识别率降到了零。6.3 文本描述不符合登记规范批出结果后登记人员反馈的最多的是格式问题。比如“东至××路”在规范里要求写成“东至××公路”或“东至××街道”不能只写俗称“南至××”如果邻接的是沟渠规范里要用“×号排灌沟”不能写成“水沟”。这些名称问题光靠GIS分析无法解决必须依靠前期地物图层里的名称字段是否规范。我在项目里加了一个“名称规范化对照表”把常见俗称和规范名称做成映射脚本生成文本时先查表再拼接。比如“村路”映射为“××村道”“大水沟”映射为“××排灌渠”。同时四至文本生成后必须交给熟悉当地情况的调查员做一轮人工确认这一步不能省自动化再强也替代不了对现场情况的解释。6.4 结果自查图数一致性检查四至结果生成后一定要做图数一致性检查。方法不复杂把四至文本里识别到的邻宗名称与宗地属性表里实际存在的权利人字段做交叉比对如果文本里出现的邻宗名称在邻宗台账里找不到就是匹配到了错误的邻宗或者名称提取有误。我还写了一个简单的校验脚本随机抽取10%的宗地把每个方向段邻接到的邻宗编号与人工在图上量取的邻宗编号做对比。这个检查虽然不能覆盖全部数据但能非常有效地暴露系统性问题——比如坐标系偏移、缓冲半径异常、方向切分规则错误这些系统性问题一旦存在抽检基本都能暴露出来。7. 实操中沉淀的几条经验把这套流程跑完整整三个项目之后我最大的感受是四至批量填写不是纯技术问题而是“数据质量空间分析业务规则”三者的结合。数据质量决定了分析的上限。凡是CAD转GIS、坐标统一、拓扑修整这些前期工作做得扎实的项目后面的自动化流程几乎一遍过反过来前期图面混乱的项目后面脚本调参能调到头秃。所以我的建议是前期花60%的时间把数据基础打牢后面40%写脚本、调参、检查节奏会很顺。业务规则一定要提前确认清楚。同一个四至描述不同县市的要求都不一样有的要写全邻宗权利人姓名有的只需要写邻宗编号加权利人简写有的要求“东、南、西、北”严格按顺序有的接受“北、东、南、西”的调查顺序。这些规则必须在写脚本前跟登记机构确认并且做成参数配置别写死在代码里否则换一个项目就得重新改一遍。最后说一个小技巧生成的四至文本初稿我从来不会直接入库而是先输出一份“仅列出有疑问项”的清单让调查员只核对清单上的宗地。人工核对工作量从几百宗降到几十宗效率提升非常明显。通过差异筛选而不是全量人工复核这才是批处理真正减轻工作负担的关键。我自己的项目经验是这套流程从数据整理到脚本调通大概需要三到五天的时间但一旦跑顺后续每多处理一批数据边际成本几乎为零。希望这篇东西能帮同样被四至折磨的同仁少走点弯路。本文还有配套的精品资源点击获取