Saya mencoba menggunakan ArcObject dengan Python. Saya memang punya masalah dengan menetapkan antarmuka (yaitu IZ.InterpolateZsBetween) ke objek saya dengan data geometri, kode adalah:
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)
Kenapa ini tidak berhasil? Outputnya adalah:
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))
Jadi saya mencoba:
pShape = pFeat.ShapeCopy
pIZ = pShape.QueryInterface(esriGeometry.IZ2)
pShape.InterpolateZsBetween(0, 0, 0, 4)
Dan ini berhasil. Tetapi bagaimana cara mengembalikannya dan menyimpannya di fitur saya? Saya belajar Python dan ArcObjects, jadi harap dipahami. Bantuan apa pun akan dihargai.
arcobjects
python
Tomek
sumber
sumber
Jawaban:
The
IZ
antarmuka diimplementasikan hanya padaPolygon
danPolyline
kelas, yang Anda peroleh dariShape
atauShapeCopy
sifat-sifat suatuIFeature
. Anda tidak bisa QI antara antarmuka yang tidak didukung (baik diimplementasikan atau diwarisi) oleh suatu objek. Gunakan dokumentasi untuk salah satu SDK ArcObjects untuk melihat antarmuka yang diterapkan setiap kelas. Membaca Diagram Model Obyek (tercantum di bawah setiap namespace dalam bantuan, contoh ) juga bisa sangat membantu untuk melihat hubungan warisan / implementasi antara berbagai kelas dan antarmuka.Adapun alur kerja Anda yang sebenarnya, Anda harus menggunakan metode
Update
alih - alihSearch
pada kelas fitur Anda untuk mendapatkan kursor pembaruan , dan kemudian mengaturShape
properti fitur ke hasilInterpolateZsBetween
metode dan akhirnya memanggilIFeatureCursor.UpdateFeature
(terima kasih atas koreksi @Ragi ).sumber