jueves 10 de noviembre de 2011

Obtener el indicie espacial para una tabla geometrica

Un índice espacial sólo se puede crear en una columna espacial, es decir, una columna del tipo geometry o geography

Este sirve para indexar las columnas geometricas y agilizar la busqueda de datos geometricos..

Un indice espacial se compone de 4 datos XMIN, YMIN, XMAX, YMAX tambien llamado extent en map suite..

En el siguiente ejemplos e trata de obtener el indice espacial para las tablas de cierta entidad de la republica..



DECLARE @Geom Geometry
DECLARE @XMin AS DECIMAL(10,0), @YMin AS DECIMAL(10,0), @XMax AS DECIMAL(10,0), @YMax AS DECIMAL(10,0)


SELECT @Geom = Geom FROM Estados WHERE IDEstado = @strEstado

SET @Geom = @Geom.STEnvelope();
SET @XMin = CAST(ROUND(@Geom.STPointN(1).STX, 0) AS DECIMAL(10,0))
SET @YMin = CAST(ROUND(@Geom.STPointN(1).STY, 0) AS DECIMAL(10,0))
SET @XMax = CAST(ROUND(@Geom.STPointN(3).STX, 0) AS DECIMAL(10,0))
SET @YMax = CAST(ROUND(@Geom.STPointN(3).STY, 0) AS DECIMAL(10,0))


ahora, supongamos que no tenemos la entidad pero solo tenemos los municipios.


DECLARE @Geom Geometry SET @Geom = GEOMETRY::STGeomFromText('GEOMETRYCOLLECTION EMPTY', 32614)

select @Geom = @Geom.STUnion(Geom) from dbo.Municipios WHERE Geom IS NOT null;

UPDATE dbo.Estados SET Geom = @Geom WHERE IdEstado = @strIdEstado

la union de todos los municipios da por resultado el contorno de un estado y usando la function geometrica STUnion se logra dicha union..