from snippetarcgis102 import CreateMXD,CType,NewObj import snippetarcgis102 import os snippetarcgis102.GetStandaloneModules() snippetarcgis102.InitStandalone() import comtypes.gen.esriCarto as esriCarto import comtypes.gen.esriGeoDatabase as esriGDB import comtypes.gen.esriDisplay as esriDisplay import comtypes.gen.esriArcMapUI as esriArcMap import comtypes.gen.esriFramework as esriFramework import comtypes.gen.esriMaplex as esriMaplex import comtypes.gen.esriSystem as esriSystem import comtypes.gen.esriGeometry as esriGeometry def coordinate_system(projected_EPSG,geographic_EPSG):#return list [geographic,projected] coordinate system coord_factory = NewObj(esriGeometry.SpatialReferenceEnvironment, esriGeometry.ISpatialReferenceFactory3) gcs = coord_factory.CreateGeographicCoordinateSystem(geographic_EPSG) spref_gcs = CType(gcs,esriGeometry.ISpatialReference) spref_gcs.SetFalseOriginAndUnits(-180, -90, 1000000) pcs = coord_factory.CreateProjectedCoordinateSystem(projected_EPSG) pcs.SetFalseOriginAndUnits (0, 0, 1000) spref_pcs = CType(pcs,esriGeometry.ISpatialReference) return [spref_gcs,spref_pcs] 1 import comtypes.gen.esriDataSourcesGDB as esriDataSourcesGDB 2 workspace_factory = NewObj(esriDataSourcesGDB.FileGDBWorkspaceFactory, esriGDB.IWorkspaceFactory2) 3 if_gdb = os.path.abspath(gdb_path) #rabochaya versija 4 if os.path.isfile(if_gdb): #if not exsists then create gdb 5 workspace_factory.Create(os.path.dirname(gdb_path),os.path.basename(gdb_path[:-4]), None, 0) 6 workspace = workspace_factory.OpenFromFile(gdb_path,0) 7 feature_workspace = CType(workspace,esriGDB.IFeatureWorkspace) 8 9 cs =coordinate_system(28413,4284) 10 11 fcDesc = NewObj(esriGDB.FeatureClassDescription,esriGDB.IFeatureClassDescription) 12 ocDesc = CType(fcDesc, esriGDB.IObjectClassDescription) 13 fields_ = ocDesc.RequiredFields 14 #fields = NewObj(esriGDB.Fields, esriGDB.IFields2) 15 fields = CType(fields_,esriGDB.IFields2) 16 for i in range(fields.FieldCount): 17 print fields.Field(i).Name 18 19 fields_edit = CType(fields,esriGDB.IFieldsEdit) 20 fields_edit.FieldCount_2 =3 21 field = NewObj(esriGDB.Field,esriGDB.IField2) 22 field_edit = CType(field, esriGDB.IFieldEdit2) 23 24 geometry_def = NewObj(esriGDB.GeometryDef,esriGDB.IGeometryDef) 25 geometry_def_edit = CType(geometry_def, esriGDB.IGeometryDefEdit) 26 27 geometry_def_edit.GeometryType_2 = 3 #1 -point,2-multypoint,13-line, 3 - polyline, 4 - polygon 28 print geometry_def_edit.GeometryType 29 print geometry_def.GeometryType 30 geometry_def_edit.GridCount_2 = 1 #number of spatial indexes 31 geometry_def_edit.HasM_2= False 32 geometry_def_edit.HasZ_2= False 33 geometry_def_edit.SpatialReference_2 = cs[0] 34 geometry_def_edit.Project_2 = cs[1] 35 36 """editing geometry field and appending it to fields""" 37 field_edit.Name_2 = 'SHAPE' 38 field_edit.Type_2 = 7 # geometry 39 field_edit.GeometryDef_2 = geometry_def 40 field_edit.IsNullable_2 = True 41 field_edit.Required_2 = True 42 fields_edit.AddField(field) 43 for i in range(fields.FieldCount): 44 print fields.Field(i).Name 45 46 feature_workspace.CreateFeatureClass('test_line',fields,None,None,1,"SHAPE","") the last line 46 works fine, but it creates polygon without spatial reference(by default). the SET property needs "_2" appending according snippets from arcgis help
[Visual Basic .NET] Public WriteOnly Property GeometryType_2
[C#] public void GeometryType_2 {set;}
but when i check and print read only property,(line 28 ,29) it returns 0 instead of 3,which i set in line 27. if I delete "_2" from property name python throws error 'Can't set attribute' -and it is obvious, because without "_2" it is read only property. In other interfaces I've used there were read-write properties with the same name, and it works excelent. In this case the names are different,how can i correctly set this properties??
P.S. before arcobjects, i've used arcpy, but it too slow, and functionality of arcpy isn't enough for me in future work.
أكثر...
[Visual Basic .NET] Public WriteOnly Property GeometryType_2
[C#] public void GeometryType_2 {set;}
but when i check and print read only property,(line 28 ,29) it returns 0 instead of 3,which i set in line 27. if I delete "_2" from property name python throws error 'Can't set attribute' -and it is obvious, because without "_2" it is read only property. In other interfaces I've used there were read-write properties with the same name, and it works excelent. In this case the names are different,how can i correctly set this properties??
P.S. before arcobjects, i've used arcpy, but it too slow, and functionality of arcpy isn't enough for me in future work.
أكثر...