Python에서 ArcObject를 사용하려고합니다. 지오메트리 데이터로 객체에 인터페이스 (예 : 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)
그리고 이것은 효과가 있습니다. 그러나 그것을 다시 붙이고 내 기능에 저장하는 방법은 무엇입니까? 저는 Python과 ArcObjects를 배우고 있으므로 이해하십시오. 도움을 주시면 감사하겠습니다.
1
COM과 Python은 예쁘지 않지만 이것이 원하는 것을 얻을 수있는 경로입니다. 이것을 너무 빨리 얻기위한 +1!
—
Ragi Yaser Burhum
분명히 COM과 Python은 잘 어울리지 않지만 Python은 사용자 친화적 인 것처럼 프로그래밍으로 모험을 시작하기에 좋은 장소라고 생각했습니다. 이 작업을 완료하면 C # 또는 C ++를 살펴보기 시작합니다. 많은 분들 감사합니다.
—
Tomek