Buscar este blog

lunes, 26 de julio de 2010

ORACLE SPATIAL

Voy a dar algunas operaciones frecuentes de ORACLE SPATIAL que se suelen utilizar:

ORACLE SPATIAL

Si queremos dar permisos desde un usuario a otro usuario:

Grant select,inserto on propietario.nombretabla to usuario recibidor

Dar permisos sobre una tabla a un ROL:

Grant select insert on tablas to rol_aguas

Grant rol aguas to usuario

Create table pctfree, intentar no ponerlo por defecto,ponerlo a 16k los bloques.cuando se crea una tabla por ejemplo que recibirá datos de un formulario.
Pctused te dice a partir de cuando dejo meter nuevos registros.

INDICES

Hay un parámetro que te dice cuado hay que hacer un rebuild, después de hacer muxos insert en una tabla.
Blevel, si un índice compruebo este parámetro si es mayor que 4 hacer rebuild
Selec * from user_indexes
Actualizar estadísticas, dbms_stats.gather_table_stats (’PROPIETARIO’,’NOMBRETABLA’)
Analyze nombre tabla compute statics for all index.
Autonumericos, crear secuencia y trigger.

Create secuences ‘increment by 1’
Create or replace trigger before insert on for each row.
Declare declaracion variables
Begin logica
End;

Follows y nombre siguiente trigger para indiccar que trigger viene detras.
En vez del before poner instead of para insert en vistas.
Alter index nombre rebuild para hacer rebuil a índices.
Vista materializada,
Es una tabla que contiene los datos que le pasamos de una consulta , el objetivo es replica de datos.
(select * from tabla)

Mecanismos de sincronización completo, se trae todos los datos en una vista,si haces refresh en la vista se lo trae todo de nuevo.
Hay otros que solo te trae los que ha cambiado.
Tipo rápido
El usuario tiene que tener permisos para hacer vistas materializadas.

ORACLE SPATIAL:
Esquema,usuarios y software que lo envuelve.
Sdo_geometry() si se puede hacer operaciones con sql
ArcSde =.
St_geometry(). No se puede hacer operaciones con geometrías.

Pasar de sdo a st, st_geometry(sgo_geometry) pasar de geom. Oracle spatial a sd
Sdo_geometry(sdo_gtype’numero que te dice el tipo del dato geometrico’, srid’23030’,sdo_point’x,y,z sino es punto va a null’, sdo_elem_info (3 valores),sdo_ordinate Array’cordinadas del poligono’)
sdo_gtype:
DLTT
Dimension (2 o 3), lrs(),tt = tipo de geometría que es 00 desconocida,01 punto 02 lineas 03 poligono , 2004 colección lo que sea,05 multipunto, 06 multilineas, 07 multipoligon.

SDO_GEOMETRY, tiene varios métodos, get_dims() devuelve la dimensión, get gtype el tipo
Mdsys, propietario de todas las tablas internas de oracle spatial.
3 pasos:
1.Create table
2.Informar a mdsys de que esa capa es geométrica. Insert en user_sdo_geom_metadata
3.Carga datos
4.Crear índice espacial.

SDO_GEO_GEOM_METADATA_TABLE

USER_SDO_GEO_GEOM_METADATA
Dar de alta en table_name, column_name, diminfo,srid. La geometría.
Insert into user_sdo_geom_metadata values(areasinfluencia,geom,SDO_DIM_ARRAY(),23030)


VER EL DIM INFO
SELECT DIMINFO FROM ALL_SDO_GEOM_METADATA where OWNER='APERIANEZ' and table_name='PARCELS'

Insert into user_sdo_geom_metadata select table_name,column_name,diminfo,srid from
all_SDO_GEOM_METADATA
WHERE TABLE_NAME='COFFEESHOP'

CREAR DBLINK PARA CREAR VISTA MATERIALIZADA

CREATE PUBLIC DATABASE LINK "NOMBRE"
CONNECT TO "WEBGISMG" IDENTIFIED BY "CONTRASENA" USING 'TNS_NAMES'



Insert into user_sdo_geom_metadata select table_name,column_name,diminfo,srid from
all_SDO_GEOM_METADATA
WHERE TABLE_NAME='COFFEESHOPS';

INDICES SPACIAL.
COMPROBAR SI UNA TABLA HAY QUE REGENERARLE EL INDICE, TE DEVUELVE UN ENTERO, SI ES MAYOR QUE 2 REGENERARLO.
SELECT SDO_TUNE.QUALITY_DEGRADATION('CJMARTIN','COFFEESHOPS_GI') FROM DUAL

CREATE INDEX STREETS_GI ON STREETS(GEOMETRY)
INDEXTYPE IS MDSYS.SPATIAL_INDEX
PARAMETERS ('SDO_INDX_DIMS=3') PARA NO ADMINITIR GEOMETRIAS EN 3D
,’LAYER_GTYPE=POINT’
,’SDO_NOM_LEAF_TBL=TRUE’ CUANDO CREAS INDICES TE CREAN UNA SERIE DE TABLAS CON @, ESTAS TABLAS GUARDAN EL ARBOL DE BUSQUEDA DEL INDICE.
ESTE PARAMETRO EN VEZ DE CREAR UNA TABLA POR CADA INDICE TE CREA 2,UNA DE ELLAS LA SUBE A LA MEMORIA Y LE PONE UN PIN CON LO QUE LA BUSQEDA ES EN “MEMORIA”.
PARA PINEAR UNA DE ELLAS HAY QUE HACER
ALTER TABLE NOMBRETABLA STORAGE(BUFFER_POOL_KEEP)
DE LAS 2 QUE CREA HAY QUE PINEAR “MDNT_A” DE ESE INDICE$.
SELECT SDP_NL_ONDEX_TABLE FROM USER _SDO_INDEX_METADATA WHERE
SDO_INDEX_NAME=”NOMBRE INDICE CREADO”
EXEX SDO_TUNE.ALALIZE_RTREE() PARA VER SI ES NECESARIO RESETEAR INDICE.

SISTEMAS DE REFERENCIA:
FUNCIONES:
SDO_COORD_REF_SYSTEM (VISTA) VER LOS SISTEMAS DE REFERENCIA.
23030 ES EL ED50 EN EPSG EQUIVALENTE ORACLE 82337
FUNCIONES QUE TE DEVUELVE EQUIVALENTE
SDO_CS (PAQUETE DE FUNCIONES).MAP.EPSGESRDI_TO_ORAQCLE(NUMERO)
MAPORACLESRID_TO_EPSG PASAR AL CONTRARIO
SDO_CS_MAKE2D() SI LE PASAS GEOM 3D LA CONVIERTE EN 2D
SELECT SDO_CS.TRANSFORM(GEOMETRIA,82337) FROM SE_AREASINFLUENCIA AS G REPORYECTAR
EXECUTE SDO_CS.TRANSFORM_LAYER(‘NOMBRECOLUMNAGEOMMAYUSCULA’,’NOMBRETABLASALIDA’,SRID) Posicionamiento web: Visítanos aquí Carlos Javier Martín Cano

Comprobar geometrias erroneas mediante consulta oracle desde java

Con esta sentencia comprobamos que la capa que estamos consultando no tiene geometrías invalidas, por ejemplo poligonos con superficie 0 o shape como (;;;;).


Statement stm2 = conexionREDIAM.createStatement();
stm2
.execute("SELECT COUNT(*) AS RESULTADO FROM "+ currentCapa.getOwner().toUpperCase()+"."+ currentCapa.getName().toUpperCase()+" T WHERE T.SHAPE.SDO_GTYPE IS NULL"); Carlos Javier Martín Cano