加载拓扑至宗地结构 (Parcel Fabric)
摘要
将参与拓扑的面和线要素加载到目标宗地结构中。拓扑需要有一组预定义的拓扑规则:
- 线 - 必须被(面)要素的边界覆盖
- 线 - 不能自叠加
- 线 - 不能自相交
- 线 - 必须为单一部分
- 线 - 不能相交或内部接触
- 面 - 边界必须被(线)要素覆盖
用法
由“面 - 边界必须被(线)要素覆盖”拓扑规则生成的错误可以标记为异常。这将允许连接线、未闭合宗地和相关线的迁移。
可以选择加载整个线要素类和面要素类,或只加载所选线要素和面要素。在加载大型数据集时,性能取决于所用计算机的内存规格。该工具最适用于每次载入小到中等面积或部分的宗地数据。
为了将面要素和线要素迁移到宗地结构,拓扑应该经过验证、规整并且没有错误。如果执行编辑操作修改了拓扑错误,请务必重新验证拓扑,确保在运行工具之前错误不再存在。
要验证整个拓扑,请使用“数据管理”工具箱中“拓扑”工具集中的拓扑验证工具。
如果只验证 ArcMap 中当前地图显示范围而不是整个拓扑,请单击拓扑工具条上的验证当前范围中的拓扑工具 。
-
面要素类或线要素类都可以作为输入(拓扑)要素类参数使用。在 ArcMap 中,如果已经在输入要素类的要素图层中做好选择,则只会迁移所选要素。如果线要素类作为输入要素类,任何选定的没有形成与面要素类中对应的面相匹配的闭合环(悬挂线)的线,都将作为未闭合宗地的一部分迁移。如果在线要素类中具有类别字段,则可将悬挂线的类别值设置为 3 以表示连接线,或者设置为 1 以表示相关线。
COGO 在线要素类中不是必要属性。如果宗地线没有 COGO 属性,亦即宗地线已从面中生成,则导入程序将从线几何中生成 COGO 属性。如果有 COGO 属性,工具会将现有 COGO 属性迁移到宗地结构线。
可以使用源宗地面和宗地线要素类中的属性,在宗地结构表中填充系统属性。例如,如果要将宗地标识号 (PIN) 迁移到宗地结构表中的名称字段,则源面要素类需要有 PIN、NAME、LOT 或 APN 属性。
如果将线要素类用作输入要素类以迁移未闭合宗地,则可以使用源宗地线要素类中的属性来在宗地表中填充系统属性。例如,要为未闭合宗地迁移宗地标识号 (PIN),源宗地线要素类中需要有 PIN、NAME、LOT 或 APN 属性。
只要在迁移数据之前结构表中已经创建了与面要素类和线要素类中用户定义的属性相同的属性,就可以将该用户定义属性迁移到结构中的宗地和线表。
如果要将点要素类中用户定义的属性迁移到宗地结构的点表中,请为输入点要素(可选)参数指定一个点要素类。还要在结构点表中创建相同的用户定义属性,否则无法成功迁移属性值。
将数据迁移到结构时,在结构线的端点自动创建结构点。将自动用点形状坐标填充结构点的系统 X 和 Y 属性值。要将用户定义的属性迁移到宗地结构的点表中,只需在该参数中指定点要素。与面要素和线要素一样,如果已在点要素图层上进行选择,则将只迁移所选的点。
-
最小线串分段记数(可选)是未将线要素视作线串或自然边界之前线要素可以拥有的最小线段数。
-
如果为控制匹配容差(可选)参数指定了容差,则在任何迁移的结构点处于结构中现有控制点指定匹配容差范围内的情况下,这些点将被关联到该控制点。
-
如果选中将宗地作为未连接的组导入选项,将以未连接组形式迁移宗地。未连接宗地存在于宗地结构以外的自己本地的坐标空间中。可以随时将未连接宗地连接到宗地结构中。如果在宗地连接到宗地结构图层前还有额外的工作要做,您将需要以未连接方式迁移宗地。
语法
参数 | 说明 | 数据类型 |
target_parcel_fabric |
要将数据迁移到的目标宗地结构。 | Parcel Fabric Layer |
in_topology_class |
属于拓扑一部分的输入要素类或图层。要素类可以是线或面。 | Feature Layer |
in_point_class (可选) |
输入点要素类或图层。点要素类不需要是拓扑的一部分。只将输入点要素类中用户定义的属性迁移到宗地结构中相应的点上。 | Feature Layer |
linestring_minimum_segments (可选) |
在宗地结构中未将折线要素视作线串或自然边界之前折线要素可以拥有的最少线段数。默认值是最少 10 段线段。 | Long |
control_match_tolerance (可选) |
新迁移的结构点与结构中找到的现有控制点相关联所使用的容差。容差的长度单位与结构坐标系的长度单位完全相同。如果未指定控制匹配容差,则使用默认值 0.1 米。 | Linear unit |
unjoined_group | 确定要素迁移方式。
| Boolean |
direction_units (可选) | 在迁移过程中,为线要素生成 COGO 方位角属性时所使用的方向单位。
| String |
direction_type (可选) |
在迁移过程中,为线要素生成 COGO 方位角属性时所使用的方向类型。
| String |
compute_area | 确定要素迁移方式。
| Boolean |
area_units (可选) |
如果选中计算新宗地的面积选项,在迁移过程中,计算宗地面积时所使用的面积单位。
| String |
radial_point_tolerance (可选) |
新计算的曲线中心点与结构中找到的现有曲线中心点相匹配所使用的容差。此外,如果几个计算出的曲线中心点位于该容差中,则求出这些点的平均值并将其合并为一个中心点。如果没有指定径向容差,则使用默认值 0.5 米。 | Linear unit |
accuracy_units (可选) |
要迁移的线和面的精度类别。精度类别是由宗地结构的测量日期定义的。精度类别 1 是最高的数据精度(最近测量),而精度类别 6 是最低数据精度(1800 年或更早)。精度类别在结构平差中使用。
| String |
代码实例
以下 Python 窗口脚本演示了如何在即时模式下使用 LoadATopologyToAParcelFabric 工具。
import arcpy
from arcpy import env
env.workspace = "C:/Parcel_Editor_Tutorial/Encinitas_City/Cadastral.gdb"
arcpy.LoadTopologyToParcelFabric_fabric("NewFabric", "Enc_polgon", "", "100", "0.5",
"JOINED_GROUP", "DEGREES_MINUTES_SECONDS",
"NORTH AZIMUTH", "COMPUTE_AREA", "HECTARES",
"1", "3 - 1908 to 1980")
以下独立脚本演示了如何使用 LoadTopologyToParcelFabric 工具来遍历和加载所选宗地组。
# Name: LoadTopologyToParcelFabric_Example2.py
# Description: Iterates through selections of parcels and imports each parcel selection
# into a parcel fabric. Parcels are selected using overlying blocks in the
# IterateBlocks feature class. Each polygon in IterateBlock is selected
# by block number in the "BlockNumber" attribute field.
# Import system modules
import arcpy
# Set environment settings
arcpy.env.workspace = "c:/data/OaklandCounty.gdb/ParcelData"
# Set variables
# BlockNumber is an attribute on the ItearateBlocks feature class
x = 1
whereclause = '%s = %s' % ("BlockNumber",x)
# Make feature layers from feature classes
arcpy.MakeFeatureLayer_management("c:/data/OaklandCounty.gdb/ParcelData/IterateBlock","IterateBlock_lyr")
arcpy.MakeFeatureLayer_management("c:/data/OaklandCounty.gdb/ParcelData/TaxParcelPolygons",
"TaxParcelPoly_lyr")
# Search feature class IterateBlock and obtain all features (block polygons)
rows = arcpy.SearchCursor("IterateBlock","","","","")
# Iterate and select each block. For each selected block, select underlying parcels
# and import selected parcels
row = rows.next()
while row <> None:
arcpy.SelectLayerByAttribute_management("IterateBlock_lyr","NEW_SELECTION",whereclause)
arcpy.SelectLayerByLocation_management("TaxParcelPoly_lyr","COMPLETELY_WITHIN","IterateBlock_lyr",
"","NEW_SELECTION")
arcpy.LoadTopologyToParcelFabric_fabric("CountyFabric","TaxParcelPoly_lyr","","100","","JOINED_GROUP",
"DEGREES_MINUTES_SECONDS","NORTH_AZIMUTH","COMPUTE_AREA",
"HECTARES","0.5","4_1881_TO_1907")
x = x+1
whereclause = '%s = %s' % ("BlockNumber",x)
row = rows.next()
# Since we only imported parcels that were completely within the IterateBlock polygons, we
# now need to import the perimeter parcels that are crossed by the boundary of the IterateBlock polygons
# Clear existing selection on IterateBlock_lyr
arcpy.SelectLayerByAttribute_management("IterateBlock_lyr","CLEAR_SELECTION")
arcpy.SelectLayerByLocation_management("TaxParcelPoly_lyr","CROSSED_BY_THE_OUTLINE_OF","IterateBlock_lyr",
"","NEW_SELECTION")
arcpy.LoadTopologyToParcelFabric_fabric("CountyFabric","TaxParcelPoly_lyr","","100","","JOINED_GROUP",
"DEGREES_MINUTES_SECONDS","NORTH_AZIMUTH","COMPUTE_AREA",
"HECTARES","0.5","4_1881_TO_1907")