1 votos

Cómo usar IMapTimeDisplay.TimeValue para obtener la configuración de tiempo actual del control deslizante de tiempo en ArcMap

¿Alguien ha usado el IMapTimeDisplay.TimeValue para obtener la hora actual del control deslizante de tiempo? No logro entender cómo usarlo correctamente.

Estoy escribiendo código en VB .net que crea un gráfico de barras (en una ventana acoplable en ArcMap) a partir de algunos de los valores de atributos en una clase de entidad de polígonos. Mi clase de entidad está habilitada para el tiempo con un atributo llamado "Año" y el control deslizante de tiempo es visible en ArcMap, pero los datos que envío al gráfico de barras no están filtrados por el año actual seleccionado en el control deslizante. Por lo tanto, necesito el tiempo actual para filtrar mis datos.

Tengo lo siguiente que puede no ser correcto, aunque no arroja un error:

Dim pMxDoc As IMxDocument = TryCast(My.ArcMap.Application.Document, IMxDocument)
Dim pMap As IMap = pMxDoc.FocusMap
Dim pMapTimeDisplay As IMapTimeDisplay = pMap
Dim pTimeValue As ITimeValue = pMapTimeDisplay.TimeValue
Dim pTimeExtent As ITimeExtent = TryCast(pTimeValue, ITimeExtent)   'añadido

Pero, no puedo averiguar qué hacer a partir de ahí. ¿Alguien me puede ayudar, por favor? He buscado en internet lo mejor que he podido.

Información adicional Intenté esto, pero causó un error en ArcMap:

Dim currentYear As Integer = pTimeExtent.StartTime.Year

El error es "Se ha producido una excepción no controlada..." y "System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto." Sin embargo, he utilizado pTimeExtent.StartTime.Year con éxito en otras partes de mi código para obtener el tiempo de inicio de todo el rango de tiempo usando pTimeExtent = pMapTimeDisplay.CurrentTimeExtent.

1voto

Tom Puntos 1944

Después de mucho jugar con las diversas propiedades de la interfaz IMapTimeDisplay2, finalmente encontré algo que funcionó. Quizás esto funciona porque mi conjunto de datos tiene habilitado el tiempo a través de un atributo llamado "Año" que tiene valores de año enteros desde 2010 hasta 2100 en incrementos de 5 años, y solo me interesa renderizar un año a la vez, por lo que el "tiempo de inicio" y "tiempo final" de los datos mostrados en el mapa son los mismos. De todas formas, vuelvo a convertir mi IMapTimeDisplay2.TimeValue a ITimeInstant de la siguiente manera:

Protected Overrides Sub OnClick()
    Dim pMxDoc As IMxDocument = My.ArcMap.Application.Document
    Dim pMap As IMap = pMxDoc.FocusMap
    Dim pTimeDisplay As IMapTimeDisplay2 = TryCast(pMap, IMapTimeDisplay2)
    Dim pTimeValue As ITimeValue = pTimeDisplay.TimeValue
    Dim pTimeInstant As ITimeInstant = TryCast(pTimeValue, ITimeInstant)
    If pTimeInstant IsNot Nothing Then
        Dim pCTime As ITime = pTimeInstant.Time
        Dim pCYear As Integer = pCTime.Year
        MsgBox(“tiempo instantáneo: " & pCYear)
    End If
End Sub

Este es solo un pequeño fragmento de código para ver si podía obtener solo el año actual en el que se encontraba el control deslizante de tiempo. Funcionó bien.

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