ArcGIS डेस्कटॉप का उपयोग करके लाइन (निकटतम वर्टेक्स टू लाइन) बनाना?


11

मैं ArcInfo 10 SP3 का उपयोग कर रहा हूं।

मैं हमारे उपयोगिता डेटा के पुनर्गठन में काम कर रहा हूं। दो साल पहले, हमने निजी सेवा पानी लाइन एकत्र करना शुरू कर दिया है। पुराने रिकॉर्ड ड्रॉइंग से निकालने के लिए हमारे पास अभी भी बहुत कुछ है।

मैं सोच रहा था कि क्या लाइन बनाने का कोई तरीका है जो वाटरमैन लाइन के लिए हमारे भवन के पैरों के निशान को जोड़ देगा?

मैं बिल्डिंग वर्टेक्स को एक मुख्य बिंदु के रूप में वाटर मेन के सबसे नजदीक उपयोग करना चाहूंगा।

यहाँ छवि विवरण दर्ज करें

जवाबों:


10

यदि आप एक ऐसे समाधान की तलाश कर रहे हैं जिसमें .NET टूल को विकसित करने की आवश्यकता नहीं है, तो आप वास्तव में जो कुछ भी है उसे पूरा करने के लिए नीचे दिए गए पायथन स्क्रिप्ट का उपयोग कर सकते हैं। मुझे ठीक वैसी ही आवश्यकता थी और निम्न स्क्रिप्ट को समाधान के रूप में लिखा। इसे 4 मापदंडों के साथ एक आर्ककॉस्टिक्स टूल के रूप में कॉन्फ़िगर करें, या मापदंडों की टिप्पणी करें और हार्डकोड किए गए चर को अनियंत्रित करें और इसे सीधे चलाएं।

# CreateLineFromNearestVertexToFeature.py
# Author: Jeff Berry
# Description: Creates a line between the nearest vertext on source features
# to the nearest feature in target feature class.
# ---------------------------------------------------------------------------

# Import arcpy module
import arcpy
from arcpy import env

# Local variables:
# 1. SourceFC - Feature Class 
# 2. TargetFC - Feature Class
# 3. Output_gdb - Geodatabase
# 4. Output_fc - String

SourceFC = arcpy.GetParameterAsText(0)
TargetFC = arcpy.GetParameterAsText(1)
Output_gdb = arcpy.GetParameterAsText(2)
Output_fc = arcpy.GetParameterAsText(3)

## Alternatively setup hardcoded variables    
##SourceFC = "Buildings"
##TargetFC = "WaterMains"
##Output_gdb = "D:\\New File Geodatabase.gdb"
##Output_fc = "lines_output"

SourceFeaturePoints = "SrcFtrPoints"
arcpy.env.workspace = Output_gdb

# Process: Feature Vertices To Points
arcpy.FeatureVerticesToPoints_management(SourceFC, SourceFeaturePoints, "ALL")

# Process: Near
arcpy.Near_analysis(SourceFeaturePoints, TargetFC, "1000 Feet", "LOCATION", "NO_ANGLE")

# Process: Create Feature Class...
#arcpy.CreateFeatureclass_management(Output_gdb, Output_fc, "POLYLINE", "", "DISABLED", "DISABLED", "", "", "0", "0", "0")
rows = arcpy.SearchCursor(SourceFeaturePoints)

lstIDs = []

for row in rows:
    lstIDs.append(row.ORIG_FID)

uniqueOBJIDS = set(lstIDs)
newLineList = []
shapeName = arcpy.Describe(SourceFeaturePoints).shapeFieldName

for objID in uniqueOBJIDS:
    rows = arcpy.SearchCursor(SourceFeaturePoints, "\"NEAR_DIST\" = (SELECT MIN( \"NEAR_DIST\") FROM SrcFtrPoints WHERE \"ORIG_FID\"  = " + str(objID) + ")")
    for row in rows:
        arrayLine = arcpy.Array()
        ftr = row.getValue(shapeName)
        pointStart = ftr.firstPoint
        pointEnd = arcpy.Point(row.NEAR_X, row.NEAR_Y)
        arrayLine.add(pointStart)
        arrayLine.add(pointEnd)
        plyLine = arcpy.Polyline(arrayLine)
        newLineList.append(plyLine)


arcpy.CopyFeatures_management(newLineList, Output_fc)
arcpy.Delete_management(SourceFeaturePoints, "FeatureClass")

del rows
del row
del SourceFeaturePoints
del Output_fc
del Output_gdb
arcpy.ClearEnvironment("workspace")

2

IIndexQuery2 पर "नियरेस्टफेचर" पद्धति को देखें।

आप इसका उपयोग प्रत्येक भवन के निकटतम जल मुख्य विशेषता को प्राप्त करने के लिए कर सकते हैं। मुझे लगता है कि फिर आपको किसी न किसी प्रकार से प्रत्येक भवन पर स्थित छोरों को देखना होगा, जो कि इस सुविधा के लिए निकटतम दूरी है, फिर भवन से कोने का उपयोग करके एक नई पॉलीलाइन का निर्माण करें और अंतिम बिंदु के रूप में तरबूज का निर्माण करें। जब मैंने ऐसा किया है, केवल दो बिंदु फीचरक्लास का उपयोग कर रहा था, काश मैं अपने सिर के शीर्ष से अधिक की पेशकश कर पाता ..: D

IFeatureCursor pDepthCursor = pDepthSoundings.Search(null, false);
IFeatureIndex2 pFtrInd = new FeatureIndexClass();
pFtrInd.FeatureClass = pDepthSoundings.FeatureClass;
pFtrInd.FeatureCursor = pDepthCursor;
pFtrInd.Index(null, pCombinedEnvelope);
IIndexQuery2 pIndQry = pFtrInd as IIndexQuery2;

int FtdID = 0;
double dDist2Ftr = 0;
pIndQry.NearestFeature(ppoint, out FtdID, out dDist2Ftr);

IFeature pCloseFeature = pDepthSoundings.FeatureClass.GetFeature(FtdID);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.