7 votos

Cómo configurar un ArcMap Relate con una tabla de MS SQL Server 2012

Es la primera vez que trabajo con datos directamente desde MS SQL Server 2012, y no estoy seguro de si puedo utilizarlos en un Relate en ArcMap.

Tengo una tabla en MS SQL Server, que he traído a ArcMap a través de la opción Conexiones de base de datos. Cuando añado esta tabla a ArcMap mediante el botón estándar Añadir datos, aparece un cuadro de diálogo Nueva capa de consulta:

enter image description here

ArcMap requiere un campo identificador único, sin embargo esta tabla no lo tiene. Elegí uno de los campos existentes, aunque no es único (¿el primer problema?).

Ahora puedo ver la tabla en ArcMap, y puedo establecer una relación entre esta tabla y una featureclass, basada en el campo BoreholeID correspondiente.

Sin embargo, cuando selecciono una perforación de la clase de rasgo o una fila de la tabla, la relación aparece pero atenuada:

enter image description here

  • ¿Puedo utilizar una tabla de MS SQL Server Management Studio en ArcMap? con ArcMap?
  • En caso afirmativo, ¿la causa del problema es la falta de un identificador único único?
  • Si no es así, ¿qué otra cosa podría estar causando el problema?

7voto

Free Wildebeest Puntos 1548

En primer lugar, aclaremos un par de cosas. Cuando dices que quieres añadir una tabla de MS SQL Server Management Studio 2012 lo que realmente quieres hacer es añadir una tabla de MS SQL Server . El estudio de gestión es simplemente la interfaz de usuario para interactuar con la propia base de datos.

En segundo lugar, voy en el supuesto de que esta base de datos SQL Server no tiene ArcSDE cargado en él. Si es así, la carga de una tabla debe ser tan simple como añadir una tabla estándar, y no sería una capa de consulta.

ArcGIS es bastante quisquilloso cuando se trata de tratar con bases de datos fuera del entorno SDE. Usted tiene que asegurarse de que ha ido los controladores actualizados para el MS SQL Server. Usted probablemente como usted es capaz de añadir la tabla. Si usted es capaz de obtener los datos como una tabla dentro de ArcGIS, entonces usted debería ser capaz de utilizarlo como parte de una unión o relacionar, independientemente de lo que la base de datos se almacena en.

Como ha supuesto, el problema es la identificación única o la falta de ella. Como usted sabe, con cualquier tabla independiente que se crea a través del entorno de ArcGIS, un Object ID se crea. Se trata de un identificador único que permite a ArcGIS identificar cualquier fila individual. Cuando introduzca una capa desde una base de datos externa al entorno de ArcGIS, deberá especificar el campo que se utilizará en lugar del campo Object ID . Si no especifica un campo de este tipo, podrá añadir una tabla, pero no podrá realizar ninguna opción que requiera la indexación de las filas. Esto incluye cualquier tipo de Joins o Relates y otras operaciones espaciales.

En la imagen de abajo, estoy cargando una tabla. El primer atributo que aparece es gid . Como puede ver, muestra que es Not Nullable . Se trata de un segundo criterio importante, pero no obligatorio de entrada. Se producirá un error si se encuentran valores NULL, pero no si el campo permite valores NULL. Este es el campo que elegiré como Unique Identifier atributo. Add Query Layer

Aunque esta capa es una capa espacial, los pasos son los mismos para una tabla no espacial también.

Ahora, volviendo a tu problema, y un par de opciones para solucionarlo. Su tabla no tiene un campo ID único. Necesitas uno. Tienes un par de opciones.

  1. Añada el equivalente de SQL Server de un campo Autonumber a su tabla. Este método creará un ID Único que no cambiará con respecto a una fila en particular. Una vez asignado un ID, persistirá y nunca se repetirá o duplicará.

  2. Cree una Vista en SQL Server, basada en su tabla existente, y añada un campo Autonumber allí. Este método creará un Identificación única similar a un ArcGIS ID del objeto . Debería NO utilizarse como base para un join o un relate, ya que la asignación de ID a las filas se basa únicamente en los cambios de orden de clasificación. Sin embargo, es suficiente para cumplir el requisito de ID de tabla único para una capa de consulta. A continuación se muestra un código de ejemplo para ese caso:

    CREATE VIEW VIEW_NM AS SELECT Row_number() OVER(ORDER BY "EventName" DESC, "BoreholeID") AS tbl_id, "EventName", "Method", "BoreholeID" FROM yourtable

    ------ Editar ----- Se planteó la preocupación de que el uso de una función Row_number() no produciría un ID único adecuado, porque podría devolver características diferentes. En el caso que proporcioné, esto es cierto, en el sentido de que la función Order By no es único. Por lo tanto, debe asegurarse de incluir una combinación de campos en esa función que devuelva un orden de clasificación único, o valores cuando se conviertan en un número. Esto garantizará que una característica determinada devuelva el mismo ID de objeto, independientemente de la consulta que se realice en ArcGIS. Estoy añadiendo "BoreholdID" a la función Order By sección.

    Un problema que puede surgir al trabajar con una vista es el tipo de campo que ArcGIS aplicará a este campo "tbl_id". Es posible que lo vea como un tipo de campo que no es capaz de manejar, por lo que puede que tenga que convertirlo en un tipo de campo Integer tipo de campo. Así es como hice algo similar con una vista en PostgreSQL:

    SELECT (int4(Row_number() OVER(ORDER BY "EventName" DESC)) AS tbl_id

    La sintaxis para SQL Server puede ser ligeramente diferente. Puede ser int en lugar de int4 .

  3. Otra forma de crear este identificador único sería utilizar la función Crear tabla de consulta herramienta. Esta herramienta permite seleccionar una tabla, una vista o crear una consulta SQL personalizada utilizando tablas de bases de datos y mostrarlas en ArcGIS como una capa o una tabla independiente. Uno de los parámetros de la herramienta es cómo crear la Key campo. De nuevo se hace seleccionando uno o más campos encontrados en la capa de consulta, que se utilizarán para crear dinámicamente el ObjectID. Esto es muy parecido a la función Row_number(), ya que ambas crean un identificador único basado en los datos del resultado de la consulta. Una lo hace simplemente en la base de datos, la otra lo hace dentro de ArcGIS. Una ventaja potencial de este método es la posibilidad de incorporarlo fácilmente como parte de un script de Python. Un ejemplo se muestra en la parte inferior del documento de ayuda.

Como regla general, conviene tener un atributo identificador único para cada tabla, ya sea espacial o de atributos, que se cree. La mayoría de las bases de datos funcionan de forma más eficiente en tablas en las que existe este atributo, y se designa como clave primaria, o similar. Permite crear índices y, en muchos casos, la funcionalidad de edición y selección se ve restringida cuando no existe un identificador único.

De todas formas, inténtalo a ver si funciona. Como ya he mencionado, ArcGIS puede ser muy particular al añadir capas de consulta. Algunos otros problemas que puede en son con tipos de campo que se traducen de manera diferente de la forma en que se definen en la base de datos, a la forma en ArcGIS los interpreta.

Este documento de ayuda puede ayudarle a asegurarse de que convierte los tipos de datos de su tabla en tipos que serán reconocidos por ArcGIS. Tipos de datos de SQL Server compatibles con ArcGIS

7voto

M. B. Altaie Puntos 11

ArcGIS hace un uso frecuente de las "columnas rowid registradas". Éstas son

  • Columnas INTEGER (32 bits) con
  • valores positivos distintos de cero (1 - 2^31-1),
  • que se definen como NOT NULL,
  • contienen valores únicos, y
  • son reproducibles en consultas posteriores

ArcGIS utiliza estas columnas para mantener la relación entre las filas de las tablas y los gráficos del mapa. Siempre que registre una tabla con una geodatabase empresarial, ArcGIS creará una columna rowid establecida por SDE si no hay ninguna disponible previamente.

Las capas de consulta son no se requiere que estén registrados en la geodatabase, pero sí que tengan una columna rowid con las mismas características. Mucha gente trata de engañar a las reglas mediante el uso de un número de fila columna computada en lugar de un rowid, pero esto sólo creará lo que el documentación se refiere como "comportamiento incoherente" al intentar asignar objetos espaciales a filas de tablas (y viceversa, como en una operación de identidad).

Tendrás que añadir una columna rowid a esta tabla para utilizarla en una capa de consulta.

i-Ciencias.com

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

Powered by:

X