Bases de Datos - Simular una trayectoria de un objeto en "n" zonas de datos espaciales de tipo geográfico

 
Vista:
sin imagen de perfil

Simular una trayectoria de un objeto en "n" zonas de datos espaciales de tipo geográfico

Publicado por Yhimy Wilberto (1 intervención) el 03/01/2017 00:06:24
Buenas tardes a todos espero que estén bien,a continuación explicaré el problema:

Estoy trabajando con el tema de datos espaciales, con el tipo de dato Geography, lo que quiero es simular un recorrido de automóvil(Objecto) de acuerdo a las rutas(zonas) que se le especifica.

Para esto se creará un procedimiento que recorrerá dichas zonas, la zona son LineString.

> LINESTRING (-12.077006 -76.954076, -12.07928 -76.951608)
> LINESTRING (-12.07928 -76.951608, -12.069812 -76.951807)

Las Zonas con el STBuffer con valor de 1 metro, al momento que que le doy el Buffer el LineString se Transforma en un polígono.

1
> select GeogCol1.STBuffer(1) from [dbo].[SpatialTable] where id in (3,4)
[
El punto de partida del objecto es el punto de inicio de la primera zona que tiene que recorrer, cabe mencionar que el objecto tiene "N" zonas que recorrer.
1
> SELECT @PointStart = GeogCol1.STStartPoint() FROM SpatialTable WHERE id = 3

Al momento que comienzo a plantear el problema yo obtengo el punto de inicio y guardo la longitud y latitud de la primera zona que tiene el Id número 3 y le sumo, cabe mencionar que este valor sumado es sacado a simple vista sin ningún calculo, esto me funciona para la primera zona que tiene que recorrer, también asumo que las rutas serán estáticas por lo que eso esta mal , ya que la suma que se debe realizar a longitud y latitud depende mucho del grado de inclinación (grados o radianes) que tiene la zona dentro del hemisferio.

-- Punto de Partida de objeto de la primera zona
1
2
3
> SELECT @PointStart = GeogCol1.STStartPoint() FROM SpatialTable WHERE id = 3
> SET @LatitudPoint  = @PointStart.STPointN(1).Lat;
> SET @LongitudPoint = @PointStart.STPointN(1).Long;

-- Suma de longitud y latitud
1
2
3
4
SET @LatitudPoint  = @LatitudPoint  +  00.00010199995;
SET @LongitudPoint = @LongitudPoint -  00.00009359999999;
print cast( ' LATITUD POINT  => :| ' +cast (@LatitudPoint as varchar(15))+  ' LONGITUD POINT  => : | '+  cast(@LongitudPoint as varchar(15)) as varchar(100));
INSERT INTO SpatailRuteObject(GeogCol1)values(GEOGRAPHY::STPointFromText('POINT(' + CAST(@LongitudPoint AS VARCHAR(20))+ SPACE(1) + CAST(@LatitudPoint AS VARCHAR(20)) + ')',4326))

Una vez que Ingreso el punto de inicio, cojo la ultima fila ingresada de la tabla SpatailRuteObject para saber en que parte de la zona está aquel objeto y luego le sumo. Código Fuente

En esta imagen hay un ejemplo que refleja lo que deseo lograr, Hay una linea negra que refleja a la recta con el id 3 y la recta roja que refleja con el id:4 Los puntos de localización son los de color azul , que me marca la ruta que debe seguir aquel objecto , pero esa ruta tengo que fijarla yo. Espero que me entiendan sobre lo que les trato transmitir.

Imagen de ejemplo :MrbA4

codígo fuente : Ed4nK

> Resultados código Sourse : huKeH
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder