Me he dado cuenta de que la secuencia de comandos de ArcGIS 10.0 con Python impone demasiadas limitaciones para mis objetivos con ArcGIS, así que me he decidido a morder la bala y profundizar en ArcObjects.
Al parecer, el uso de ArcObjects en ArcGIS 10.0 se ha vuelto un poco más fácil porque no es un nuevo marco que evita tener que lidiar con los objetos COM. Esto parece bueno, pero también significa menos ejemplos para aquellos que se están iniciando en 10.0
La única detallada de ESRI ejemplo de principio con ArcObjects es un tutorial de cómo crear un complemento. Las instrucciones para obtener un poco vago en el paso 2a) y 3 de la sección Adición de ZoomToLayer funcionalidad al botón personalizado:
< 2 > Para implementar ZoomToLayer la funcionalidad en el botón, el uso de ArcGIS Fragmento Buscador de la herramienta.
- una. Haga clic con el Visual Studio ventana del editor de código en el deseado punto de inserción.
- b, c, d
< 3 > Invocar el ZoomToLayer método a OnClick() método de aplicación.
Esto es lo que mi ZoomToLayerButton.cs archivo se ve como antes el paso 2:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace CustomUIElements
{
public class ZoomToLayerButton : ESRI.ArcGIS.Desktop.AddIns.Button
{
public ZoomToLayerButton()
{
}
protected override void OnClick()
{
ArcMap.Application.CurrentTool = null;
}
protected override void OnUpdate()
{
Enabled = ArcMap.Application != null;
}
}
}
y aquí está el fragmento de la agarré de:
#region"Zoom to Active Layer in TOC"
// ArcGIS Snippet Title:
// Zoom to Active Layer in TOC
//
// Long Description:
// Zooms to the selected layer in the Table of Contents (TOC) associated with the active view.
//
// Add the following references to the project:
// ESRI.ArcGIS.ArcMapUI
// ESRI.ArcGIS.Carto
// ESRI.ArcGIS.Geometry
//
// Intended ArcGIS Products for this snippet:
// ArcGIS Desktop (ArcEditor, ArcInfo, ArcView)
//
// Applicable ArcGIS Product Versions:
// 9.2
// 9.3
// 9.3.1
// 10.0
//
// Required ArcGIS Extensions:
// (NONE)
//
// Notes:
// This snippet is intended to be inserted at the base level of a Class.
// It is not intended to be nested within an existing Method.
//
///<summary>Zooms to the selected layer in the TOC associated with the active view.</summary>
///
///<param name="mxDocument">An IMxDocument interface</param>
///
///<remarks></remarks>
public void ZoomToActiveLayerInTOC(ESRI.ArcGIS.ArcMapUI.IMxDocument mxDocument)
{
if (mxDocument == null)
{
return;
}
ESRI.ArcGIS.Carto.IActiveView activeView = mxDocument.ActiveView;
// Get the TOC
ESRI.ArcGIS.ArcMapUI.IContentsView IContentsView = mxDocument.CurrentContentsView;
// Get the selected layer
System.Object selectedItem = IContentsView.SelectedItem;
if (!(selectedItem is ESRI.ArcGIS.Carto.ILayer))
{
return;
}
ESRI.ArcGIS.Carto.ILayer layer = selectedItem as ESRI.ArcGIS.Carto.ILayer;
// Zoom to the extent of the layer and refresh the map
activeView.Extent = layer.AreaOfInterest;
activeView.Refresh();
}
#endregion
Con respecto a el paso 2.a)"a la Derecha-haga clic en Visual Studio ventana del editor de código en el punto de inserción deseado" donde debo insertar el fragmento de código? La lectura de los comentarios en el fragmento de código, supongo que debe ir después de la primer método:
public ZoomToLayerButton()
{
}
//here??
protected override void OnClick()
{
ArcMap.Application.CurrentTool = null;
}
También, los comentarios en el fragmento también dicen que debo:
// Add the following references to the project:
// ESRI.ArcGIS.ArcMapUI
// ESRI.ArcGIS.Carto
// ESRI.ArcGIS.Geometry
¿Dónde puedo agregar estos? En la parte superior de la ZoomTo LayerButton.cs archivo o mi Config.El diseñador.cs archivo? (Lo he probado ambos de estos lugares y me sale el mismo error: "Carto' no existe en el espacio de nombres de ESRI.ArcGIS)
Con respecto a el paso 3, "Invocar el ZoomToLayer método a OnClick() método de aplicación." Supongo que el código que se muestra más adelante, después de las instrucciones es lo que invoca el método:
protected override void OnClick()
{
ZoomToActiveLayerInTOC(ArcMap.Application.Document as IMxDocument);
}
Supongo que esto también significa que debo de borrar la línea que estaba ahí antes?
ArcMap.Application.CurrentTool = null;
Todavía no he ido al siguiente paso del tutorial - Instalar el custom botón de la herramienta y - ya que no tengo todo el código hasta el momento de construir. Yo sabía que estaba en una empinada curva de aprendizaje, con ArcObjects, y esta introducción ejemplo sin duda confirma esto! Esperamos que con estas aclaraciones, voy a tener mi primera ArcObjects código que se ejecuta lo suficientemente pronto.