Select to view content in your preferred language

No está definido el tipo ‘FeatureClassName’

356
0
07-31-2023 11:08 AM
AnibalMmartinez
Occasional Contributor

Public Function ExportToShapefile() As Boolean
Dim logger As log4net.ILog = LogFactory.GetLoggerService()
Dim featclassName As String="BuenosAires"
Dim pathExport As String="c:\temp\"
Dim fileExport As String"BuenosAires.Shp"

Try
Dim objConsde As ConSde
Dim Owner As String

objConsde = Conexion.Instancia.GetConexionSDE(DataProvidersde.SQLSDEANALYTICS.ToString)
Owner = Conexion.Instancia.ownerAnalytics
featclassName = Owner & featclassName

' Crear WorkspaceName del origen
Dim sourceWorkspaceDataset As IDataset
Dim sourceWorkspaceName As IWorkspaceName
sourceWorkspaceDataset = objConsde.sdeWorkspace
sourceWorkspaceName = sourceWorkspaceDataset.FullName
'Crear FeatureClassName del origen
Dim sourceFeatureClassName As IFeatureClassName = New FeatureClassName()
Dim sourceDatasetName As IDatasetName = sourceFeatureClassName

sourceDatasetName.WorkspaceName = sourceWorkspaceName
sourceDatasetName.Name = featclassName

'Crear WorkspaceName del destino
Dim targetWorkspaceDataset As IDataset
Dim targetWorkspaceName As IWorkspaceName
Dim pShapeFileWorkspace As IWorkspaceFactory
Dim targetWorkspace As IWorkspace

' Abre workspace del destino (path de los shapefiles)
Dim pPropset As IPropertySet
pPropset = New PropertySet
pPropset.SetProperty("DATABASE", pathExport)
pShapeFileWorkspace = New ShapefileWorkspaceFactory
targetWorkspace = pShapeFileWorkspace.Open(pPropset, Nothing)

targetWorkspaceDataset = targetWorkspace
targetWorkspaceName = targetWorkspaceDataset.FullName

' 'Crear FeatureClassName del destino

Dim targetFeatureClassName As IFeatureClassName = New FeatureClassName()
Dim targetDatasetName As IDatasetName = targetFeatureClassName
targetDatasetName.WorkspaceName = targetWorkspaceName
targetDatasetName.Name = fileExport


' Abre definición de campos del origen
Dim pName As IName
Dim pInFC As IFeatureClass
pName = sourceDatasetName
pInFC = pName.Open

' Valida Campos y guarde en campos destino
Dim pOutFCFields As IFields = Nothing
Dim pInFCFields As IFields
Dim pFieldCheck As IFieldChecker
Dim i As Long
pInFCFields = pInFC.Fields
pFieldCheck = New FieldChecker
pFieldCheck.Validate(pInFCFields, Nothing, pOutFCFields)

' +++ Recorre los campos para encontrar el campo geometría (SHAPE)
Dim pGeoField As IField = Nothing
For i = 0 To pOutFCFields.FieldCount
If pOutFCFields.Field(i).Type = esriFieldType.esriFieldTypeGeometry Then
pGeoField = pOutFCFields.Field(i)
Exit For
End If
Next i

' +++ Obtiene la definición del campo Geometría para destino
Dim pOutFCGeoDef As IGeometryDef
pOutFCGeoDef = pGeoField.GeometryDef

' +++ Obtiene la definición del índice y grilla espacial
Dim pOutFCGeoDefEdit As IGeometryDefEdit
pOutFCGeoDefEdit = pOutFCGeoDef
pOutFCGeoDefEdit.GridCount_2 = 1
pOutFCGeoDefEdit.GridSize_2(0) = 0
pOutFCGeoDefEdit.SpatialReference_2 = pGeoField.GeometryDef.SpatialReference

Dim pQueryFilter As IQueryFilter
pQueryFilter = New QueryFilter


' Crear objteo featuredataconverterclass
Dim pFCToFC As IFeatureDataConverter = New FeatureDataConverter()


' Convierte featureclass origen a featureclass destino
Dim pEnumErrors As IEnumInvalidObject
Try
pEnumErrors = pFCToFC.ConvertFeatureClass(sourceDatasetName, pQueryFilter, Nothing, targetDatasetName, pOutFCGeoDef, pOutFCFields, "", 1000, 0)

' Recorre resultado de la conversión y guarda en log
Dim pErrInfo As IInvalidObjectInfo
pErrInfo = pEnumErrors.Next
If Not pErrInfo Is Nothing Then
logger.Warn(featclassName & " - " & pErrInfo.ErrorDescription)
pErrInfo = pEnumErrors.Next
Do Until pErrInfo Is Nothing
logger.Warn(featclassName & " - " & pErrInfo.ErrorDescription)
Loop
Return False
Else
logger.Info(featclassName & " Export a Shapefile (SEGAT) sin errores")
Return True
End If


Catch ex As Exception
If ex.Message = "No support for this geometry type." Then
CreateShapeFile(pOutFCFields, pOutFCGeoDef, fileExport, "SHAPE", targetWorkspace)
logger.Info(featclassName & " Export a Shapefile (SEGAT) sin errores")
Return True
Else
Throw
End If

End Try


Catch ex As Exception
logger.Error(featclassName & " - " & ex.ToString)
Return False
End Try
End Function

Hola, tengo esta funcion que exporta 1 capa de la GEODATABASE a un shapefile, lo haciamos sobre ARCMAP y estamos migrando a ARCGIS ENTERPRISE SDK, y no funciona, los problemas que tenemos son 2

'Crear FeatureClassName del origen
Dim sourceFeatureClassName As IFeatureClassName = New FeatureClassName()
Dim sourceDatasetName As IDatasetName = sourceFeatureClassName

Nos dice que " No está definido el tipo ‘FeatureClassName’"

intentamos cambiar por

Dim sourceFeatureClassName As IDatasetName = New ObjectClassName()
Dim sourceDatasetName As IDatasetName = sourceFeatureClassName

Pero entonces nos pincha en la linea principal

pEnumErrors = pFCToFC.ConvertFeatureClass(sourceDatasetName, pQueryFilter, Nothing, targetDatasetName, pOutFCGeoDef, pOutFCFields, "", 1000, 0)

xque solo puede recibir el tipo FeatureClassName

Si nos pueden ayudar, el resto de nuestros codigos fueron migrables, menos este.

Gracias

Saludos,

Anibal 

Telecom Argentina

0 Replies