पायथन में आर्कोबजेक्ट्स: फीचर (आकृति) ज्यामिति के साथ वस्तुओं को इंटरफ़ेस असाइन करें


10

मैं पायथन में आर्कोबजेक्ट का उपयोग करने की कोशिश कर रहा हूं। मुझे ज्यामिति डेटा के साथ मेरी वस्तु पर एक इंटरफ़ेस (यानी IZ.InterpolateZsBetween) असाइन करने में समस्या है, कोड है:

from Comtypes.client import CreateObject, GetModule
import arcgisscripting

gp = arcgisscripting.create(9.3)
gp.setproduct("ArcInfo")

esriSystem = GetModule("C:/Program Files (x86)/ArcGIS/com/esriSystem.olb")
esriGeometry = GetModule("C:/Program Files (x86)/ArcGIS/com/esriGeometry.olb")
esriDataSourcesGDB = GetModule("C:/Program Files (x86)/ArcGIS/com/esriDataSourcesGDB.olb")
esriGeoDatabase = GetModule("C:/Program Files (x86)/ArcGIS/com/esriGeoDatabase.olb")

sPath ="c:/temp/test.gdb"
pWSF = CreateObject(esriDataSourcesGDB.FileGDBWorkspaceFactory,\
                    interface=esriGeoDatabase.IWorkspaceFactory)
pWS = pWSF.OpenFromFile(sPath, 0)
pFWS = pWS.QueryInterface(esriGeoDatabase.IFeatureWorkspace)
pFClass = pFWS.OpenFeatureClass("test_z")
pFCursor = pFClass.Search(None, True)
pFeat = pFCursor.NextFeature()
pIZ = pFeat.QueryInferface(esriGeometry.IZ2)

यह काम क्यों नहीं कर रहा है? आउटपुट है:

 Traceback (most recent call last):
  File "<pyshell#175>", line 1, in <module>
    pIZ = pFeat.QueryInterface(esriGeometry.IZ2)
   File "C:\Python25\lib\site-packages\comtypes\__init__.py", line 1078, in QueryInterface
 self.__com_QueryInterface(byref(iid), byref(p))
 COMError: (-2147467262, 'Taki interfejs nie jest obs\xb3ugiwany.', (None, None, None, 0, 
 None))

इसलिए मैंने कोशिश की:

pShape = pFeat.ShapeCopy
pIZ = pShape.QueryInterface(esriGeometry.IZ2)
pShape.InterpolateZsBetween(0, 0, 0, 4)

और यह काम कर रहा है। लेकिन इसे वापस कैसे चिपकाएं और इसे मेरी सुविधा में सहेजें? मैं पायथन और आर्कोबजेक्ट सीख रहा हूं, इसलिए कृपया समझ में आए। किसी भी तरह की सहायता को आभार समझेंगे।


1
COM और पायथन बहुत सुंदर नहीं लगते हैं, लेकिन यह वह मार्ग है जो आपको वही मिलेगा जो आप चाहते हैं। यह इतनी जल्दी पाने के लिए +1!
रागी यासर बुरहुम

आप कुछ सहायक कार्यों के साथ इसे थोड़ा बढ़ा सकते हैं ।
ब्लाह 238

स्वाभाविक रूप से COM और पायथन जोड़ी में अच्छी तरह से नहीं जाते हैं, लेकिन मैं सोच रहा था कि पायथन प्रोग्रामिंग के साथ अपने साहसिक कार्य को शुरू करने के लिए अच्छी जगह होगी क्योंकि यह काफी उपयोगकर्ता के अनुकूल लगता है। एक बार जब मैं इस कार्य को पूरा कर लेता हूं, तो मैं C # या C ++ को देखना शुरू करूंगा। बहुत बहुत धन्यवाद दोस्तों।
टोमेक

जवाबों:


4

IZइंटरफ़ेस केवल पर लागू किया गया है Polygonऔर Polylineकक्षाएं, जो आप से प्राप्त Shapeया ShapeCopyएक के गुणों IFeature। आप किसी ऑब्जेक्ट द्वारा समर्थित (या तो कार्यान्वित या विरासत में मिली) इंटरफेस के बीच QI नहीं कर सकते। प्रत्येक वर्ग के इम्प्लॉइज को देखने के लिए आर्कओबजेक्ट्स एसडीके में से एक के लिए प्रलेखन का उपयोग करें । ऑब्जेक्ट मॉडल आरेख (मदद, उदाहरण में प्रत्येक नाम स्थान के तहत सूचीबद्ध) पढ़ना भी विभिन्न वर्गों और इंटरफेस के बीच विरासत / कार्यान्वयन संबंधों को देखने के लिए बहुत सहायक हो सकता है।

अपने वास्तविक वर्कफ़्लो के लिए, आपको अपडेट कर्सर प्राप्त करने के लिए अपनी फीचर क्लास पर विधि के Updateबजाय उपयोग करने की आवश्यकता होगी , और फिर फीचर के परिणाम को विधि के परिणाम पर सेट करें और अंत में कॉल करें (सुधार के लिए धन्यवाद @Ragi )।SearchShapeInterpolateZsBetweenIFeatureCursor.UpdateFeature


2
सब कुछ सही है, सिवाय आप IFeature :: Store को UpdateCursor (यह एक UpdateCursor का उपयोग करने के उद्देश्य को पराजित करता है) का उपयोग करके कॉल नहीं करना चाहते हैं। आप इसके बजाय UpdateFeature को कॉल करना चाहते हैं। help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/…
रागी यासर बुरहुम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.