Escolar Documentos
Profissional Documentos
Cultura Documentos
sql 1
1 DECLARE @idruta int = 1
2 DECLARE @longrutam float = (SELECT ROUND( geom.STLength(), 6) FROM Normalizacion..RN0011_NUEVA WHERE
Layer = CASE WHEN @idruta = 1 THEN 'IDA' ELSE 'VUELTA' END)
3 DECLARE @linestring geometry = (SELECT geom FROM Normalizacion..RN0011_NUEVA WHERE Layer = CASE WHEN
@idruta = 1 THEN 'IDA' ELSE 'VUELTA' END)
4 /*factor 0.000011*/
5 ;
6 WITH puntos (PuntoN, x, y) AS (
7 SELECT 1, ROUND( @linestring.STPointN(1).STX, 6), ROUND( @linestring.STPointN(1).STY, 6)
8 UNION ALL
9 SELECT PuntoN+1, ROUND( @linestring.STPointN(PuntoN+1).STX, 6), ROUND( @linestring.STPointN(PuntoN
+1).STY, 6)
10 FROM puntos
11 WHERE PuntoN < 100--@linestring.STNumPoints()
12 ),
13 rectas (id, x1, y1, x2, y2) AS (
14 SELECT PuntoN, x, y, LEAD(x,1) OVER(ORDER BY PuntoN), LEAD(y,1) OVER(ORDER BY PuntoN) FROM puntos
15 ),
16 puntosruta (idrec, PuntoN, x1, y1, x2, y2, radianeso, signoxo, signoyo, drecta, inicio, fin, radianes,
signox, signoy)
17 AS (
18 SELECT 1
19 , id, x1, y1, x2, y2
20 , CASE WHEN Y1=Y2 THEN 0 WHEN X1=X2 THEN PI()/2 ELSE ABS( ATAN((Y2-Y1)/(X2-X1))) END
21 , CASE WHEN X1<X2 THEN 1 WHEN X1>X2 THEN -1 ELSE 0 END
22 , CASE WHEN Y1<Y2 THEN 1 WHEN Y1>Y2 THEN -1 ELSE 0 END
23 , ROUND( SQRT( POWER( Y2-Y1, 2) + POWER( X2-X1, 2)), 6)
24 , CONVERT( float, 0)
25 , ROUND( SQRT( POWER( Y2-Y1, 2) + POWER( X2-X1, 2)), 6)
26 , CASE WHEN Y1=Y2 THEN PI()/2 WHEN X1=X2 THEN 0 ELSE ABS( ATAN(-(X2-X1)/(Y2-Y1))) END
27 , CASE WHEN Y1<Y2 THEN -1 WHEN Y1>Y2 THEN 1 ELSE 0 END
28 , CASE WHEN X1<X2 THEN 1 WHEN X1>X2 THEN -1 ELSE 0 END
29 FROM rectas
30 WHERE y2 IS NOT NULL
31 AND id = 1
32 UNION ALL
33 SELECT c.idrec+1
34 , a.id, a.x1, a.y1, a.x2, a.y2
35 , CASE WHEN a.Y1=a.Y2 THEN 0 WHEN a.X1=a.X2 THEN PI()/2 ELSE ABS( ATAN((a.Y2-a.Y1)/(a.X2-a.X1))) END