4 votos

Comprobar la extensión de Spatial Analyst, el código de ArcObjects

Actualización

Después de investigar más de cerca el ejemplo de CODE 2 (al final de este post), se comprueba la extensión spatial analyst (sa), sin embargo no se refleja en la opción de menú Herramientas>Extensiones como marcada. Sin embargo, puede seguir utilizando las herramientas sa.

--------------Original question---------------

Me gustaría comprobar la extensión del analista espacial para ArcMap 9.3.1 a través de este código de ArcObjects, pero cuando ejecuto el código (CODE1) me aparecen estos dos mensajes y la extensión no se comprueba en el diálogo Herramientas>Extensiones.

"Su licencia ya ha sido inicializada, por favor compruebe su implementación"

Y

"La licencia de SpatialAnalyst ha sido comprobada para su uso"

No sé qué significa exactamente el primer cuadro de mensaje. Cualquier sugerencia sería muy apreciada.

También encontré este código (CODE2) para activar la extensión del analista espacial, pero tampoco funciona. ¿Tal vez me estoy perdiendo algo obvio con este? ¡Gracias!

CÓDIGO 1


Private Sub UIButtonControl6_Click()

  Dim licenseStatus As esriLicenseStatus

  licenseStatus = CheckOutLicense(esriLicenseProductCodeEngine)

  If (licenseStatus = esriLicenseNotLicensed) Then

    licenseStatus = CheckOutLicense(esriLicenseProductCodeArcView)

  If (licenseStatus = esriLicenseNotLicensed) Then

    licenseStatus = CheckOutLicense(esriLicenseProductCodeArcEditor)

      If (licenseStatus = esriLicenseNotLicensed) Then
        licenseStatus = CheckOutLicense(esriLicenseProductCodeArcInfo)
      End If
    End If
  End If

  'Take a look at the licenseStatus to see if it failed
  'Not licensed

  If (licenseStatus = esriLicenseNotLicensed) Then

    MsgBox "You are not licensed to run this product"

  'The licenses needed are currently in use

 ElseIf (licenseStatus = esriLicenseUnavailable) Then

    MsgBox "There are insufient licenses to run"

 'The licenses unexpected license failure

  ElseIf (licenseStatus = esriLicenseFailure) Then

    MsgBox "Unexpected license failure please contact you administrator'"

  'Already initialized (Initialization can only occur once)

  ElseIf (licenseStatus = esriLicenseAlreadyInitialized) Then

    MsgBox "You license has already been initialized please check you implementation"

  'Everything was checkedout successfully

  ElseIf (licenseStatus = esriLicenseCheckedOut) Then

    MsgBox "Licenses checked out successfully"

  End If

    Dim bAlreadyCheckedOut As Boolean

  bAlreadyCheckedOut = m_pAoInitialize.IsExtensionCheckedOut(esriLicenseExtensionCodeSpatialAnalyst)

  If (Not bAlreadyCheckedOut) Then

    licenseStatus = m_pAoInitialize.CheckOutExtension (esriLicenseExtensionCodeSpatialAnalyst)

    If (licenseStatus = esriLicenseUnavailable) Then

      MsgBox "All SpatialAnalyst licenses are currently in use"

    ElseIf (licenseStatus = esriLicenseCheckedOut) Then

      licenseStatus = esriLicenseCheckedOut

      MsgBox "SpatialAnalyst license has been checked out for use"

    Else
      MsgBox "Unexpected licensing failure contact you administor"
    End If
  End If

  End Sub

Private Function CheckOutLicense(productCode As esriLicenseProductCode) As esriLicenseStatus

  Dim licenseStatus As esriLicenseStatus
  Set m_pAoInitialize = New AoInitialize
  CheckOutLicense = esriLicenseUnavailable

  'Check the productCode

  licenseStatus = m_pAoInitialize.IsProductCodeAvailable(productCode)
  If (licenseStatus = esriLicenseAvailable) Then

    'Check the extensionCode

    licenseStatus = m_pAoInitialize.IsExtensionCodeAvailable(productCode, esriLicenseExtensionCodeSpatialAnalyst)
    If (licenseStatus = esriLicenseAvailable) Then
      'Initialize the license
      licenseStatus = m_pAoInitialize.Initialize(productCode)
    End If
  End If

  CheckOutLicense = licenseStatus

End Function

CÓDIGO 2


  Dim gp As Object

            gp = CreateObject("esriGeoprocessing.GPDispatch.1")

            If gp.CheckExtension("spatial") = "NotLicensed" Then

                MessageBox.Show("NotLicensed")

            ElseIf gp.CheckExtension("spatial") = "Unavailable" Then

                MessageBox.Show("Unavailable")

            ElseIf gp.CheckExtension("spatial") = "NotInitialized" Then

                MessageBox.Show("NotInitialized")

            ElseIf gp.CheckExtension("spatial") = "Available" Then

                gp.CheckOutExtension("spatial")

                MessageBox.Show("Checkout")

            End If

6voto

mrigasira Puntos 834

Hay que distinguir entre licencias de producto y licencias de extensión. ArcGIS Desktop en su conjunto tiene tres niveles de licencia de producto: ArcView, ArcEditor y ArcInfo.

Además del producto en sí, hay varios extensiones que se puede licenciar. Spatial Analyst es una de esas extensiones.

  • Si su código se ejecuta desde ArcMap ya habrá una licencia de producto en uso de algún tipo, de lo contrario ArcMap no se estaría ejecutando. Por eso recibe el primer mensaje. Normalmente, sólo se ejecuta un código explícito para comprobar una licencia de producto en una aplicación de ArcEngine.
  • El segundo trozo de código que tiene pasa por el marco de geoprocesamiento para comprobar una licencia SA. A menos que estés en un GP de Python script, esta es una mala manera de hacer las cosas. En ArcObjects su primer segmento de código es la forma de manejar las licencias.

ACTUALIZACIÓN

Para habilitar mediante programación una extensión en una aplicación de escritorio, siga las instrucciones del Cómo utilizar las extensiones tema de ayuda. Código VB.NET copiado directamente de la ayuda:

Dim factoryType As Type = Type.GetTypeFromProgID("esriSystem.ExtensionManager")
Dim extensionManager As IExtensionManager = CType(Activator.CreateInstance(factoryType), IExtensionManager)

Dim uid As IUID = New UIDClass()
uid.Value = "esriSpatialAnalystUI.SAExtension"
Dim extension As IExtension = extensionManager.FindExtension(uid)
Dim extensionConfig As IExtensionConfig = CType(extension, IExtensionConfig)

Dim wasEnabled As Boolean = (extensionConfig.State = esriExtensionState.esriESEnabled)

If Not wasEnabled Then
    If Not(extensionConfig.State = esriExtensionState.esriESUnavailable) Then
        extensionConfig.State = esriExtensionState.esriESEnabled
    Else 
        ' Handle the case when the license is not available.
        ' Provide an error message or exit to avoid running unavailable functionality.
    End If
End If

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