Suite

Arcobjects en Python : assigner une interface aux objets avec une géométrie de fonction (forme)

Arcobjects en Python : assigner une interface aux objets avec une géométrie de fonction (forme)


J'essaie d'utiliser ArcObject en Python. J'ai un problème avec l'attribution d'une interface (c'est-à-dire IZ.InterpolateZsBetween) à mon objet avec des données géométriques, le code est :

depuis 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)

Pourquoi cela ne fonctionne pas ? La sortie est :

Traceback (appel le plus récent en dernier) : Fichier "", ligne 1, dans  pIZ = pFeat.QueryInterface(esriGeometry.IZ2) Fichier "C:Python25libsite-packagescomtypes\__init__.py", ligne 1078, dans QueryInterface self.__com_QueryInterface(byref(iid), byref(p)) COMError : (-2147467262, 'Taki interfejs nie jest obsxb3ugiwany.', (Aucun, Aucun, Aucun, 0, Aucun))

J'ai donc essayé :

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

Et cela fonctionne. Mais comment le recoller et l'enregistrer dans ma feature ? J'apprends Python et ArcObjects, alors soyez compréhensif. Toute aide serait appréciée.


Le IZ l'interface n'est implémentée que sur le Polygone et Polyligne cours, que vous obtenez auprès du Façonner ou alors FormeCopier propriétés d'un IFonction. Vous ne pouvez pas QI entre des interfaces qui ne sont pas prises en charge (soit implémentées ou héritées) par un objet. Utilisez la documentation de l'un des SDK ArcObjects pour voir les interfaces implémentées par chaque classe. La lecture des diagrammes de modèles d'objets (listés sous chaque espace de noms dans l'aide, exemple) peut également être très utile pour voir les relations d'héritage/implémentation entre les différentes classes et interfaces.

En ce qui concerne votre flux de travail réel, vous devrez utiliser le Mettre à jour à la place de Chercher sur votre classe d'entités pour obtenir un curseur de mise à jour, puis définissez leFaçonnerpropriété de la caractéristique au résultat de la InterpolerZsEntre méthode et enfin appeler IFeatureCursor.UpdateFeature (merci pour la correction @Ragi).


Voir la vidéo: GIS Python: Count shape files and Select by Location 2 Real world ArcPy examples