5 votos

¿Cómo puedo determinar el nombre de la capa en una sesión de edición?

Tengo un problema con una extensión del editor en un Add-In para ArcGIS 10. La extensión del editor escucha diferentes eventos que ocurren en las capas de shapefile mediante el registro de oyentes:

mEditEvents.OnChangeFeature += OnChangeFeature;
mEditEvents.OnCreateFeature += OnCreateFeature;
mEditEvents.OnDeleteFeature += OnDeleteFeature;

Todo lo que obtienen estos callbacks es un parámetro de tipo IObject, que puede ser lanzado a IFeature. Con este IFeature puedo obtener la clase de característica y su nombre de alias (IFeature.Class.AliasName) que parece ser el nombre del shapefile asociado a esta característica, pero quiero el nombre de la capa asociada a esta característica que puede ser diferente del nombre del shapefile.

¿Hay alguna forma de obtener este nombre de capa?

Gracias de antemano.

Actualización:

He encontrado una solución (ver mi comentario más abajo) - ¡gracias por la ayuda!

2voto

kjo Puntos 197

Es posible que tenga que obtener primero el nombre del conjunto de datos de la función. A continuación, puede hacer un bucle con todas las capas de la TOC y comprobar si su nombre de conjunto de datos coincide con el obtenido anteriormente. Se vería algo como lo siguiente.

IFeature feature = //get the feature..;
IDataset featureDs = (IDataset)feature.Class;
IMap map = //get the map...;

for (int i = 0; i < map.LayerCount; i++)
{
    ILayer layer = map.get_Layer(i);
    if (layer is IFeatureLayer)
    {
        IFeatureClass layerFc = ((IFeatureLayer)layer).FeatureClass;
        IDataset layerDs = (IDataset)layerFc;

        if (layerDs.Name == featureDs.Name)
        {
            //print the layer name in TOC..
            System.Diagnostics.Debug.Print(layer.Name);
        }
    }
}

1voto

Daniel Williams Puntos 116

Finalmente encontré una solución sencilla: Antes de iniciar la sesión de edición almaceno los nombres de los alias de cada una de las capas (puedo identificar las capas por sus nombres).

Con este mapeo ahora puedo relacionar cualquier evento de edición con la capa correcta porque tengo el AliasName de la FeatureClass de la característica.

0voto

CodeSlave Puntos 7133

IFeature:Tabla

[ IDataset:Nombre

Puede utilizar la propiedad IFeature:Table. Table implementa IDataset por lo que puede obtener el nombre de la propiedad IDataset:Name. He aquí un ejemplo:

Private Function GetPathFromFeature(ByVal pfeature As IFeature) As System.String

If pfeature Is Nothing Then Return Nothing

Dim ptable As ITable = CType(pfeature.Table, ITable)

If ptable Is Nothing OrElse Not (TypeOf ptable Is IDataset) Then
    Return Nothing
End If

Dim dataset As IDataset = CType(ptable, IDataset) ' Explicit Cast

Return (dataset.Workspace.PathName & "\" & dataset.Name)

Fin de la función

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X