एक समय में एकल सुविधा के लिए, आप सामान्य रूप से सामान्य रूप से स्थान का चयन करके संवाद का उपयोग करते हुए इस आसानी से कर सकते हैं , लाइन ओवरले पर लाइन के लिए स्थानिक संबंध प्रकारों के लिए एक गाइड के रूप में निम्न कुंजी का उपयोग करके ( स्थान का चयन करें: ग्राफिक उदाहरण से ):
(स्रोत: arcgis.com )
लाइन का उपयोग करके लाइन का चयन करें
इंटरसेक्ट ए, सी, डी, ई, एफ, जी, एच, आई, जे
CONTAINS जी, एच
COMPLETELY_CONTAINS जी
CONTAINS_CLEMENTINI जी, एच
एफ के साथ, एच
COMPLETELY_WITHIN एफ
WithIN_CLEMENTINI F, H
ARE_IDENTICAL_TO H
BOUNDARY_TOUCHES C, E
इस मामले में प्रासंगिक संबंध प्रकार हैं INTERSECT
और BOUNDARY_TOUCHES
। जैसा कि आप ऊपर दिए गए आरेख से देख सकते हैं, आप उन BOUNDARY_TOUCHES
विशेषताओं का चयन करने के लिए उपयोग कर सकते हैं जो लाइन के एक समापन बिंदु को छूते हैं। यदि वास्तव में दो सुविधाओं का चयन किया जाता है, तो आपके पास अपना केस 1 है। यदि किसी विशेषता को किसी अन्य सुविधाओं द्वारा नहीं छुआ गया है, लेकिन केवल उनके द्वारा प्रतिच्छेद किया गया है, तो BOUNDARY_TOUCHES
कुछ भी नहीं चुनेंगे। INTERSECT
वे सभी सुविधाओं का चयन करेंगे जो इस बात की परवाह किए बिना कि वे किसी समापन बिंदु पर स्पर्श करते हैं या नहीं। तो अगर आपको पता है कि एंडपॉइंट्स को छूने वाले फीचर्स नहीं हैं, लेकिन आपको लगता है कि फीचर्स इंटरसेक्टिंग हैं, तो आपके पास अपना केस 2 है।
प्रक्रिया को स्वचालित करने के लिए आप फ़ीचर क्लास या लेयर में प्रत्येक फ़ीचर के लिए टच और चौराहों की संख्या की गणना करने के लिए निम्न पायथन स्क्रिप्ट ( स्क्रिप्ट टूल के रूप में लागू करें ) को लागू कर सकते हैं।
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) को काटते हैं।
उदाहरण परिभाषा प्रश्न:
- केस 1 (दो बार छूता है, दो बार प्रतिच्छेदन):
"NUM_TOUCHES" = 2 AND "NUM_INTERSECTIONS" = 2
- केस 2 (कोई नहीं छूता है, दो बार काटता है):
"NUM_TOUCHES" = 0 AND "NUM_INTERSECTIONS" = 2
नीचे दिए गए स्क्रीनशॉट के उदाहरणों के दो मामलों के उदाहरणों के लिए देखें:
ध्यान दें कि वास्तविक दुनिया के आंकड़ों के साथ, आमतौर पर सड़क खंडों को चौराहों पर तोड़ दिया जाता है, और केवल तभी सड़कें बनती हैं, जब सड़कें एक दूसरे से एक इंटरचेंज या पुल पर गुजरती हैं। तो आम तौर पर आपके पास छूने के रूप में प्रतिच्छेदन की समान संख्या होती है।
अधिक सामान्य मामले के लिए, आप जाँच कर किसी भी खतरे की तलाश कर सकते हैं कि क्या "NUM_INTERSECTIONS" > "NUM_TOUCHES"
।