Más

ArcObjects .NET - Cómo cerrar / liberar FeatureClass, Workspace, Factory

ArcObjects .NET - Cómo cerrar / liberar FeatureClass, Workspace, Factory


Tengo un proceso de larga duración. Quiero evitar fugas de recursos o conexiones de bases de datos no autorizadas.

A intervalos durante el proceso quiero hacer esto:

  1. obtener una fábrica de espacio de trabajo de ArcSDE (Oracle)
  2. abrir un espacio de trabajo de fábrica (momento en el que obtengo una conexión de base de datos abierta)
  3. obtener una tabla o clase de entidad existente en el espacio de trabajo,
  4. consultar la clase de entidad o tabla, recorrer el cursor haciendo mi negocio
  5. luego suelte / cierre todo de modo que:

    • La conexión de la base de datos y el bloqueo de la tabla desde la perspectiva de ArcSDE / Oracle (como lo revela algo como "sdemon -o info -I users" o una consulta de la tabla sde.table_locks) se cierra / libera.
    • el proceso es resistente a los reinicios de ArcSDE / Oracle (es decir, no voy a dejar algo colgado que no funcionará más tarde después del reinicio nocturno)
    • Se libera cualquier RCW, referencias COM y memoria.

Básicamente, debido a la naturaleza de larga duración del proceso, Quiero estar realmente seguro de que no tengo fugas de recursos o conexiones no autorizadas, y mi proceso puede sobrevivir a los reinicios de ArcSDE / Oracle..

He visto discusiones como:

Y esto, de lo que cito

Cada fábrica de espacios de trabajo mantiene un grupo de espacios de trabajo activos conectados actualmente a los que hace referencia la aplicación. Cuando se llama a cualquiera de los métodos Open * enumerados anteriormente, la fábrica de espacios de trabajo verifica si un espacio de trabajo se ha abierto previamente con un conjunto de propiedades coincidentes. Si es así, se devuelve una referencia a la instancia existente.

Todo lo cual me sugiere que yo debería release (por ejemplo, clase ComReleaser o bucle Marshal.ReleaseComObject () equivalente), probablemente en este orden:

  • cursor
  • featureclass / table
  • espacio de trabajo
  • fábrica de espacio de trabajo

Luego hay discusiones como esta en las que las personas hacen todo eso, y tal vez incluso agregan System.GC.Collect () y su conexión a la base de datos aún está viva.

Oh gurús, ¿cuál es la droga final directa sobre esto?


Ya has cubierto muchos aspectos en tu publicación. Sin embargo, para ampliar su pregunta, siga siempre este patrón:

if (obj! = null) ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject (obj); obj = nulo;

Luego llameSystem.GC.Collect ()para obligar al recolector de basura a eliminar cualquier referencia al DBMS.

El orden de publicación debe ser Cursores, Funciones (IFeature), FeatureClasses, Workspaces y otros ArcObjects instanciados.

ArcGIS Desktop y la aplicación ArcEngine son STA (aplicación de un solo subproceso). No es seguro ni recomendable utilizar ArcObjects en subprocesos (Trabajadores); Se puede utilizar la serialización y deserialización de objetos para lograr esto. Para más detalles, échale un vistazo aquí.


Recuperando la fábrica de clases COM para el componente con CLSID falló debido al siguiente error: 80040154

Desarrollé un servicio de Windows usando C # .NET para generar informes en PDF. Para generar un archivo PDF, estoy usando una dll de terceros. La aplicación se está ejecutando en mi plataforma Windows XP. Cuando implementé el servicio en la versión de 64 bits de Windows Server 2008, recibí este error:

La recuperación de la fábrica de clases COM para el componente con CLSID <46521B1F-0A5B-4871-A4C2-FD5C9276F4C6> falló debido al siguiente error: 80040154.

Registré la DLL usando el comando regsvr32. Puedo ver este CLSID en el registro. Pero el problema persiste.

¿Cual podría ser el problema?


ArcObjects .NET - Cómo cerrar / liberar FeatureClass, Workspace, Factory - Sistemas de información geográfica

ArcObject .Net con VS 2013

Por favor, tome este repositorio como una nota para guiarlo a través de la configuración, depuración y desarrollo de AO.

Lección 1: entorno de configuración y depuración

¡Bien, comencemos nuestro primer proyecto de AO en VS2013! En la barra de menú: ARCHIVO - & gt Nuevo proyecto, luego abra la estructura de árbol dentro del panel izquierdo en el cuadro de diálogo de apertura, busque Visual C # - & gt ArcGIS - & gt Complementos de escritorio - & gt Complemento ArcMap.

En el Asistente de complementos de ArGIS, asegúrese de marcar la opción "Botón" en Tipos de complementos. Esto creará una plantilla de un control de botón para ArcMap. Debería poder encontrar un archivo cs con el nombre "Button1.cs". Reemplace este archivo con el en aquí. Antes de construir el control de botón, abra Soultion Explorer de su VS 2013, haga clic con el botón derecho en el nombre del proyecto y elija propiedades. Verificación doble 2 lugares:

  1. El marco de destino en la sección Aplicación debe ser ".NET Framework 4"
  2. En la sección Depurar, asegúrese de que "Iniciar programa externo" esté configurado como su programa de ArcMap.

Aún en el Explorador de soluciones, haga clic con el botón derecho en las referencias y seleccione "Agregar referencias de ArcGIS". Necesitamos las siguientes dos referencias para construir esta solución. No están incluidos en esta plantilla predeterminada:

¡Ahora está listo para construir la solución! Antes de hacer eso, todavía hay algunas tareas de limpieza que tenemos que hacer al final de ArcMap. Vaya a la carpeta de instalación de ArcMap, normalmente se encuentra en: C: Archivos de programa (x86) ArcGIS Desktop10.3 bin, busque un archivo llamado "ArcMap.exe.config". Ábralo con privilegios de administrador. Es un archivo XML y busque en la siguiente sección ubicada en la parte superior del archivo:

De forma predeterminada, ArcMap está configurado para ejecutarse contra .Net Framework Runtime 2.0, lo cual es un conflicto con el control de botón que vamos a construir en VS 2013. Comente esa línea y descomente la línea anterior para habilitar .Net Framework Runtime 4.0 para ArcMap . Bien, ahora debería poder construirlo sin ningún problema. Para asegurarse de que estamos en la misma página para la siguiente sección, verifique su archivo "config.esriaddinx". Puede encontrar este archivo en el Explorador de soluciones. Esto es lo que tengo (eliminé secciones no relacionadas)

Nos da un buen resumen de la herramienta que acabamos de construir. Su nombre es "ArcMapAddin1" y su objetivo es contra ArcMap 10.3 que se ejecuta contra .Net Framework Common Lauguage Runtime 4.0. Este control de botón recibió el título "Mi botón" y se clasificó en "Controles de complemento". Tenga esto en cuenta, los necesitará más adelante.

Si hacemos clic en el botón "Inicio" con la flecha verde en VS2013, debería poder ver que ArcMap se está iniciando. VS2013 hará todo el trabajo sucio por nosotros: invocará ArcMap 10.3 y adjuntar el depurador a su proceso, cargará todos los símbolos necesarios de varios ensamblajes para facilitar la depuración. ¡Entonces estamos listos para depurar!

Puede poner un punto de interrupción en cualquier línea de fuente en Button1.cs, pero no pasa nada, ¿verdad? Esto se debe a que este control es un componente de la interfaz de usuario y requiere que el usuario haga clic en él para invocar cualquier acción. Entonces, ¿dónde está nuestro botón? ¡No está en la interfaz de usuario! Bueno, es realmente inconveniente y ESRI puede hacer un mejor trabajo agregando automáticamente el botón a la barra de herramientas durante la depuración.

De todos modos, tendremos que hacer esto sin problemas. Deberá ir a Personalizar - & gt Administrador de complementos, debería poder ver nuestro botón debajo de "Mis complementos", ¡gracias a ESRI! El nombre debe coincidir con el nombre en config.esriaddinx, el archivo XML al que les pido que presten atención.

Luego, haga clic en el botón "Personalizar", en la pestaña Barras de herramientas, puede crear una nueva barra de herramientas para contener nuestro trabajo. Creé uno llamado "Monkeybar", puedes nombrarlo como quieras, solo asegúrate de que no duplique los existentes en ArcMap. Cambie a la pestaña Comandos, el panel izquierdo enumera todas las categorías disponibles, ¿recuerda lo que le dije que recordara? ¡El nombre de la categoría es "Controles de complementos"! Si hace clic en él, en el lado derecho, debería poder ver "Mi botón" como comando.

¡Ahora puede arrastrar "Mi botón" a su nueva barra de herramientas! El siguiente paso será agregar algunas capas al mapa. La forma más rápida de hacerlo es agregando un mapa base que también traerá el sistema de coordenadas. Elegí ESRI World Topo. Tiene una proyección web tipo Mercator. Puedes encontrar mi archivo mxd aquí

Ahora, si hace clic en el botón (de forma predeterminada, tiene un icono redondo azul), debería poder ver cuatro puntos redondos rojos en las cuatro esquinas del mapa. Es posible que deba hacer zoom al máximo para verlos. Si coloca un punto de interrupción en la línea 59 de Button1.cs y hace clic en nuestro botón en ArcMap, la ejecución se suspenderá y podrá realizar la depuración paso a paso en la fuente Button1.cs dentro de VS2013.

Puede notar que la mayoría de las lógicas de Button1.cs están fuera de la función OnClick. ¿Qué sucede si desea depurar el código, por ejemplo, en la línea 33? Bueno, esa función se llama "el constructor predeterminado de la clase" y solo se invoca una vez cuando se hace clic en este botón la primera vez. Para depurar los códigos allí, tendremos que terminar la sesión de depuración actual haciendo clic en el botón cuadrado rojo en VS 2013, luego poner un nuevo punto de interrupción en la línea 33 y comenzar de nuevo.

Por cierto, ¿alguien puede decirme qué significa la línea 36? ¿Para qué sirve la sección del lado derecho del signo + =? Si no lo sabe, es hora de repasar C # antes de pasar a lecciones futuras.

Lección 2: Realice el trabajo pesado fuera de ArcMap

Cuando se lanzó Arcpy, una de las cosas interesantes es que los GIS pueden realizar el trabajo de procesamiento de datos sin tener que abrir ArcMap. AO te permite hacerlo desde el primer día, solo necesitas un poco más de esfuerzo de programación :)

En esta sesión, vamos a desarrollar una aplicación de línea de comandos de Windows que pueda ejecutarse sin ArcMap involucrado (Esto no es completamente cierto: si no tiene la licencia de ArcEngine, aún debe tener ArcMap instalado en el sistema para para obtener la licencia de acceso). De todos modos, cerremos los ojos y pretendemos que ArcMap está fuera del radar aquí.

Para hacer un caso divertido, decidí jugar con algunos datos reales de la base de datos de restauración de Great Lakes. A través de su interfaz de mapa, puede descargar todos los proyectos GLRD en formato csv. Tomaremos este volcado como datos de origen. Cada fila de este archivo contiene un registro de proyecto con lat / lon, que podemos convertirlo en una clase de entidad puntual. Si eres un GISer, probablemente hayas hecho esto cientos de veces, puedes preguntarte: ¿cuál es la parte divertida de eso? Muy bien, agreguemos algo de diversión: ¿y si solo quiero extraer el proyecto para el estado de Michigan? Bueno, si aún tiene problemas para encontrar el lugar para descargar este archivo csv, haga clic aquí.

Volvamos a VS2013. ARCHIVO - & gt Proyecto, en el panel izquierdo dentro de la ventana Nuevo proyecto: Instalado - & gt Plantillas - & gt Visual C # - & gt ArcGIS, si hace clic en "Extender ArcObjects", el panel central mostrará todas las plantillas disponibles, elija "Aplicación de consola ( Escritorio)". Debería ver "ArcGIS Project Wizard" apareciendo, en la primera página, mantendremos todo como predeterminado y haremos clic en "Siguiente". Luego, deberá elegir el tipo de licencia para sus productos ESRI para que el programa sepa qué componentes se pueden integrar en su programa. Elegí "Avanzado" y luego haga clic en Finalizar para cargar la plantilla.

Si abre el "Explorador de soluciones", debería ver dos archivos cs creados por ESRI. Reemplace "Program.cs" con esto. Nuevamente, antes de construir el programa, tendrá que agregar algunas referencias adicionales. ¿Recuerda el primer paso del "Asistente de proyectos de ArcGIS"? Te convencí de que lo omitieras, de hecho, podrías cargar referencias adicionales allí.

1.ESRI.ArcGIS.Version 2.ESRI.ArcGIS.Geodatabase 3.ESRI.ArcGIS.Geometry

Ahora, debería poder compilar el programa. Se supone que esta herramienta se ejecuta en la línea de comando con dos argumentos:

C: DesktopConsoleApplication1.exe glrd.csv michigan

El primer argumento es la ruta al archivo csv que acaba de descargar, el segundo es el nombre del estado. Si no alimenta estos dos argumentos, el programa terminará inmediatamente. Entonces, puede preguntar: ¿cómo podría configurar esto insdie VS2013? En el Explorador de soluciones, haga clic derecho en el proyecto, luego vaya a "propiedades", en Depurar, coloque los argumentos dentro de "Argumentos de la línea de comandos". Al hacerlo, cada vez que depure el programa, se le enviará el material que coloque allí.

Esta es una aplicación "independiente" y nos centraremos en el código. Hay dos tareas realizadas en el código:

  1. Analizar un archivo csv de Excel usando una consulta SQL
  2. Cree una geodatabase de archivos y rellénela con geometría de puntos y atributos

La primera tarea es necesaria si primero tenemos que filtrar el contenido. Para el caso que configuré, nos gustaría conocer solo los proyectos en un solo estado de los Grandes Lagos. Logramos esto en la Línea 33 usando OleDbCommand contra Excel. Microsoft ofrece un enfoque muy ordenado para manipular datos de Excel utilizando una declaración SQL. Se lo recomiendo mucho a su trabajo de programación.

Si encontramos un número positivo de proyectos para un estado, podemos seguir adelante para ponerlos dentro de una geodatabase. Preste atención al flujo de este proceso:

  1. Obtenga la fábrica que puede crear una geodatabase basada en archivos, consulte la línea 135.
  2. Cree una nueva clase de entidad en la línea 147.
  3. Repita los registros del proyecto, cree una nueva entidad y luego insértelos en la clase de entidad a través de FeatureBuffer y FeatureCursor, que se recomiendan para la inserción masiva. Vea la línea 156. Una vez que finalice el ciclo, descargue el cursor para volver a escribir todos los registros en el disco.

Durante la creación de la clase de entidad, deberá definir:

Este es un procedimiento bastante estándar. Me sorprende que ESRI no tenga un fragmento o una muestra de código para esto. Solo encuentro esto en la cuenta de github de ESRI. Tenga en cuenta que la muestra utiliza "esriDataSourcesFile.TextFileWorkspaceFactory", lo que liberó al programador de tratar con el archivo csv directamente. Sin embargo, la libertad siempre proviene de la comprensión del sistema. Con el enfoque que presenté, ahora tiene más flexibilidad para trabajar con archivos de Excel.

Antes de terminar, volvamos a la plantilla predeterminada que nos ofrece ESRI:

Estas son las rutinas para inicializar los componentes de ESRI, incluido el Licenese, y luego apagar todo al final. Su código que involucra cosas de ESRI debe escribirse en el medio.

Antes de despedirnos, ¿podría echar un vistazo a la firma de la función ParseCSV, qué significa List & ltdynamic & gt? Si lee el código con atención, ¿cuál es el tipo de material que incluimos en la Lista en la línea 38? Nuevamente, si no tiene idea, ¡su conocimiento de C # debe actualizarse!

OK, hemos terminado. ¡Hasta la próxima, que la fuerza te acompañe!

Lección 3: ArcObjects o ArcPy, ser o no ser

En primer lugar, no pretendo crear una guerra santa aquí. ¡Ambos son geniales! Solo quiero ilustrar la diferencia entre AO y AP en un caso particular. Con suerte, no importa si eres un partidario de AO o AP, esto podría ser útil para que elijas la herramienta adecuada para la tarea correcta.

Primero describamos la tarea: si está familiarizado con Graph como estructura de datos en el contexto de la informática, es posible que sepa que es una estructura fundamental para realizar cualquier tipo de operaciones, como rastreo de red, ruta más corta, flujo máximo, etc. Dado un conjunto de datos preprocesado NHD Plus para Great Lakes en formato de geodatabase de archivos, nos gustaría crear el gráfico en su forma de lista adjunta. Al examinar la geodatabase cuidadosamente, encontramos que hay dos clases de entidad que son particularmente útiles para esta tarea: NHD_Flowline e Hydro_Net_Junctions. Como sabrá, NHD Plus es un conjunto de datos que se procesó y construyó con una red de transmisión utilizando tecnología ESRI. Sin embargo, la geodatabase de ESRI es propietaria, por lo que no podemos aprovechar los datos existentes para construir nuestra lista de adyacencia (de hecho, exagero un poco aquí porque ESRI proporciona una biblioteca C ++ de código abierto para manipular la geodatabase basada en archivos).

Al usar estas dos clases de entidades, podríamos hacer nuestro trabajo usando ArcPy de una manera bastante sencilla. Aquí está el código. Puede notar que el script usó el archivo shp en lugar de la geodatabase. No mentí, tengo una versión que usa Geodatabase aquí. Si trabaja para mi empleador, debería poder verlo. Si configura este script en su escritorio con ArcMap 10.3 instalado y NHD Plus para Great Lakes listo (avíseme si necesita este 'NHDPlusV21_GL_04.gdb' usado en la prueba), es posible que le lleve hasta 6 12 horas para completar. Apuesto a que también notarías que el cuello de botella está aquí y aquí.

¿Podemos hacer alguna mejora allí? Desafortunadamente, realmente no hay mucho que podamos hacer ya que ESRI solo expuso funcionalidades limitadas a ArcPy, principalmente Geoprocesamiento usando lo que sea dentro de la caja de herramientas de ArcMap. En otras palabras, todos sus scripts de ArcPy hacen una cosa: una combinación de cualquier cantidad de herramientas que ESRI ofrece en ArcMap. Tiene capacidad de 64 bits, pero no es de mucha ayuda para este caso, que es más probable que esté vinculado a la CPU.

Vamos a lanzar la moneda y verifiquemos el otro lado: ArcObjects .Net, este malvado sucesor de ArcObject para Visual Basic proporciona una capa delgada sobre los COM de ArcObjects y se supone que puede acceder a todos los aspectos de las tecnologías de ESRI, bueno, si tiene compra de la licencia adecuada. Para tener un juego limpio, nos ceñiremos a la misma metodología que usa ArcPy. Creemos que podríamos tener un script de C # mejor ejecutado usando AO basado en el hecho de que AO ofrece una granularidad más fina que AP en términos de programación. Al romper esos dos cuellos de botella y profundizar en el interior de AO, podemos marcar la diferencia.

Lo primero es lo primero, primero expliquemos la parte aburrida: Aquí hay dos POCO para representar el nodo y sus sucesores:

El vértice como nodo se usa para rastrear el Id del nodo, el número de flujos entrantes y lo más importante: los nodos descendentes almacenados en una Lista. La clase DownstreamNode contiene el ID de nodo, el ID de la corriente entrante y lo más importante: los datos de velocidad en una lista (nuestro pensamiento original es usar esta velocidad para calcular el tiempo de viaje a lo largo de las corrientes).

En el script de C #, necesitamos abrir la geodatabase basada en archivos y obtener las referencias a las clases de entidad que nos gustaría examinar:

Dado que ahora tenemos clases de entidades en la mano, estamos listos para abordar las consultas espaciales, que generalmente se realizan en ArcPy con tres líneas de código:

La tercera línea "arcpy.SelectLayerByLocation_management" es la clave. Dado que tendremos que recorrer cada punto de unión contra la capa NHD_Flowline (un punto contra todas las polilíneas), sospechamos que "SelectLayerByLocation_management" puede ser ineficiente debido al diseño. "SelectLayerByLocation_management" probablemente esté programado de esta manera:

  1. Construir índice espacial en NHD_Flowline
  2. Busque en el índice utilizando el punto dado y encuentre todos los candidatos que residen en un subárbol de polilíneas
  3. Escaneo lineal de todos los candidatos contra un punto dado utilizando operadores geométricos para descartar falsos positivos
  4. Devolver conjunto de resultados

Es posible que el primer paso, el índice, se pueda reconstruir cada vez que invocamos "arcpy.SelectLayerByLocation_management", lo cual es un desperdicio. ¿Qué pasa si lo construimos una vez y usamos el mismo índice para todos los puntos? Me dijeron que la consulta espacial AO debe realizarse usando:

No estoy seguro de cómo se implementó, pero realmente se parece a "arcpy.SelectLayerByLocation_management". Entonces, decido ir por una ruta diferente: "IFeatureIndex" e "IIndexQuery2", lo que parece prometedor al brindarnos un control de escala más fino. Aquí está mi código:

Creamos una coclase FeatureIndex y le pedimos que cree el índice espacial contra la clase de entidad dada (parece que FeatureIndex en realidad crea un índice en el sistema de archivos, pensé que podría aprovechar el índice dentro de la geodatabase) y luego lo convertimos en IIndexQuery2, que tiene un método llamado: IntersectedFeatures. Si tenemos razón, esto realizará los pasos anteriores del 2 al 4.

Podemos unir códigos fácilmente como una aplicación de consola ESRI usando C #, bueno, si siguió mis tutoriales anteriores. Una cosa que vale la pena mencionar es calcular la longitud geodésica de una polilínea con coordenadas lon / lat. En ArcPy, nuevamente, solo necesita una línea de código:

Puede pensar que se supone que es así de simple. Bueno, mantenga su pensamiento, vea cómo se hizo esto en AO, dado que polyLine es una IPolyline:

Lo siento, no me preguntes cómo es que una instancia predeterminada de LinearUnitClass podría funcionar aquí. Ya es bastante complicado. Mantuve mi impluse para poner mi propio código Haversine allí porque confío en que ESRI tiene una mejor solución cerca del Polo Norte / Sur. ¡Tienes que creerlo! :) Una vez más, un gurú de AO me dijo que esta longitud geodésica en la polilínea debería hacerse en el nivel de los segmentos usando un método diferente. No investigué mucho: en realidad hice intencionalmente mi código C # un poco desordenado, incluso traté de usar Linq, pero Linq de C # es pálido en comparación con la comprensión de la lista de Python. Porque lo sé: C # en CLR contra COM en la plataforma Windows definitivamente va a ser más rápido que Python, sin mencionar que ArcPy está en la parte superior del contenedor de contenedores.

Si pudo compilar el código correctamente, no se apresure a ejecutarlo, haga una taza de café y tenga su libro favorito en las manos, ¡el último script de ArcPy tomó horas! Bueno, en mi computadora portátil, tuve tiempo para tomar una taza de café y leer algunas noticias en línea, sin embargo, sorprendentemente, ¡esta versión de AO se completó en 15 minutos! Mis matemáticas son malas, ¿alguien puede decirme cuántas veces esta es más rápida que la versión AP?

Una vez más, no pretendo demostrar que AO sea mejor que AP o convencerte de que cambies a AO. Me gustaría darles a todos la oportunidad de actualizar su base de conocimientos y pensar de manera innovadora. Es posible que pierda la noción de la sensación de rendimiento mientras disfruta de las pocas líneas de código de ArcPy. Me gusta ArcPy, realmente me gusta, pero en muchos escenarios, siento que estaba usando una camiseta de adolescente. Entonces, mi consejo es: si le importa el rendimiento o siente que ArcPy ha sido demasiado lento para usted, puede considerar usar ArcObject, que generalmente no lo decepcionará, al menos esta vez para nuestro caso de prueba. :)

Lo sé, lo sé, se supone que debemos discutir ArcObject, no ArcPy. Sin embargo, anteriormente, en "ArcObject .Net con VS 2013". (Está bien, no somos una serie de televisión :), me sorprendió el aumento de rendimiento al cambiar de ArcPy a ArcObject. Pensé que valdría la pena investigar un poco sobre ArcPy, su implementación y su capacidad. Si no planea aprender ArcPy, ignore este capítulo.

ArcPy se introdujo por primera vez en 2010 con la versión real de ArcGIS 10 (bueno, en realidad es solo 9.4, pero nombrarlo 10 lo hizo sonar más nuevo). De hecho, había "arcgisscripting" en ArcGIS 9.2, admitía no solo Python, sino también otros lenguajes de scripting, como VBScript, Perl, también. Sin embargo, poco después de que Microsoft detuviera el soporte en VB, VBScript, Jscript, ESRI tomó la decisión de eliminar todos los scripts excepto Python. Estaba destinado a proporcionar capacidad de creación de scripts solo en tareas de geoprocesamiento. La caja de herramientas de geoprocesamiento se presentó en ArcMap 9.2. Fue diseñado para simplificar ciertos trabajos de procesamiento de datos:

  1. Caja de herramientas de análisis
  2. Caja de herramientas de cartografía
  3. Caja de herramientas de conversión
  4. Caja de herramientas de gestión de datos
  5. Caja de herramientas de edición
  6. Caja de herramientas de codificación geográfica
  7. Caja de herramientas de referencia lineal
  8. Caja de herramientas multidimensional
  9. Caja de herramientas de estadísticas espaciales

En ArcPy, cada función de geoprocesamiento en ArcMap se define como una función dentro de los módulos de ArcPy. Puede generar el contexto de una clase de entidad puntual mediante las siguientes dos líneas de código:

La función "MinimumBoundingGeometry_management" es equivalente a la herramienta de "Mínimo Bounding Geometry", que se encuentra en ArcMap- & gt Toolbox - & gt Data Management. ArcPy simplemente automatiza esta herramienta permitiendo al usuario enviar parámetros de esta herramienta de manera programática. Después de una segunda mirada, puede notar que todas las funciones siguen la convención de nomenclatura de samae:

nombre de herramienta + '_' + alias de caja de herramientas

Si no está seguro del alias de una caja de herramientas en particular, haga clic derecho en la caja de herramientas y luego en la propiedad.

Según el blog de ESRI, este es el propósito de ArcPy:

"ArcPy es un paquete de sitio que se basa en (y es un sucesor) del exitoso módulo arcgisscripting. Su objetivo es crear la piedra angular de una forma útil y productiva de realizar análisis de datos geográficos, conversión de datos, gestión de datos y automatización de mapas. con Python ".

En la primera edición de ArcPy, además del geoprocesamiento, también proporciona otros dos módulos: Mapeo (arcpy.mapping), Análisis espacial (arcpy.sa) y Geostatistical Analyst (arcpy.ga). En 10.1, se introdujeron el acceso a datos (arcpy.da) y el tiempo (arcpy.time). También incluye algunas otras bibliotecas / utilidades.

Como todos sabemos, toda la personalización de la producción de ESRI se puede realizar a través de ArcObject y ArcObject se desarrolló sobre la base de Microsoft COM contra el sistema Windows. Por ejemplo, el medio para ejecutar herramientas de geoprocesamiento es a través de la coclase GPDispatch (definición de coclase). Solo permite al usuario enviar argumentos por cadena y consumir cualquier resultado que devuelva la interfaz. Por lo tanto, ESRI lo llama un "objeto de grano grueso", consulte aquí. ArcPy, sin embargo, implementa sus funcionalidades de geoprocesamiento sobre esta interfaz. Como indican algunos de los documentos de ESRI, ArcPy también es un modelo de grano más grueso.

"Arcpy.mapping se creó para el analista de SIG profesional (así como para los desarrolladores). Tradicionalmente, los escenarios enumerados anteriormente tenían que realizarse utilizando ArcObjects y, a menudo, resultó ser un entorno de programación muy difícil de aprender para el profesional de SIG medio. Arcpy.mapping es un modelo de objeto de grano fino, lo que significa que las funciones están diseñadas de manera que una sola función arcpy.mapping puede reemplazar muchas líneas de código ArcObjects ".

Por lo tanto, podría hacer algo increíble a través de ArcPy en solo un par de líneas de código:

Los códigos anteriores convertirán todas las características en el mxd, utilizando la configuración definida en el mxd, en un archivo pdf.

Es posible que desee preguntar: ¿deberíamos considerar ArcPy como un reemplazo de ArcObject? Aún así, según ESRI:

"Arcpy.mapping no es un reemplazo de ArcObjects sino más bien una alternativa para los diferentes escenarios que admite. ArcObjects sigue siendo necesario para el desarrollo más fino y la personalización de la aplicación, mientras que arcpy.mapping está diseñado para automatizar el contenido de los documentos de mapa existentes y la capa expediente."

Es posible que también desee saber: ¿si ArcPy puede llamar a ArcObject directamente? La respuesta es no. Pero, estoy seguro, ArcPy todavía se comunica de alguna manera con ArcObject de manera indirecta, implícita. Como siempre, "la curiosidad mató al gato". Voy a abrir un poco el capó de ArcPy y veré qué hay allí. En mi escritorio, ArcPy se instaló en:

C: Archivos de programa (x86) ArcGIS Desktop10.2 arcpy arcpy

Allí, encontrará una estructura clásica de paquete de módulos de Python. Hay una subcarpeta llamada "arcobjects", ¿estás convencido? Estoy seguro de que no. Entonces, abramos algunos archivos py. La clase "MapDocument" se define en _mapping.py. La declaración de la clase es como:

Si está familiarizado con C # o Java, podría considerar "mixins" como interfaz. No hay un constructor explícito definido en MapDocument, por lo tanto, de acuerdo con el orden de resolución de métodos de Python (MRO, profundidad primero antes de 2.3 y algoritmo C3 después, podría examinar el comportamiento de MRO por class.mro ()), los constructores de sus clases base será invocado:

Parece que MapDocumentMethods invoca su clase base en eso directamente si super () realmente devuelve su clase base. Sin embargo, dado que estamos tratando con herencia múltiple aquí, super (MapDocumentMethods, self).en eso(mxd) en realidad invoca al constructor de la segunda clase base de MapDocument: "_BaseArcObject". Si desea obtener más información sobre los comportamientos sofisticados de super, haga clic aquí. Echemos un vistazo a _BaseArcObject:

Tiene un constructor que puede tomar argumentos de entrada de longitud variable. También define una variable miembro estática, "_arc_object". La función "gp._gp.CreateObject" está realmente definida en el espacio de nombres "geoprocesamiento", ¿recuerdas que mencionamos que el geoprocesamiento es el primer módulo introducido para ArcPy? Para gp, es una instancia de la clase Geoprocesador:

Ahora, hemos llegado al origen: ArcPy se comunica con ArcObject a través de "arcgisscripting", que es el predecesor de ArcPy. No encontrará arcgisscripting dentro de la carpeta ArcPy, en realidad reside en "C: Archivos de programa (x86) ArcGIS Desktop10.2 bin", con el nombre de "arcgisscripting.pyd", que en realidad es una DLL.

Como discutimos en el capítulo anterior y en este capítulo, debido a la interoperabilidad con COM, debe esperar cierta pérdida de rendimiento si usa ArcPy no ArcObject. La cantidad de pérdida que pueda sufrir depende realmente de las tareas. Aquí hay un punto de referencia que encontré en Internet contra ArcGIS 9.3. @dbGLC me recordó que este gráfico fue tomado de una presentación que discutía la posibilidad de invocar AO COM directamente usando Python usando algunos paquetes COM de Python, como comtypes. El hilo de discusión original está aquí. Puede encontrar muchas ideas brillantes allí.

Nuevamente, este capítulo está destinado a ayudarlo a comprender qué hizo ArcPy. Tanto ArcObject como ArcPy son excelentes herramientas para diferentes escenarios. Si desea saber más sobre ArcPy, recomiendo los repositorios de ESRI en github aquí. Avíseme si puede encontrar alguna función de geoprocesamiento costosa llamada dentro de un bucle enorme. :)

Lección 5: Diagrama de modelo de objetos de ArcObjects (OMD)

Si eres un desarrollador de AO experimentado, no importa si prefieres VBA, VB, VB.Net, C #, Java o C ++ (ordenados por la popularidad :), debes tomar estos diagramas algunas veces para buscar un propósito al menos. Bueno, si eres un novato en AO, como yo, puedes sentir que fui exagerado. No te culparé porque yo también lo pensé. Sin embargo, una vez que comience a implementar una función a través de AO en serio, estos diagramas serán su arma definitiva, especialmente después de un par de búsquedas en Google que pierden tiempo. No es broma, siempre bromeaba con mis colegas: un desarrollador senior es alguien que puede resolver un acertijo técnico que los motores de búsqueda no responden. Desafortunadamente, ArcObjects entra en esta categoría más que otras tecnologías. Dos razones: 1. AO tiene un grupo de usuarios relativamente pequeño. 2. ESRI hizo un muy mal trabajo para mantener la documentación de la API del desarrollador. Pago $ 1,500 al año por la suscripción a EDN, pero todavía me siento impotente con más frecuencia de lo que esperaba.

La gente siempre aprende de sus propias lecciones (bueno, alguien cae al mismo río más de una vez). Después de un par de experiencias frustrantes con los documentos de Google y EDN, de repente recordé la época en que era joven: vi a esos gurús de AO de pie y rumiando frente a una enorme pizarra con un diagrama de un par de pies de largo clavado en ella. ¡Recordé que el diagrama que estaban mirando se llama Diagrama de modelo de objetos AO, también conocido como OMD (Oh My Darling)! Espera un minuto, ¿dónde están mis queridos? En mi escritorio, se encuentran en:

C: Archivos de programa (x86) ArcGIS DeveloperKit10.4 Diagrams

Hay 68 archivos PDF en esta carpeta, bueno, había muchos menos para la versión anterior de AO. Si eres un aficionado como yo, me gustaría recomendar leer primero GeoDatabaseObjectModel.pdf. Contiene la mayoría de las cosas que puede necesitar para iniciar la programación de AO. ¡Echemos un vistazo juntos!

En primer lugar, debe comprender que ESRI es un seguidor sincero de UML. Todos esos símbolos extraños que puede ver se derivan en realidad de diagramas de clases UML con alguna invención de ESRI. Aquí hay una buena referencia para el diagrama de clases UML. Si no desea dedicar 3 minutos a repasar esos conceptos y símbolos asociados, ESRI tiene un UML 101 en cada diagrama.

ESRI hizo su invento. ¿Qué son la interfaz de entrada y la interfaz de salida? Incluso después de tomar la clase de UML para un semaster completo, ¡no hay ni idea de qué diablos podrían ser! No se preocupe, ESRI ofrece una explicación en su serie "Learning ArcObjects" que está disponible en línea y fuera de línea para cada versión. Aquí está el capítulo: Lectura de OMD. Ahora puede saber que la interfaz de entrada es la interfaz que la clase especificada realmente implementa, la interfaz de salida es en realidad un registro de eventos, ESRI lo llama receptor de eventos. Es un truco de la vieja escuela para registrar su controlador de eventos. Si eres tan ingenuo como yo, simplemente puedes considerarlo como Evento en el contexto de .Net.

¿Recuerda que mencioné antes que esos gurús imprimieron ORM tan grandes como un mapa a pequeña escala usando un trazador? ¿Por qué? Si abre GeoDatabaseObjectModel.pdf, esto es lo que puede ver bien a menos que tenga un televisor LED extremadamente grande como pantalla:

Ahora, ya sabes por qué es necesario el plotter, ¿verdad :)

Si conoce la interfaz que le interesa, siempre es conveniente buscar directamente el OMD correspondiente. De lo contrario, sientes que estás jugando a las escondidas.

Bien, juguemos al juego de las escondidas. Aquí está el trato: me gustaría abrir una GeoDatabase basada en archivos y obtener la información sobre las clases de entidades que contiene. Si eres un programador, es posible que sepas que al abrir un archivo desde el disco usualmente usamos algunas funciones como "abrir", o "openfile", etc. Como somos POO, hay una clase en la que podemos aplicar esta función. Antes de que te sumerjas en el océano de mis queridos, agarro tus brazos y digo: espera un minuto, una cosa más que debo mencionar: tres reglas de supervivencia para jugar con Mis queridos (OMD):

I. Durante el seguimiento de la interfaz, cada vez que se llega a una interfaz que implementa IUnknown, se sabe que este es el final. ¿Se da cuenta de que utilizo la "interfaz" workd, no la clase? AO se basa en el estándar COM de Microsoft. Básicamente, dice que cada llamada a función debe realizarse en una instancia de algún tipo de interfaz. Por protocolo, cada interfaz definida bajo el dominio de COM debe implementar la interfaz IUnknown. No se preocupe por lo que hay en IUnknown, mantenerlo desconocido no es una mala idea. Todo lo que necesita saber es que es un callejón sin salida una vez que vemos una interfaz en OMD que implementa IUnknown directamente. Hemos alcanzado el nivel más alto de jerarquía OMD.

WorkspaceFactory es una clase que implementa IWorkspaceFactory, que es una interfaz entrante e implementa IUnknown. Esto nos dice que IWorkspaceFactory es una interfaz de nivel superior.

II. El acceso a las funciones definidas en una interfaz es siempre a través de instancias de cierto tipo de clase. Este tipo de clase es una clase Coclass o una clase "instanciable", que es un tipo de clase cuya instancia solo se puede recuperar a través de otras clases. Esto podría significar recuperar de fábrica, singleton o upcasting. Sigamos usando WorkspaceFactory como ejemplo.

En .Net, WorkspaceFactory en OMD se implementan como dos unidades: interfaz "WorkspaceFactory" y clase "WorkspaceFactoryClass", que implementa la interfaz "WorkspaceFactory" junto con otras interfaces que WorkspaeFactory debería hacer según OMD. "WorkspaceFactory" es una interfaz vacía que probablemente funciona como un marcador de posición. ¿Por qué? No sé. Si lo sabe, hágamelo saber :)

A partir de la descompilación, podemos decir que el constructor de WorkspaceFactoryClass tiene el modificador de acceso "interno", lo que significa que solo se puede acceder dentro del ensamblaje. "extern" significa que este constructor está implementado en otro lugar. El atributo MethodImpl asociado con el constructor se asigna con MethodImplOptions.InternalCall, que indica "la llamada es interna, es decir, llama a un método que está implementado dentro del Common Language Runtime". Todo esto asegura que no podamos crear una instancia de WorkspaceFactoryClass en nuestro código. Por lo tanto, WorkspaceFactoryClass califica para ser un clase "instanciable".

En OMD, la clase abstracta, la clase instanciable y la coclase se pueden identificar fácilmente por la forma del rectángulo. La clase abstracta es un rectángulo sombreado 2D, la clase instanciable es un rectángulo 3D sin sombra, la coclase es un rectángulo sombreado 3D.

III. Dado que estas clases suelen implementar varias interfaces. Es muy típico ver en el código AO, para acceder a un método declarado en la interfaz D, que está implícito en la clase C, primero debes obtener una instancia de la clase A, luego lanzarla a una interfaz B usando "as". Dado que la clase C implementa tanto la interfaz B como la interfaz D, ahora puede convertir lo que tenga a mano de B a D.

¡Ahora puedes bucear! La única pista que tenemos es que parece que se accede a todos los conjuntos de datos a través del patrón de diseño Abstract Factory. Como nos gustaría abrir un GDB basado en archivos, encuentro FileGDBWorkspaceFactory en DataSourcesGDBObjectModel.pdf

Tiene un rectángulo 3d sombreado, por lo que podríamos inicializar una instancia de FileGDBWorkspaceFactory directamente o crear tal cosa a través del reflector. Tiene una interfaz de entrada: IWorkspaceFactory y esta interfaz se describe en GeoDatabaseObjectModel.pdf. Vea la imagen anterior, tiene una función llamada "OpenFromFile ()", que es el método que esperamos. Este método devuelve una interfaz IWorkspace, consulte el diagrama a continuación:

Observe que implementa IFeatureWorkspace, ya que estamos buscando los medios para acceder a la información de la clase de entidad, esto parece interesante. De acuerdo, tiene dos métodos: OpenFeatureClass y OpenFeatureDataset, el primero es para acceder a una clase de entidad si el nombre de alias de la clase de entidad se conoce de antemano, el último, por otro lado, es para realizar un bucle de clases de entidad dentro de una clase de característica. dataset si se desconocen los nombres de las clases de entidad, pero se proporciona el nombre del dataset de la clase de entidad.

Al examinar la delcaración de FeatureDataset, la interfaz IFeatureClassContainer define la forma de acceder a IFeatureClass a través del índice, que son exactamente las funciones que esperamos recorrer a través de todas las clases de entidades dentro de un archivo GDB. A continuación se muestra el código para demostrar este proceso. Esta es una copia directa de mi proyecto que requiere el desarrollo de una empresa pública.

Bueno, espero que este ejemplo sea lo suficientemente simple como para darte una idea de cómo usar OMD. Para ser honesto, no estoy seguro de haber hecho un buen trabajo aquí. Entonces, si no lo hice, hágamelo saber. :)

Lección 6: Extensión de objetos de ArcGIS Server (SOE) y herramienta de geoprocesamiento ##

No tengo chacne para actualizar esta serie por un tiempo. Copié / pegué algunas notas que hice para nuestro proyecto aquí. Según mi experiencia personal, estos dos enfoques de desarrollo del lado del servidor son útiles, aunque SOE parece ser más popular y capaz, la herramienta de geoprocesamiento ofrece una posibilidad para los desarrolladores que migran desde Arcpy. Además, la herramienta de geoprocesamiento ya tiene un flujo de trabajo natural creado para manejar tareas de geoprocesamiento que podrían tardar mucho en completarse. Si me preguntas mi opinión, tengo que decir "¡Luke, usa la fuerza!".

### Extensión de objeto de servidor (SOE) ###

####Introducción Desarrollo de extensiones de objetos de servidor (SOE) es la forma estándar que ofrece ESRI para personalizar el comportamiento del servidor ArcGIS. Por supuesto, SOE también es un COM.

La mejor referencia para esta función, bueno, si tiene SDK instalado, está en el archivo de ayuda:

ArcObjects SDK for ArcGIS 10.4 - & gt Ayuda de ArcObjects para desarrolladores de .NET - & gt Desarrollando con ArcGIS - & gt Ampliación de ArcGIS for Server - & gt Desarrollando extensiones de objetos de servidor

El memorando aquí NO lo guiará para desarrollar una empresa pública. En su lugar, realizamos un seguimiento del procedimiento para depurar, compilar e implementar correctamente SOE en el escritorio y el servidor ArcGIS.

Bueno, no se sienta decepcionado si viene aquí y espera aprender a codificar SOE. Siguiendo el documento listado en el asistente de SDK, debería poder hacerlo. O, si necesita un atajo con una muestra completa, puede probar este github de ESRI.

#### Depuración Sin ArcGIS Server, la depuración de SOE debe realizarse a nivel de prueba de unidad. Si no desea separar la lógica de SOE del archivo de código de plantilla de SOE predeterminado, pruebe con un marco de simulación, como moq. Sin embargo, el desarrollador de ESRI no hizo que sus clases fueran "compatibles con la maqueta", por ejemplo, la clase ServerLogger se define como una clase sellada, lo que evita que la mayor parte del marco de la maqueta la herede y la reemplace por una maqueta.

Si tiene capacidad de depuración en ArcGIS Server, aquí hay algunos consejos:

  1. Asegúrese de abrir el proyecto SOE con la cuenta de administrador
  2. Cuando se adjunta a los procesos de ArcGIS Server, asegúrese de seleccionar todos los ArcSOC.exe con el tipo de (Administrado)

No pude depurar el código dentro de Init, Shutdown y Construct. SOE se ejecuta dentro del contenedor ArcSOC. Dado que estas 3 funciones se invocan durante la construcción y el cierre de la SOE, es difícil saber a qué proceso puedo adjuntarme.

#### Implementar la implementación de SOE sigue un procedimiento de dos pasos asumiendo que el tipo de SOE es MapServer y el servicio es REST.

  1. Si construye el proyecto SOE en VS, se creará un archivo "soe" como archivo. En ArcGIS Server Manager, vaya a Sitio - & gt Extensiones - & gt Agregar extensión, cargue este archivo "soe" y ArcGIS Server se encargará de todo por usted, como el registro COM.
  2. Prepara datos de mapas en ArcMap y publícalos como servicios de mapas con la opción de "staging", que significa "No subir, solo prepara los datos". Esto creará un archivo sd en "C: Users hellocomrade AppData Local ESRI Desktop10.4 Staging". En ArcGIS Server Manager, Services - & gt Publish Service, alimente al asistente con el archivo sd y en Capabilities, asegúrese de verificar la SOE que carga en el paso 1. Si todo va bien, el servicio de mapas se iniciará con su SOE.
  3. Vaya a "http: // localhost: 6080 / arcgis / rest / services /" y seleccione el servicio de mapas definido en el paso 2, desplácese hacia abajo hasta la parte inferior de la página, debería ver aparecer "Extensiones compatibles".

####Introducción Desarrollo de una función de geoprocesamiento personalizada ¿Es una característica "nueva" lanzada por ESRI a través de ArcPy? De hecho, volviendo a 9.3, esta función se proporcionó a ArcObject .Net. Sin embargo, la documentación estaba "oculta" en el libro y ESRI pareció tímido para presentar esta característica al desarrollador de AO. Ni siquiera puede encontrar una plantilla en la integración de Visual Studio para esta función a través de AO .Net SDK. Tendrás que trabajar todo desde cero

La mejor referencia para esta función, bueno, si tiene SDK instalado, está en el archivo de ayuda:

ArcObjects SDK para ArcGIS 10.4 - & gt Ayuda de ArcObjects para desarrolladores de .NET - & gt Desarrollando con ArcGIS - & gt Aprendiendo ArcObjects - & gt Ampliación de ArcObjects - & gt Herramientas de función de geoprocesamiento personalizadas

Espero que ahora entiendas por qué dije que ESRI era tímido en este caso. ¿Ves la estructura del árbol?

El memorando aquí NO lo guiará para crear dicha herramienta. En su lugar, realizamos un seguimiento del procedimiento para construir e implementar correctamente esta herramienta en ArcMap y en ArcGIS Server.

Bueno, no se sienta decepcionado si viene aquí y espera aprender a codificar una herramienta de este tipo. Siguiendo el documento listado en el asistente de SDK, debería poder hacerlo. O, si necesita un acceso directo con una muestra completa, que falta en el documento de ayuda del SDK, es posible que desee probar este github de ESRI.

Una nota al margen: cuando implementa IGPFunction2, IsLicensed simplemente puede devolver verdadero sin condición si está seguro de que esta herramienta no se distribuirá a terceros que pueden no saber el tipo de licencia, especialmente extensiones, que se requiere. ¿Por qué? Si planea usar esta herramienta en Desktop, Engine y Server, tendrá que verificarlos todos en un if. más si. de lo contrario, si lo olvidó y isLicensed devuelve falso, su herramienta no funcionará. ¿Por qué simplemente devolver verdadero desde isLicensed sin verificar y dejar que el software de alojamiento (nuestra herramienta es solo un dll) le diga al usuario si la herramienta se puede ejecutar lanzando una excepción durante el tiempo de ejecución? :) Aunque no es elegante.

#### Registro Dada una base de código fuente lista para la compilación como un COM administrado en VS 2013, lo primero que haría es hacer clic derecho en el nombre del proyecto - & gt properties - & gt Build, marcar "Registrarse para interoperabilidad COM". Esto hará que el tipo dentro del ensamblaje sea visible para el cliente COM a través de la utilidad: RegAsm.exe. Al tener esto marcado, el compilador de C # generará un archivo tlb y usará el archivo tlb para completar el registro. Este paso realmente hace NO suena como necesario para ArcGIS 10 series. ESRI decidió registrar tanto COM nativo como COM administrado sin usar el registro del sistema a través de su propia herramienta "ESRIRegAsm.exe". ¿Qué demonios? Incluso ESRI ya no confía en el registro del sistema MS, triste.

"Se debe proporcionar información adicional del producto en el registro mediante una utilidad de Esri llamada ESRIRegAsm.exe. ESRIRegAsm.exe reemplaza la utilidad estándar Microsoft RegAsm.exe."

Si tiene un proyecto de biblioteca de clases de ArcGIS creado a través de la plantilla de ArcGIS, el registro se realizará automáticamente como un evento posterior a la compilación. Es por eso que el complemento ArcMap siempre puede aparecer automáticamente en ArcMap. Sin embargo, esto no es cierto para nuestro caso, ya que estamos desarrollando una función GP que no es compatible tan bien con ESRI en términos de integración de VS.

Pero está bien. ESRI no es tan malo. Simplemente navegando por la carpeta de su dll compilado, haga clic derecho sobre él, en el menú contextual, vea "Registrarse". ¡Eso lo hará! ¿Es el mundo perfecto? ¡No! Cuando aparece ese cuadro de diálogo para el registro, puede ver el producto como "Escritorio" o "Motor" o ambos mostrados. Entonces tendrás que elegir uno para registrarte.

Pero el propósito de una herramienta GP es que puede funcionar como un servicio GP en el servidor ArcGIS. ¿Dónde está mi registro en el servidor de ArcGIS? ¡Resulta que hay dos ESRIRegAsm.exe! Uno para la línea de 32 bits de ESRI, el otro es para la línea de servidor de 64 bits.

32 bits: C: Archivos de programa (x86) Archivos comunes ArcGIS bin

64 bits: C: Archivos de programa Archivos comunes ArcGIS bin

Si desea registrar su herramienta para el servidor, use el segundo binario en la línea de comando. (Asegúrese de abrir cmd con privilegios de administrador La línea de comando coz no pedirá permiso de administrador de confirmación como pueden hacer otros programas, por lo que obtendrá un error "No se puede escribir en el disco"). Esto es lo que hice:

"C: Archivos de programa Archivos comunes ArcGIS bin esriregasm.exe" c: temp GPNetTrace.dll

Ignoré intencionalmente la opción / p:, por lo que el cuadro de diálogo emergente me pedirá que elija el producto con el que me gustaría registrarme. Una cosa que puede querer saber es: una vez que se realiza el registro y el producto está encendido, digamos ArcGIS Server, este dll en el lugar registrado, en nuestro caso está en C: Temp, será bloqueado por el proceso. No podrá actualizarlo. Entonces, haz NO registre dll en su carpeta bin u obj para un proyecto VS, el vinculador VS ya no podrá crear dll para usted.

Primero, debe agregar esta herramienta a ArcMap como una caja de herramientas. En ventana de catálogo. Creando una nueva caja de herramientas en "Mi caja de herramientas" y luego haga clic con el botón derecho en la caja de herramientas recién creada, Add- & gtTool, aparecerá una lista de todas las cajas de herramientas registradas, incluida la que acabamos de registrar. ¿Cómo encontrar nuestra herramienta? Bueno, depende de la propia herramienta.

La segunda función "GetFunctionNames" es un método definido en la interfaz "IGPFunctionFactory", esto es necesario para que el software ESRI pueda extraer el nombre de la herramienta de la implementación de esta interfaz. El nombre que aparece en la lista de la caja de herramientas como raíz será "name.Category", que es "NetworkNavigation", y el nombre de la herramienta adicional será name.DisplayName, que es "Network Trace", internamente, esta herramienta se rastrea por nombre .Name, que es "TraceNetwork". Ahora, debería poder encontrar y agregar la herramienta en ArcMap.

Muy bien, el juego previo está hecho. ¡Depuramos! Dado que nuestra herramienta fue compilada como un dll, tenemos que adjuntar el depurador a cualquier binario que realmente ejecute código en nuestra biblioteca. En VS, Debug- & gtAttach to Process. Para hacerlo, debe asegurarse de abrir VS con una cuenta de administrador.

Suponiendo que logras que el procesamiento en segundo plano de 64 bits funcione con tu código, esto significa que tienes

en su código. Si falla en Ejecutar, el rumor es que su dll no se registró correctamente con ESRIRegAsm.exe de 64 bits. No puedo hacer que esta parte funcione en mi escritorio, pero puede que tengas suerte. Si es así, deberá adjuntar el depurador con el proceso denominado "RuntimeLocalSerer.exe". En realidad, hay dos procesos con el mismo nombre. Uno se ejecuta para CLR administrado, el otro es para COM nativo. Creo que debería adjuntar con Managed one (marque la columna Tipo en la tabla "Procesos disponibles". Dicho esto, puede adjuntar con ambos presionando Ctrl en el teclado mientras hace clic en el nombre del proceso.

Digamos que el procesamiento en segundo plano de 64 bits no funciona bien con usted. Luego, tendrá que deshabilitarlo en ArcMap. Geoprocesamiento - & gt Opciones de geoprocesamiento - & gt Procesamiento en segundo plano - & gt Habilitar, desmarque la casilla "Habilitar" para deshabilitar el procesamiento en segundo plano. Ahora, simplemente puede adjuntar el depurador con el proceso de ArcMap.


Espacios de trabajo de múltiples raíces

Los espacios de trabajo de múltiples raíces son una capacidad avanzada de VS Code que le permite configurar varias carpetas distintas para que formen parte del espacio de trabajo. En lugar de abrir una carpeta como espacio de trabajo, abrirá un archivo JSON & ltname & gt.code-workspace que enumera las carpetas del espacio de trabajo. Por ejemplo:

Un espacio de trabajo de múltiples raíces abierto en VS Code

Nota: La diferencia visual de tener una carpeta abierta frente a abrir un archivo de espacio de trabajo .code puede ser sutil. Para darle una pista de que se ha abierto un archivo .code-workspace, algunas áreas de la interfaz de usuario (por ejemplo, la raíz del Explorador de archivos) muestran un extra (Espacio de trabajo) sufijo junto al nombre.

Espacios de trabajo multirraíz sin título

Es fácil agregar o eliminar carpetas en su espacio de trabajo. Puede comenzar abriendo una carpeta en VS Code y luego agregar más carpetas como mejor le parezca. A menos que ya haya abierto un archivo .code-workspace, la primera vez que agregue una segunda carpeta a un espacio de trabajo, VS Code creará automáticamente un espacio de trabajo & quot sin título & quot. En segundo plano, VS Code mantiene automáticamente un archivo de espacio de trabajo de código sin título que contiene todas las carpetas y la configuración del espacio de trabajo de su sesión actual. El espacio de trabajo permanecerá & quot sin título & quot hasta que decida guardarlo en el disco.

Un espacio de trabajo de múltiples raíces sin título abierto en VS Code

Nota: Realmente no hay diferencia entre un espacio de trabajo sin título y un espacio de trabajo guardado, salvo el hecho de que un espacio de trabajo sin título se crea automáticamente para usted para su conveniencia y siempre se restaurará hasta que lo guarde. Eliminamos automáticamente los espacios de trabajo sin título (después de pedirle confirmación) cuando cierra una ventana en la que se abre un espacio de trabajo sin título.


Receiver 4.12 para Windows

Nota: Citrix recomienda que descargue la última versión de la aplicación Citrix Workspace. La versión 1904 o posterior contiene correcciones de seguridad críticas. Para obtener más información, consulte el artículo CTX251986 de Knowledge Center.

Compatible con
Windows 10, 8.1, 7, 2008R2, Thin PC y Windows Server 2016, 2012 y 2012R2.

Sumas de comprobación ADB1AFF0625F6EE0C9745F6F8C523398CF3F4732EB3D2CA5966E97AE6D57536F

Corrección para habilitar la actualización automática del receptor

Acción necesaria para continuar con las actualizaciones automáticas en Receiver.
Recientemente se lanzó un nuevo certificado de seguridad para mejorar aún más la seguridad de Citrix Receiver. Sin embargo, este certificado deshabilita la función de actualización automática de Receiver. Es importante que usted descargue e instale la herramienta de actualización automática de Receiver lanzada recientemente para restaurar la funcionalidad de actualización de Receiver.

Revise la documentación del producto para obtener la lista completa de funciones.

Acceso de alto rendimiento a aplicaciones y escritorios virtuales de Windows, acceso desde cualquier lugar desde su escritorio, menú de inicio, interfaz de usuario de Receiver o acceso web con Chrome, Internet Explorer o Firefox.

Citrix Receiver se puede utilizar en PC, tabletas y clientes ligeros unidos a un dominio y no a un dominio. Proporciona un uso de alto rendimiento de Skype for Business virtualizado, línea de negocio y aplicaciones de ingeniería HDX 3D Pro, multimedia, acceso a aplicaciones locales.

Idiomas Disponibles
Inglés, francés, alemán, japonés, coreano, ruso, chino simplificado, español y chino tradicional.

Scripts para implementar Citrix Receiver para Windows

Este archivo ZIP contiene secuencias de comandos de muestra para implementar y configurar Citrix Receiver. Es una descarga opcional, que Citrix proporciona tal cual está como ejemplo. Antes de su uso, los administradores de TI deben personalizar los scripts para que se adapten a su entorno. Los scripts de desinstalación e instalación se pueden utilizar como se indica en la guía de actualización de Citrix Receiver para Windows (CTX135933).

Plantillas Citrix ADMX / ADML para el editor de políticas de grupo

Este archivo ZIP contiene archivos ADMX y ADML para implementar y configurar Citrix Receiver mediante el editor de objetos de política de grupo. Es una descarga opcional, para que la utilicen los administradores de TI y no para los usuarios finales. Las plantillas administrativas (archivos ADMX y ADML) se pueden utilizar como se indica en la guía de actualización de Citrix Receiver para Windows (CTX135933).


8 nuevas formas de empoderar a los Firstline Workers y transformar la forma en que trabajan con Microsoft 365

Las empresas a la vanguardia de la transformación digital reconocen lo fundamental que es habilitar a toda su gente con la tecnología y las herramientas adecuadas. Por eso, en industrias como el comercio minorista, la hostelería y la fabricación, se está llevando a cabo un movimiento para empoderar digitalmente a la fuerza laboral de primera línea, las más de 2 mil millones de personas en todo el mundo que trabajan en roles orientados a tareas o servicios.

Con Microsoft 365, la nube de productividad del mundo, estamos en una posición única para ayudar a las empresas de todos los tamaños y en todas las industrias a proporcionar a sus empleados las herramientas y la experiencia que necesitan para hacer su mejor trabajo, sin sacrificar la seguridad de su organización o clientes. ' datos. Brindar a los trabajadores de primera línea las herramientas que necesitan requiere que las empresas aborden la experiencia de usuario única, la seguridad y el cumplimiento, y la administración de TI.

Microsoft 365 para trabajadores de primera línea

Microsoft 365 combina las mejores aplicaciones de productividad intuitivas de su clase con servicios inteligentes en la nube para potenciar su fuerza laboral de primera línea.

Es inspirador ver cómo los líderes de la industria, como IKEA y Mattress Firm, están impulsando niveles más altos de compromiso de los empleados y mejorando la experiencia del cliente al poner herramientas como Microsoft Teams en manos de su fuerza laboral de primera línea. IKEA está conectando a todos en la organización con funciones familiares como chat y videollamadas y digitalizando procesos de primera línea como la gestión de turnos para ahorrar tiempo y costos.

Este video fue creado por Microsoft, con el acuerdo de Ingka Group.

Mattress Firm está capacitando a los trabajadores de primera línea con acceso en tiempo real a la información, los recursos y la experiencia que necesitan para deleitar a los clientes y brindar una mejor experiencia de compra.

Antes de la feria comercial de la Federación Nacional de Minoristas (NRF) de la próxima semana, nos complace presentar nuevas capacidades para los trabajadores de primera línea que llegarán a Microsoft 365. A continuación, se muestra un vistazo a lo que vendrá pronto:

Nuevas herramientas que facilitan a los Firstline Workers comunicarse y administrar tareas

  1. Walkie Talkie en equipos—Esta nueva experiencia de pulsar para hablar permite una comunicación de voz clara, instantánea y segura a través de la nube, convirtiendo los teléfonos inteligentes y tabletas propiedad de los empleados o de la empresa en un walkie-talkie. La funcionalidad, integrada de forma nativa en Teams, reduce la cantidad de dispositivos que los empleados deben llevar y reduce los costos de TI. A diferencia de los dispositivos analógicos con redes inseguras, los clientes ya no tienen que preocuparse por la interferencia o las escuchas de personas externas. Y dado que Walkie Talkie funciona a través de Wi-Fi o datos móviles, se puede usar en ubicaciones geográficas. La capacidad estará disponible en la aplicación móvil Teams y se integrará con el recién presentado Samsung Galaxy XCover Pro, un dispositivo creado para los trabajadores de primera línea de cualquier industria. Walkie Talkie estará disponible en versión preliminar privada en Teams durante la primera mitad de este año.

Experiencia intuitiva de pulsar para hablar para conectar a los miembros del equipo en todos los departamentos y ubicaciones.

  1. Tareas de segmentación, publicación y generación de informesCon Tareas en Teams, ahora los clientes pueden impulsar la ejecución consistente de las operaciones de la tienda a escala en todas las ubicaciones de una organización. El liderazgo corporativo y regional puede enviar listas de tareas dirigidas a las ubicaciones relevantes, como tiendas minoristas específicas, y realizar un seguimiento de su progreso a través de informes automáticos en tiempo real. Los gerentes tienen herramientas para dirigir fácilmente las actividades dentro de sus tiendas, y Firstline Workers tiene una lista de prioridades simple disponible a través de su dispositivo personal o de la compañía que les muestra exactamente qué hacer a continuación. Las tareas de segmentación, publicación y generación de informes llegarán a Teams en la primera mitad de este año.

La sede corporativa puede orientar, asignar y realizar un seguimiento de tareas en todas las ubicaciones. Los Firstline Workers pueden ver las tareas asignadas a ellos y en toda la tienda.

  1. Integraciones de gestión de la fuerza laboral—Los clientes que utilizan los principales sistemas de gestión de la fuerza laboral de terceros, como Kronos y JDA, para la programación y el tiempo y la asistencia, ahora pueden comenzar a integrarse directamente con Shifts a través de las API y SDK de Shifts Graph. Los escenarios admitidos incluyen administración de turnos, horarios, grupos de horarios, solicitudes de intercambio, solicitudes de tiempo libre y solicitudes de turnos abiertos. El conector JDA para Shifts es de código abierto y está disponible en GitHub. El conector de Kronos para Shifts también estará disponible en GitHub a finales de este trimestre.

Funciones mejoradas de administración de identidades y accesos que facilitan a los profesionales de TI mantener productivos y seguros a los Firstline Workers

  1. Inicio de sesión por SMS—Con el inicio de sesión por SMS, los Firstline Workers pueden iniciar sesión en su cuenta de Azure Active Directory (Azure AD) mediante códigos SMS únicos, lo que reduce la necesidad de recordar nombres de usuario y contraseñas para todas sus aplicaciones personalizadas y de Microsoft 365. Una vez inscrito, se le solicita al usuario que ingrese su número de teléfono, lo que genera un mensaje de texto con una contraseña de un solo uso. El inicio de sesión por SMS es una experiencia de inicio de sesión único (SSO) que permite a los trabajadores de Firstline acceder sin problemas a todas las aplicaciones para las que están autorizados. Este nuevo método de inicio de sesión puede habilitarse para grupos seleccionados y configurarse a nivel de usuario en el portal Mi personal, lo que ayuda a reducir la carga de TI.

Códigos SMS de un solo uso en dispositivos móviles para optimizar la experiencia de inicio de sesión para Firstline Workers.

  1. Cierre de sesión de dispositivo compartido—Muchos trabajadores de primera línea utilizan una sola tableta o dispositivo móvil que se comparte entre turnos. Esto puede plantear desafíos de seguridad únicos para la organización cuando diferentes empleados que tienen acceso a diferentes tipos de datos utilizan el mismo dispositivo en el transcurso de un día. Con el cierre de sesión de dispositivo compartido, Firstline Workers podrá cerrar sesión en todas sus aplicaciones personalizadas y de Microsoft 365 y sesiones de navegador con un clic al final de su turno, lo que evitará que se pueda acceder a sus datos, así como a cualquier acceso a los datos del cliente. al siguiente usuario de ese dispositivo.

Con un clic, Firstline Workers puede cerrar sesión en un dispositivo Android compartido y cerrar sesión en todas las aplicaciones y sesiones del navegador para evitar que los datos confidenciales se compartan con otro usuario del dispositivo.

  1. Controles de acceso fuera de turno para la aplicación Teams—Los administradores de TI ahora pueden configurar Teams para limitar el acceso de los empleados a la aplicación en su dispositivo personal fuera del horario laboral. Esta característica ayuda a garantizar que los empleados no estén trabajando involuntariamente mientras no están en turno y ayuda a los empleadores a cumplir con las regulaciones laborales. Esta función comenzará a implementarse para los clientes este trimestre.

Muestre un mensaje y / o deshabilite el acceso a la aplicación Teams cuando los trabajadores de primera línea estén fuera de turno.

  1. Gestión de usuarios delegada—Los gerentes de primera línea pueden aprobar el restablecimiento de contraseñas y permitir que los empleados utilicen sus números de teléfono para iniciar sesión por SMS, todo a través de un único portal personalizable habilitado por TI para gerentes de primera línea. La administración de usuarios delegada puede dar a los gerentes de primera línea acceso al portal My Staff, para que puedan desbloquear los problemas del personal, lo que reduce la carga de la administración de identidades en TI y mantiene a los empleados conectados a las aplicaciones que necesitan en el trabajo.

A través del portal My Staff, la administración de usuarios delegada permite a un Firstline Manager administrar las credenciales de su equipo y ayudar con el restablecimiento de contraseñas.

  1. Aprovisionamiento entrante de SAP SuccessFactors a Azure AD—El servicio de aprovisionamiento de usuarios de Azure AD ahora se integra con SAP SuccessFactors, lo que hace que sea más fácil que nunca incorporar y administrar las identidades de Firstline Workers a escala, en cualquier aplicación que utilice Azure AD. Esta característica, en versión preliminar pública, se basa en la capacidad de aprovisionar usuarios a Azure AD desde Workday, otro sistema popular de administración de capital humano (HCM), que ya está disponible de manera general. La integración con estos sistemas de registro ayuda a TI a escalar la incorporación y la productividad de Firstline Workers & # 8217 desde el primer día.

Con el servicio de aprovisionamiento de usuarios de Azure AD ahora integrado con SAP SuccessFactors, así como con Workday, es más fácil que nunca incorporar las identidades de usuario de Firstline Workers a escala. Como se muestra aquí, puede iniciar el ciclo de aprovisionamiento y usar la barra de progreso y los registros de aprovisionamiento para realizar un seguimiento del proceso de aprovisionamiento.

Se espera que todas estas capacidades se implementen en la primera mitad de este año, excepto donde se indique.

Empoderar a los trabajadores de primera línea para que obtengan una ventaja competitiva

Una nueva investigación en asociación con Harvard Business Review Analytic Services destaca el potencial sin explotar de Firstline Workers en el comercio minorista.

Mirando hacia el futuro

Este es solo el siguiente paso en nuestro viaje para empoderar a todas las personas y organizaciones del planeta para que logren más. Nuestro objetivo es crear herramientas y experiencias para el lugar de trabajo moderno y para los trabajadores en todos los niveles de la organización. Continuaremos desarrollando y llevando al mercado capacidades y experiencias de Firstline Worker especialmente diseñadas en asociación con nuestros clientes y líderes de la industria. Y continuaremos innovando y creando funciones que simplifican el trabajo, unen a las personas y ayudan a las organizaciones, grandes y pequeñas, a lograr más. Ven a vernos la próxima semana en NRF 2020 en el stand # 4501.


ArcObjects .NET - Cómo cerrar / liberar FeatureClass, Workspace, Factory - Sistemas de información geográfica

  • Alemán
  • inglés
  • Español
  • Français
  • Italiano
  • 日本語
  • 한국어
  • Português
  • Русский
  • 简体 中文
  • checo
  • polaco

Innovación y gestión colaborativa y sincronizada de programas para nuevos programas

Integración de tecnologías de sistemas mecánicos, de software y electrónicos para sistemas de vehículos.

Productos de consumo y venta minorista de amplificadores

Innovación de productos a través de la gestión eficaz de formulaciones, envases y procesos de fabricación integrados

El desarrollo de nuevos productos aprovecha los datos para mejorar la calidad y la rentabilidad y reducir el tiempo de comercialización y los costos.

Colaboración en la cadena de suministro en diseño, construcción, mantenimiento y retiro de activos de misión crítica

Maquinaria industrial y equipo pesado

Integración de la planificación del proceso de fabricación con el diseño y la ingeniería para la complejidad de la máquina actual

Visibilidad, cumplimiento y responsabilidad para las industrias financieras y de seguros

Innovación en la construcción naval para reducir de manera sostenible el costo del desarrollo de flotas futuras

Siemens PLM Software, líder en software de medios y telecomunicaciones, ofrece soluciones digitales para tecnología de vanguardia que respalda productos complejos en un mercado que cambia rápidamente.

Dispositivos médicos y productos farmacéuticos amp

“Innovación de productos personalizada” a través de la digitalización para satisfacer las demandas del mercado y reducir costos

Tiempo de comercialización más rápido, menos errores para el desarrollo de software

Elimine las barreras y crezca mientras mantiene sus resultados finales. Estamos democratizando los gemelos digitales más sólidos para sus pequeñas y medianas empresas.


484 pensamientos sobre & ldquoWorkspace Environment Management (WEM) 2106 & rdquo

Tengo un problema con la limpieza de perfiles wem. Parece que los perfiles tienen rutas demasiado largas y la herramienta de limpieza falla con & # 8220error al escanear perfiles & # 8221. Si escaneo un solo perfil y elimino los archivos con las rutas más largas, todo funciona bien. ¿Hay una solución para esto? Estamos ejecutando 1912 ltsr cu2.

Sakari, voy a intervenir aquí porque me he encontrado con esto mucho. Google Chrome es conocido por estos árboles de subcarpetas realmente profundos por sus datos (con largas cadenas de caracteres aleatorios para un solo nombre de carpeta). Creo que la fuente del problema es el mapeo de unidades y el contexto de la aplicación. Si el perfil del usuario & # 8217s está en una unidad de red como y :, asignado a servername something UPM_Profiles cuando una aplicación diferente (como WEM) está intentando acceder a esas carpetas directamente por la ruta UNC, la longitud se amplía en 40 o más caracteres. No estoy seguro de cómo resolverlo, pero pensé que sería útil saber cómo se crearon estos caminos (que son demasiado largos para existir).

Actualizamos a WEM 2012 y la siguiente carpeta
& # 8220C: Archivos de programa (x86) Norskale Norskale Infrastructure Services DBSync & # 8221 ya no existe & # 8217t. ¿Tiene alguna idea de si este es un comportamiento normal?

Supongo que eliminaron esta carpeta cuando eliminaron la tecnología anterior de sincronización de caché del agente.

Hola Carl, ¿has visto problemas en los que deshabilitas la pantalla de bienvenida de WEM pero no funciona, todavía muestra la pantalla de bienvenida al iniciar sesión?


Parámetros requeridos

Instalaciones

Utilice este parámetro para especificar una o más ubicaciones que sirven como instalaciones. Este servicio identifica la mejor instalación o instalaciones para atender los puntos de demanda.

  • url: especifique una solicitud de consulta REST para cualquier característica, mapa o servicio de geoprocesamiento de ArcGIS Server que devuelva un conjunto de características JSON. Esta propiedad es opcional. Sin embargo, se deben especificar las características o la URL.
  • características: especifique una serie de características. Esta propiedad es opcional. Sin embargo, se deben especificar las características o la propiedad URL.

    geometría: especifique la geometría del punto de entrada que contiene las propiedades xey junto con una propiedad SpacialReference. Si la propiedad SpatialReference está definida para todo el JSON, no es necesario definir esta propiedad para cada geometría. Hacerlo reduce el tamaño del JSON de entrada si la entrada tiene muchas características y mejora el rendimiento. Esta propiedad no es necesaria si las coordenadas están en la misma referencia espacial que su dataset de red. Si las coordenadas están en una referencia espacial diferente, debe especificar el ID conocido de la referencia espacial (WKID). Consulte el sistema de coordenadas geográficas y el sistema de coordenadas proyectadas para buscar valores de WKID.

Como práctica recomendada, se recomienda especificar explícitamente la referencia espacial y especificarla para todo el JSON en lugar de para cada geometría individual.

Atributos de las instalaciones

Al definir las instalaciones, puede establecer propiedades para cada una, como su nombre o tipo, utilizando los siguientes atributos:

El nombre del facilidad. El nombre se incluye en el nombre de las líneas de asignación de salida si la instalación es parte de la solución.

  • 0 (candidato): una instalación que puede ser parte de la solución.
  • 1 (obligatorio): una instalación que debe ser parte de la solución.
  • 2 (Competidor): una instalación rival que potencialmente elimina la demanda de sus instalaciones. Las instalaciones de la competencia son específicas para maximizar la participación de mercado y los tipos de problemas de participación de mercado objetivo; se ignoran en otros tipos de problemas.

La ponderación relativa de la instalación, que se utiliza para calificar el atractivo, la conveniencia o el sesgo de una instalación en comparación con otra.

Por ejemplo, un valor de 2.0 puede capturar la preferencia de los clientes que prefieren, en una proporción de 2 a 1, comprar en una instalación sobre otra. Los factores que potencialmente afectan el peso de la instalación incluyen los pies cuadrados, el vecindario y la antigüedad del edificio. Los valores de ponderación distintos de uno solo se respetan en los tipos de problemas de participación de mercado máxima y participación de mercado objetivo; se ignoran en otros tipos de problemas.

El valor de impedancia en el que dejar de buscar puntos de demanda de una instalación determinada. El punto de demanda no se puede asignar a una instalación que supere el valor indicado aquí.

Este atributo le permite especificar un valor de corte diferente para cada punto de demanda. Por ejemplo, puede encontrar que las personas en áreas rurales están dispuestas a viajar hasta 10 millas para llegar a una instalación, mientras que los habitantes de las zonas urbanas solo están dispuestos a viajar hasta 2 millas. Puede modelar este comportamiento estableciendo el valor de corte para todos los puntos de demanda que se encuentran en áreas rurales en 10 y estableciendo el valor de corte de los puntos de demanda en áreas urbanas en 2.

El campo Capacidad es específico para el tipo de problema de máxima cobertura capacitada; los otros tipos de problemas ignoran este campo.

La capacidad especifica cuánta demanda ponderada es capaz de abastecer la instalación. El exceso de demanda no se asignará a una instalación incluso si esa demanda se encuentra dentro del límite de medición predeterminado de la instalación.

Cualquier valor asignado al campo Capacidad anula el parámetro Capacidad predeterminada (Default_Capacity en Python) para la instalación dada.

Especifique la dirección a la que un vehículo puede llegar y salir de la instalación.

Uno de los números enteros enumerados en la columna Valor codificado de la siguiente tabla debe especificarse como valor de este atributo. Los valores de la columna Configuración son los nombres descriptivos de los valores de atributo CurbApproach que puede haber visto al utilizar el software de extensión ArcGIS Network Analyst.

El vehículo puede acercarse y salir de la instalación en cualquier dirección, por lo que se permite un cambio de sentido en la instalación. Esta configuración se puede elegir si es posible y deseable que su vehículo gire en la instalación. Esta decisión puede depender del ancho de la carretera y la cantidad de tráfico o si la instalación tiene un estacionamiento donde los vehículos pueden entrar y dar la vuelta.

Todas las combinaciones de llegada y salida están permitidas con el enfoque de cualquier lado de la acera del vehículo.

Cuando el vehículo se acerca y sale de la instalación, la instalación debe estar en el lado derecho del vehículo. Se prohíbe un cambio de sentido. Por lo general, se usa para vehículos como los autobuses que deben llegar con la parada del autobús en el lado derecho.

Se muestra la combinación permitida de llegada y salida para el acceso a la acera del lado derecho del vehículo.

Cuando el vehículo se acerca y sale de la instalación, la instalación debe estar en el lado izquierdo del vehículo. Se prohíbe un cambio de sentido. Por lo general, se usa para vehículos como los autobuses que deben llegar con la parada del autobús en el lado izquierdo.

Se muestra la combinación permitida de llegada y salida para el lado izquierdo del acceso a la acera del vehículo.

Cuando el vehículo se acerca a la instalación, la instalación puede estar a ambos lados del vehículo; sin embargo, cuando sale, el vehículo debe continuar en la misma dirección en la que llegó. Se prohíbe un cambio de sentido.

Se muestran las combinaciones de llegada y salida permitidas para la aproximación a la acera sin giro en U.

El atributo CurbApproach está diseñado para funcionar con ambos tipos de normas de conducción nacionales: circulación por la derecha (Estados Unidos) y circulación por la izquierda (Reino Unido). Primero, considere un incidente en el lado izquierdo de un vehículo. Siempre está en el lado izquierdo, independientemente de si el vehículo circula por la mitad izquierda o derecha de la carretera. Lo que puede cambiar con los estándares de conducción nacionales es su decisión de abordar un incidente desde una de dos direcciones, es decir, para que termine en el lado derecho o izquierdo del vehículo. Por ejemplo, si desea llegar a un incidente y no tener un carril de tráfico entre el vehículo y el incidente, elija 1 (Lado derecho del vehículo) en los Estados Unidos y 2 (Lado izquierdo del vehículo) en el Reino Unido.

Con el tráfico por la derecha, el acceso a la acera que deja el vehículo más cercano a la instalación es el lado derecho del vehículo. Con el tráfico por la izquierda, el acceso a la acera que deja el vehículo más cercano a la instalación es el lado izquierdo del vehículo.

La dirección en la que se mueve un punto. Las unidades son grados y se miden en el sentido de las agujas del reloj desde el norte verdadero. Este campo se utiliza junto con el campo BearingTol.

Los datos de rumbo generalmente se envían automáticamente desde un dispositivo móvil equipado con un receptor GPS. Intente incluir datos de rumbo si está cargando una ubicación de entrada que se está moviendo, como un peatón o un vehículo.

El uso de este campo tiende a evitar agregar ubicaciones a los bordes incorrectos, lo que puede ocurrir cuando un vehículo está cerca de una intersección o un paso elevado, por ejemplo. El rumbo también ayuda a la herramienta a determinar en qué lado de la calle se encuentra el punto.

El valor de tolerancia de rumbo crea un rango de valores de rumbo aceptables al ubicar puntos en movimiento en un borde usando el campo Rumbo. Si el valor del campo Rumbo está dentro del rango de valores aceptables que se generan a partir de la tolerancia de rumbo en un borde, el punto se puede agregar como una ubicación de red allí; de lo contrario, se evalúa el punto más cercano en el borde más cercano.

Las unidades están en grados y el valor predeterminado es 30. Los valores deben ser mayores que 0 y menores que 180. Un valor de 30 significa que cuando Network Analyst intenta agregar una ubicación de red en un borde, un rango de valores de rumbo aceptables es generado 15 grados a cada lado del borde (izquierdo y derecho) y en ambas direcciones digitalizadas del borde.

Este campo solo se usa en el proceso de resolución si los campos Bearing y BearingTol también tienen valores, sin embargo, ingresar un valor de campo NavLatency es opcional, incluso cuando los valores están presentes en Bearing y BearingTol. NavLatency indica cuánto costo se espera que transcurra desde el momento en que la información GPS se envía desde un vehículo en movimiento a un servidor y el momento en que el dispositivo de navegación del vehículo recibe la ruta procesada.

Las unidades de NavLatency son las mismas que las unidades del atributo de impedancia.

Ejemplos de sintaxis para instalaciones

Sintaxis para especificar instalaciones usando una estructura JSON para características

Sintaxis para especificar instalaciones utilizando una URL que devuelve una respuesta JSON

Ejemplos de instalaciones

Ejemplo 1: especificar instalaciones en la misma referencia espacial que su conjunto de datos de red mediante una estructura JSON. El ejemplo también muestra cómo especificar algunos atributos para los incidentes.

Ejemplo 2: especificar instalaciones en la referencia espacial de Web Mercator mediante una estructura JSON

Ejemplo 3: especificar instalaciones mediante una URL

La URL realiza una consulta de algunas características de un servicio de mapas. También se puede especificar una URL que consulta las características de un servicio de características.

Puntos_de_demanda

Utilice este parámetro para especificar uno o más puntos de demanda. El servicio identifica las mejores instalaciones basándose en gran parte en cómo las instalaciones sirven a los puntos de demanda especificados.

  • url: especifique una solicitud de consulta REST para cualquier característica, mapa o servicio de geoprocesamiento de ArcGIS Server que devuelva un conjunto de características JSON. Esta propiedad es opcional. Sin embargo, se deben especificar las características o la URL.
  • características: especifique una serie de características. Esta propiedad es opcional. Sin embargo, se deben especificar las características o la propiedad URL.

    geometría: especifique la geometría del punto de entrada que contiene las propiedades xey junto con una propiedad SpacialReference. Si la propiedad SpatialReference está definida para todo el JSON, no es necesario definir esta propiedad para cada geometría. Hacerlo reduce el tamaño del JSON de entrada si la entrada tiene muchas características y mejora el rendimiento. Esta propiedad no es necesaria si las coordenadas están en la misma referencia espacial que su dataset de red. Si las coordenadas están en una referencia espacial diferente, debe especificar el ID conocido de la referencia espacial (WKID). Consulte el sistema de coordenadas geográficas y el sistema de coordenadas proyectadas para buscar valores de WKID.

Como práctica recomendada, se recomienda especificar explícitamente la referencia espacial y especificarla para todo el JSON en lugar de para cada geometría individual.

Atributos para demand_points

Al especificar los puntos de demanda, puede establecer propiedades para cada uno, como su nombre o peso, utilizando los siguientes atributos:

El nombre del punto de demanda. El nombre se incluye en el nombre de la línea o líneas de asignación de salida si el punto de demanda es parte de la solución.

El nombre del grupo al que pertenece el punto de demanda. Este campo se ignora para los tipos de problemas Maximizar cobertura capacitada, Cuota de mercado objetivo y Maximizar cuota de mercado.

Si los puntos de demanda comparten un nombre de grupo, el solucionador asigna a todos los miembros del grupo a la misma instalación. (Si las restricciones, como una distancia de corte, impiden que cualquiera de los puntos de demanda del grupo llegue a la misma instalación, no se asigna ninguno de los puntos de demanda).

La ponderación relativa del punto de demanda. Un valor de 2.0 significa que el punto de demanda es dos veces más importante que uno con un peso de 1.0. Si los puntos de demanda representan hogares, por ejemplo, el peso puede indicar el número de personas en cada hogar.

El valor de impedancia en el que dejar de buscar puntos de demanda de una instalación determinada. El punto de demanda no se puede asignar a una instalación que supere el valor indicado aquí.

Este atributo le permite especificar un valor de corte para cada punto de demanda. Por ejemplo, puede encontrar que las personas en áreas rurales están dispuestas a viajar hasta 10 millas para llegar a una instalación, mientras que aquellas en áreas urbanas solo están dispuestas a viajar hasta 2 millas. Puede modelar este comportamiento estableciendo el valor de corte para todos los puntos de demanda que se encuentran en áreas rurales en 10 y estableciendo el valor de corte de los puntos de demanda en áreas urbanas en 2.

Las unidades para este valor de atributo se especifican mediante el parámetro unit_units.

Un valor para este atributo anula el conjunto predeterminado para el análisis mediante el parámetro default_measurement_cutoff.El valor predeterminado es Nulo, lo que da como resultado que el valor predeterminado establecido por el parámetro default_measurement_cutoff se utilice para todos los puntos de demanda.

Anule el valor predeterminado establecido para el análisis por el parámetro modelo_de_transformación_medición.

Anule el valor predeterminado establecido para el análisis por el parámetro modelo_de_transformación_medición.

Especifique la dirección a la que un vehículo puede llegar o salir del punto de demanda. Uno de los números enteros enumerados en la columna Valor codificado de la siguiente tabla debe especificarse como valor de este atributo. Los valores de la columna Configuración son los nombres descriptivos de los valores de atributo CurbApproach que puede haber visto al utilizar el software de extensión ArcGIS Network Analyst.

El vehículo puede acercarse y salir del punto de demanda en cualquier dirección.

Todas las combinaciones de llegada y salida están permitidas con el enfoque de cualquier lado de la acera del vehículo.

Cuando el vehículo se acerca o sale del punto de demanda, el punto de demanda debe estar en el lado derecho del vehículo. Por lo general, se usa para vehículos como los autobuses que deben llegar con la parada del autobús en el lado derecho.

Se muestra la combinación permitida de llegada y salida para el acceso a la acera del lado derecho del vehículo.

Cuando el vehículo se acerca o sale del punto de demanda, el punto de demanda debe estar en el lado izquierdo del vehículo. Por lo general, se usa para vehículos como los autobuses que deben llegar con la parada del autobús en el lado izquierdo.

Se muestra la combinación permitida de llegada y salida para el lado izquierdo del acceso a la acera del vehículo.

Cuando el vehículo se acerca al punto de demanda, el punto de demanda puede estar a cualquier lado del vehículo, sin embargo, cuando sale, el vehículo debe continuar en la misma dirección en la que llegó. Se prohíbe un cambio de sentido.

Se muestran las combinaciones de llegada y salida permitidas para la aproximación a la acera sin giro en U.

El atributo CurbApproach está diseñado para funcionar con ambos tipos de normas de conducción nacionales: circulación por la derecha (Estados Unidos) y circulación por la izquierda (Reino Unido). Primero, considere un punto de demanda en el lado izquierdo de un vehículo. Siempre está en el lado izquierdo, independientemente de si el vehículo circula por la mitad izquierda o derecha de la carretera. Lo que puede cambiar con los estándares de conducción nacionales es su decisión de acercarse a un punto de demanda desde una de dos direcciones, es decir, para que termine en el lado derecho o izquierdo del vehículo. Por ejemplo, si desea llegar a un punto de demanda y no tener un carril de tráfico entre el vehículo y el punto de demanda, elija 1 (Lado derecho del vehículo) en los Estados Unidos y 2 (Lado izquierdo del vehículo) en los Estados Unidos. Reino.

Con el tráfico por la derecha, el acceso a la acera que deja al vehículo más cercano al punto de demanda es el lado derecho del vehículo. Con el tráfico por la izquierda, el acceso a la acera que deja el vehículo más cercano al punto de demanda es el lado izquierdo del vehículo.

La dirección en la que se mueve un punto. Las unidades son grados y se miden en el sentido de las agujas del reloj desde el norte verdadero. Este campo se utiliza junto con el campo BearingTol.

Los datos de rumbo generalmente se envían automáticamente desde un dispositivo móvil equipado con un receptor GPS. Intente incluir datos de rumbo si está cargando una ubicación de entrada que se está moviendo, como un peatón o un vehículo.

El uso de este campo tiende a evitar agregar ubicaciones a los bordes incorrectos, lo que puede ocurrir cuando un vehículo está cerca de una intersección o un paso elevado, por ejemplo. El rumbo también ayuda a la herramienta a determinar en qué lado de la calle se encuentra el punto.

El valor de tolerancia de rumbo crea un rango de valores de rumbo aceptables al ubicar puntos en movimiento en un borde usando el campo Rumbo. Si el valor del campo Rumbo está dentro del rango de valores aceptables que se generan a partir de la tolerancia de rumbo en un borde, el punto se puede agregar como una ubicación de red allí; de lo contrario, se evalúa el punto más cercano en el borde más cercano.

Las unidades están en grados y el valor predeterminado es 30. Los valores deben ser mayores que 0 y menores que 180. Un valor de 30 significa que cuando Network Analyst intenta agregar una ubicación de red en un borde, un rango de valores de rumbo aceptables es generado 15 grados a cada lado del borde (izquierdo y derecho) y en ambas direcciones digitalizadas del borde.

Este campo solo se usa en el proceso de resolución si los campos Bearing y BearingTol también tienen valores, sin embargo, ingresar un valor de campo NavLatency es opcional, incluso cuando los valores están presentes en Bearing y BearingTol. NavLatency indica cuánto costo se espera que transcurra desde el momento en que la información GPS se envía desde un vehículo en movimiento a un servidor y el momento en que el dispositivo de navegación del vehículo recibe la ruta procesada.

Las unidades de NavLatency son las mismas que las unidades del atributo de impedancia.

Ejemplos de sintaxis para demand_points

Sintaxis para especificar puntos de demanda usando una estructura JSON para características

Sintaxis para especificar puntos de demanda utilizando una URL que devuelve una respuesta JSON

Ejemplos de demand_points

Ejemplo 1: especificar puntos de demanda en la referencia espacial del dataset de red mediante una estructura JSON. El ejemplo también muestra cómo especificar algunos atributos para los puntos de demanda.

Ejemplo 2: especificar puntos de demanda en la referencia espacial de Web Mercator mediante una estructura JSON

Ejemplo 3: especificar puntos de demanda mediante una URL

La URL realiza una consulta de algunas características de un servicio de mapas. También se puede especificar una URL que consulta las características de un servicio de características.

Simbólico

Utilice este parámetro para especificar un token que proporcione la identidad de un usuario que tiene los permisos para acceder al servicio. La página de servicios de acceso proporciona más información sobre cómo se puede obtener dicho token de acceso.

Ejemplo (reemplace & ltyourToken & gt con un token válido):

Utilice este parámetro para especificar el formato de respuesta. El parámetro puede tener html, json o pjson como argumentos, por ejemplo, f = json. El valor de pjson se usa para imprimir la respuesta JSON en un formato bonito.


Solucionar problemas de instalaciones y desinstalaciones de .NET Framework bloqueadas

Cuando ejecuta el instalador web o sin conexión para .NET Framework 4.5 o versiones posteriores, es posible que encuentre un problema que impida o bloquee la instalación de .NET Framework. La siguiente tabla enumera posibles problemas de bloqueo y proporciona enlaces a información de solución de problemas.

En Windows 8 y versiones posteriores, .NET Framework es un componente del sistema operativo y no se puede desinstalar de forma independiente. Las actualizaciones de .NET Framework aparecen en la Actualizaciones instaladas pestaña del Panel de control Programas y características aplicación. Para los sistemas operativos en los que .NET Framework no está preinstalado, .NET Framework aparece en la Desinstalar o cambiar un programa pestaña (o la Añadir Quitar programas pestaña) de la Programa y características aplicación en el Panel de control. Para obtener información sobre las versiones de Windows en las que está preinstalado .NET Framework, consulte Requisitos del sistema.

Dado que las versiones 4.x de .NET Framework son actualizaciones in situ, no puede instalar una versión anterior de .NET Framework 4.x en un sistema que ya tenga instalada una versión posterior. Por ejemplo, en un sistema con Windows 10 Fall Creators Update, no puede instalar .NET Framework 4.6.2, ya que .NET Framework 4.7.1 está preinstalado con el sistema operativo.

Puede determinar qué versiones de .NET Framework están instaladas en un sistema. Consulte Cómo: Determinar qué versiones de .NET Framework están instaladas para obtener más información.

En esta tabla, 4.5.x se refiere a .NET Framework 4.5 y sus versiones puntuales, 4.5.1 y 4.5.2, 4.6.x se refiere a .NET Framework 4.6 y sus versiones puntuales, 4.6.1 y 4.6.2 , 4.7.x se refiere a .NET Framework 4.7 y sus versiones puntuales, 4.7.1 y 4.7.2, y 4.8 se refiere a .NET Framework 4.8.

Problemas de compatibilidad del programa

La instalación de .NET Framework 4.5 o sus versiones puntuales falla con un código de error 1603 o se bloquea cuando se ejecuta en el modo de compatibilidad de programas de Windows. La Asistente de compatibilidad de programas indica que es posible que .NET Framework no se haya instalado correctamente y le solicita que lo reinstale utilizando la configuración recomendada (modo de compatibilidad de programas). El Asistente de compatibilidad de programas también podría haber establecido el modo de compatibilidad de programas en intentos anteriores fallidos o cancelados de ejecutar la instalación de .NET Framework.

El instalador de .NET Framework no se puede ejecutar en el modo de compatibilidad de programas. Para resolver este problema de bloqueo, debe usar el Editor del registro para asegurarse de que la configuración del modo de compatibilidad no esté habilitada en todo el sistema:

Elegir la Comienzo botón, y luego elija Correr.

En el Correr cuadro de diálogo, escriba & quotregedit & quot y seleccione OK.

En el Editor del registro, busque las siguientes subclaves:

HKEY_CURRENT_USER SOFTWARE Microsoft Windows NT CurrentVersion AppCompatFlags Compatibility Assistant Persisted

En la columna Nombre, busque los nombres de descarga de .NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 o 4.7.2, según la versión que tenga. instalar y eliminar estas entradas. Para conocer los nombres de las descargas, consulte el artículo Instalar .NET Framework para desarrolladores.

Vuelva a ejecutar el instalador de .NET Framework para la versión 4.5, 4.5.1, 4.5.2 o 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 o 4.7.2.


Ver el vídeo: Некоторые аспекты работы со снимками из Живого атласа ArcGIS