Estoy creando vistas simples contra un ArcSDE Oracle RAC 10g. Mis columnas SHAPE son del tipo de datos SDO_GEOMETRY. ArcSDE 9.3.1.
Tengo varias tablas de puntos, con el siguiente esquema:
ID (Guid) Nombre (cadena) Forma (SHAPE)
¡He construido una vista simple como esto en Oracle!
CREATE OR REPLACE VIEW VW_POINTS AS
SELECT ID, Name, Shape from TABLE_A
UNION ALL
SELECT ID, Name, Shape from TABLE_B
-- etc
La vista en Oracle se crea muy bien. He registrado esta vista con la línea de comando:
sdetable -o create_view -T PUNTOS -t VW_POINTS -c Id, Nombre, FORMA, etc.
La vista ArcSDE se crea de nuevo, muy bien. Puedo usar ArcObjects para consultarlo, etc. Ahora necesito crear una capa. He probado las herramientas de línea de comandos, sdelayer -o register, pero no tuve éxito. Me da un mensaje que dice que las opiniones no son compatibles.
Tendré que hacer esto varias veces, a veces usando una sintaxis compleja para construir la vista.
¿Cuál es el problema? ¿Cómo puedo visualizar estas vistas espaciales como capas SDE? (No necesito editarlas, solo verlas espacialmente dentro de ArcMap)
¡Gracias por el aporte!
EDITAR
Esta es una captura de pantalla en ArcMap, para su longitud: P
Captura de pantalla de ArcMap para tu felicidad :
Según lo solicitado, aquí viene el describe_long
// create_view C: \ Users \ H> sdetable -o create_view -s server -i port -u user -p pass -T view_airspace_points -t vw_airspace_points_oracle -c "*"
En este punto modifiqué la vista sobre Oracle, incluyendo un reparto como numérico (38,0) antes del registro.
// registre la capa C: \ Users \ H> sdelayer -o register -l view_airspace_points, shape -C OBJECTID, USER - g RTREE -s server -i port -u user -p pass -ep -P HIGH
ArcSDE 9.3.1 para Oracle10g Build 2784 Martes 27 de octubre 10:51:14 2009
Layer Administration Utility
Descripción de la capa ....:
Propietario de la tabla ..........: SIGMAGIS2
Nombre de la tabla ...........: VIEW_AIRSPACE_POINTS
Columna espacial .......: FORMA
Id de capa .............: 1398
SRID .................: 79
Id de forma mínima .....: 1
Compensar ...............:
falsex: -180.000000
falsey: -90.000000
Unidades del sistema .........: 994200.000000
Z Offset ..............: 0.000000
Unidades Z ..............: 1.000000
Medir desplazamiento .......:
Unidades de medida ........:
Tolerancia de clúster XY.: 2.0
Índice espacial ........:
parámetro: SPIDX_RTREE
existe: sí
forma de matriz: -2,0,0
Sobre de capa .......:
minx: -180.00000, miny: -90.00000
maxx: 180.00000, maxy: 90.00000
Entidades .............: p
Tipo de capa ...........: Tipo espacial en línea
Fecha de creación ........: 28/06/11 09:28:45
Modo I / O .............: NORMAL
Bloqueo automático ..........: habilitado
Precisión .............: Alta
Privilegios de usuario ......: SELECCIONAR, ACTUALIZAR, INSERTAR, ELIMINAR
Sistema de coordenadas ....: GEOGCS ["Longitud / Latitud [WGS 84]", DATUM ["WGS 84", ESFEROID ["WGS 84", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0.0], UNIDAD [ "Decimal
Grado ", 0.0174532925199433]]
Configuración de capa ...: PREDETERMINADOS
fuente
Respuestas:
Tuve esto (y problemas similares) en el pasado. Siempre se redujo a dos cosas:
La tabla espacial tenía algunas geometrías corruptas / inválidas. El problema con ArcMap es que tan pronto como encuentre una geometría no válida, dejará de renderizarse.
El registro de la capa es incorrecto. Lo que también encontré es que el registro de sdelayer -o no siempre funciona correctamente y tienes que 'masajear' las entradas de registro.
Entonces, para verificar si la capa es válida, use PRIMERO la función SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT . Luego use la función de validación ArcSDE sdelayer -o feature_info -r invalid ... para obtener entidades no válidas de acuerdo con ArcSDE. Probablemente junto con sdelayer -o list (ver aquí )
Para verificar el registro, debe volver al esquema de ArcSDE. Las tablas que controlan el registro son: SDE.LAYERS, SDE.TABLE_REGISTRY, SDE.COLUMN_REGISTRY, SDE.SPATIAL_REFERENCES y SDE.GEOMETRY_COLUMNS. Un truco que uso es que generalmente tengo una capa 'base' que es similar (en lo que respecta a los tipos de geometría y las columnas de clave principal) que se MUESTRA en ArcMap. Luego comparo los registros de registro, entre la capa que se muestra y luego una que no. ¡Se sorprenderá al ver la diferencia que hace un cambio de 1 en una columna entera! :-)
Un consejo sobre COLUMN_REGISTRY: todo lo que tiene que hacer es asegurarse de que la columna de clave principal (que se define como ROWID_COLUMN en SDE.TABLE_REGISTRY) y la columna espacial son correctas (o lo mismo que la capa que se muestra). Ignora todas las otras columnas. Si agrega la capa en ArcMap conectado como propietario de la tabla, las entradas que faltan en la tabla COLUMN_REGISTRY se agregarán automáticamente.
¡Déjeme saber si esto ayuda!
fuente
Lo que está buscando es una vista espacial , ahora el único problema importante que verá aquí es que debe tener cuidado con los campos en los que se está uniendo. Este es un proceso bastante agradable, lo uso en todo el lugar donde he generalizado mi DB para hablar con datos espaciales delgados.
Esto debería llevarte bien en tu camino hacia lo que quieres. La clave es hacer que sus campos se mapeen correctamente. Tiendo a hacer la vista con el mínimo que necesito, luego uso una interfaz de usuario para editar esa vista una vez registrada en SDE para hacer mis ajustes más finos.
fuente
Una cosa que veo que falta es una columna entera única que ArcObjects puede usar para la ID del objeto. Intente crear una secuencia única que mantenga valores únicos para esta columna de identificación. Luego, cree disparadores de inserción en cada una de las tablas para llenar la columna de identificación con la secuencia.
En su comando sdelayer -o register, asegúrese de establecer el indicador -C en su columna de identificación de enteros con la palabra clave USER para que esri no intente administrar la columna por usted.
fuente
He escaneado las respuestas y parece que nadie ha observado que las consultas de unión son un problema para las vistas espaciales con ArcGIS. Esto se debe a que casi seguramente terminará con duplicados objectids. Lo mismo se aplica a las consultas de unión interna donde los predicados de unión no garantizan un registro único "principal". en cualquier caso, aunque la vista puede cumplir con todos los requisitos de registro, no se comportará correctamente
fuente
Gracias a todos los que vieron este hilo.
Bueno, el proceso es un poco complicado, pero es posible registrar una consulta compleja como una capa, solo requiere un poco de ingenio. Todavía no estoy seguro de cuáles son las implicaciones en el rendimiento de esto, pero intentaré mantenerlo actualizado. También tengo problemas para ver los puntos en ArcMap, pero investigaré más a fondo.
En primer lugar, cree una vista espacial compleja en su RDBMS. Solo asegúrese de tener una columna INTEGER UNIQUE NOT NULL en la vista, que se pueda usar más tarde para registrarse en ArcSDE.
Mis consultas fueron solo un montón de UNION ALL, similar a esto:
En este esquema, todos mis objetos tienen como PK ID_UNIQUE_ID, que es un GUID. Mis ObjectID se repitieron en las clases de entidad, por lo que no es una buena opción para nuestro ObjectID sustituto.
Usé (en mi caso) la columna virtual rownum de Oracle para ajustar todas mis consultas y crear una vista que tuviera un "objectID" efectivo. Echar un vistazo:
Creé la vista con la consulta anterior, y creé una vista encima de ella. Esta vista se convertirá en la capa espacial dentro de arcsde. Este es un proceso bastante fácil.
Después de eso, intenté y traté de registrar mi vista espacial como una capa, pero siempre fallé. Cuando crea una vista encima, ArcSDE asume que FID es un NÚMERO (38,10), un número de coma flotante, de acuerdo con el programa de utilidad sdetable -o describe.
En Oracle, esta era la definición de la vista:
Después de reemplazar la columna fid con un yeso, todo funcionó bien. Procedí al registro de la capa y todo salió bien.
EDITAR
La capa se muestra en ArcCatalog como una capa de puntos y puedo ver y seleccionar la tabla en ArcMap como de costumbre (incluso los puntos están resaltados), pero no puedo simbolizarlos y verlos como una capa normal. ¿Algún peso?
¿Alguien tiene alguna idea de por qué sucede esto? Todo está bien, excepto que no puedo ver los objetos espaciales dentro de ArcMap. ¿Algunas ideas?
fuente
Intente ejecutar el siguiente comando: sdelayer -o alter -l [-S] [-k] [-i | El | ] [-s] [-D] -E calc -u [-p]
fuente
En mi experiencia, cuando una capa no se muestra en Arc, es porque falta el índice espacial. Las vistas usan el índice espacial de la tabla de origen, pero parece que está creando un índice espacial para la vista en su declaración de registro.
¿Alguna de las tablas de origen tiene índices espaciales? De lo contrario, intente crearlos en Oracle y vuelva a registrar la vista sin -g.
Otra posibilidad es que esté combinando geometría de dos tablas en una sola columna, no estoy seguro de si eso es un no-no, no lo ha intentado antes.
fuente