답변:
한 번에 하나의 기능에 대해 일반 온라인 위치 선택 대화 상자를 사용하여 다음과 같은 키를 사용하여 온라인 오버레이의 공간 관계 유형에 대한 지침으로 선택할 수 있습니다 (위치 별 선택 : 그래픽 예제 ).
(출처 : arcgis.com )선을 사용하여 선을 선택하십시오
INTERSECT A, C, D, E, F, G, H, I, J G, H를 포함 COMPLETELY_CONTAINS G CONTAINS_CLEMENTINI G, H F, H 이내 COMPLETELY_WITHIN F WITHIN_CLEMENTINI F, H ARE_IDENTICAL_TO H BOUNDARY_TOUCHES C, E
이 경우 관련 관계 유형은 INTERSECT
및 BOUNDARY_TOUCHES
입니다. 위 다이어그램에서 볼 수 있듯이 BOUNDARY_TOUCHES
선의 끝점에 닿는 기능을 선택하는 데 사용할 수 있습니다 . 정확히 두 가지 기능을 선택하면 사례 1이됩니다. 기능이 다른 기능에 닿지 않고 그 기능 만 교차하는 경우 BOUNDARY_TOUCHES
아무 것도 선택하지 않습니다. INTERSECT
엔드 포인트에서 터치하는지 여부에 관계없이 교차하는 모든 기능을 선택합니다. 따라서 엔드 포인트에 영향을주는 기능이 없지만 교차하는 기능이있는 경우 사례 2가 있습니다.
프로세스를 자동화하기 위해 다음 Python 스크립트 ( 원하는 경우 스크립트 도구 로 구현 )를 사용하여 피쳐 클래스 또는 레이어의 각 피쳐에 대한 터치 및 교차 수를 계산할 수 있습니다.
import arcpy
################################ Configuration #################################
numTouchesField = "NUM_TOUCHES"
numIntersectionsField = "NUM_INTERSECTIONS"
################################################################################
def countTouches(layer, feature):
"""Returns the number of times the boundary of a feature touches other
features in the same feature layer."""
return countSpatialRelation(layer, feature, "BOUNDARY_TOUCHES")
def countIntersections(layer, feature):
"""Returns the number of times a feature intersects other features in the
same feature layer."""
return countSpatialRelation(layer, feature, "INTERSECT") - 1 # Subtract 1 because the feature will always intersect its clone in the feature layer
def countSpatialRelation(layer, feature, relation):
"""Returns the number of times a feature meets the specified spatial
relationship with other features in the same feature layer."""
arcpy.SelectLayerByLocation_management(layer, relation, feature)
count = int(arcpy.GetCount_management(layer).getOutput(0))
return count
def addField(table, fieldName, fieldType):
"""Adds a fields of the given name and type to a table, unless a field with
the same name already exists."""
desc = arcpy.Describe(table)
fieldInfo = desc.fieldInfo
fieldIndex = fieldInfo.findFieldByName(fieldName)
if fieldIndex == -1:
# Field does not exist, add it
arcpy.AddField_management(table, fieldName, fieldType)
def countTouchesAndIntersections(layer):
"""Adds and populates fields describing the number of times each feature
touches and intersects other features in the feature layer."""
addField(layer, numTouchesField, "LONG")
addField(layer, numIntersectionsField, "LONG")
desc = arcpy.Describe(layer)
shapeField = desc.shapeFieldName
rows = arcpy.UpdateCursor(layer)
for row in rows:
feature = row.getValue(shapeField)
row.setValue(numTouchesField, countTouches(layer, feature))
row.setValue(numIntersectionsField, countIntersections(layer, feature))
rows.updateRow(row)
del row, rows
if __name__ == "__main__":
layer = arcpy.MakeFeatureLayer_management(arcpy.GetParameterAsText(0))
countTouchesAndIntersections(layer)
일단 실행되면 정확히 두 번 터치하고 정확히 두 번 교차하는 기능 (케이스 1)과 0 번 터치하고 정확히 두 번 교차하는 기능 (케이스 2)을 쉽게 쿼리 할 수 있습니다.
정의 쿼리 예 :
"NUM_TOUCHES" = 2 AND "NUM_INTERSECTIONS" = 2
"NUM_TOUCHES" = 0 AND "NUM_INTERSECTIONS" = 2
발견 된 두 사례의 사례를 보려면 아래 스크린 샷을 참조하십시오.
실제 데이터를 사용하면 일반적으로 거리 세그먼트가 교차로에서 부서지고 도로는 인터체인지 나 다리 에서처럼 도로가 서로를 지나갈 때만 매달려 있습니다. 따라서 일반적으로 터치하는 것과 동일한 수의 기능이 교차합니다.
보다 일반적인 경우의 여부를 확인하여 댕글 링을 찾을 수 있습니다 "NUM_INTERSECTIONS" > "NUM_TOUCHES"
.
정점 분할 (데이터 관리)
"정점에서 입력 선 또는 다각형 경계를 분할하여 생성 된 선을 포함하는 피쳐 클래스를 작성합니다."
귀속을 유지하십시오.
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000003z000000
네트워크의 노드를 추출 할 수도 있습니다. 1의 경우 원자가가 4 인 각각 2 개의 노드를 얻게됩니다. 2의 경우 노드가 없습니다.