Funcion Oracle Spatial a Posgis

From: Jose Mercedes Venegas Acevedo <jvenegasperu(at)gmail(dot)com>
To: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Funcion Oracle Spatial a Posgis
Date: 2019-06-07 17:42:51
Message-ID: CA+KjtGdWrHd-D+WJ0gMPFNGGCM2GpJ5HoMRbT0+GHa6X1DYqVQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buen dia a todos

Alguien me puede ayudar para pasar la funcion de lineas abajo de Oracle
spatial a postgis necesito un resultado similiar en mi BD esto lo vi en
este blog

https://spatialdbadvisor.com/oracle_spatial_tips_tricks/307/computing-cardinal-directions-to-nearby-geometries

1. CREATE OR REPLACE
2. FUNCTION CardinalDirection(p_start_point IN sdo_geometry,
3. p_end_point IN sdo_geometry,
4. p_tolerance IN NUMBER DEFAULT 0.05,
5. p_projected IN INTEGER DEFAULT 1)
6. RETURN varchar2 deterministic
7. AS
8. c_PI CONSTANT NUMBER := acos(-1);
9. v_bearing NUMBER;
10. v_tilt NUMBER;
11. v_vertex1 mdsys.vertex_type;
12. v_vertex2 mdsys.vertex_type;
13. FUNCTION ST_Azimuth(p_dE1 IN NUMBER, p_dN1 IN NUMBER,
14. p_dE2 IN NUMBER, p_dN2 IN NUMBER)
15. RETURN NUMBER
16. IS
17. dBearing NUMBER;
18. dEast NUMBER;
19. dNorth NUMBER;
20. BEGIN
21. IF (p_dE1 IS NULL OR p_dN1 IS NULL OR
22. p_dE2 IS NULL OR p_dE2 IS NULL ) THEN
23. RETURN NULL;
24. END IF;
25. IF ( (p_dE1 = p_dE2) AND (p_dN1 = p_dN2) ) THEN
26. RETURN NULL;
27. END IF;
28. dEast := p_dE2 - p_dE1;
29. dNorth := p_dN2 - p_dN1;
30. IF ( dEast = 0 ) THEN
31. dBearing := CASE WHEN ( dNorth < 0 )
32. THEN c_PI
33. ELSE 0
34. END;
35. ELSE
36. dBearing := -aTan(dNorth / dEast) + c_PI / 2;
37. END IF;
38. RETURN CASE WHEN ( dEast < 0 )
39. THEN dBearing + c_PI
40. ELSE dBearing
41. END;
42. END ST_Azimuth;
43. BEGIN
44. IF (p_start_point IS NULL OR p_end_point IS NULL) THEN
45. RETURN NULL;
46. END IF;
47. -- If Geodetic....
48. IF (NVL(ABS(p_projected),1) = 0 ) THEN
49. SDO_UTIL.BEARING_TILT_FOR_POINTS(
50. p_start_point,
51. p_end_point,
52. p_tolerance,v_bearing,v_tilt);
53. ELSE
54. v_vertex1 := sdo_util.getVertices(p_start_point)(1);
55. v_vertex2 := sdo_util.getVertices(p_end_point)(1);
56. v_bearing := ST_Azimuth(v_vertex1.X, v_vertex1.Y,
57. v_vertex2.X, v_vertex2.Y);
58. END IF;
59. v_bearing := round(v_bearing * (180.0 / acos(-1)),2);
60. RETURN CASE
61. WHEN v_bearing IS NULL THEN 'NULL'
62. WHEN /* Cardinal Point 0 */ v_bearing BETWEEN 348.75 AND
0.0
63. OR v_bearing BETWEEN 0.0 AND
11.25 THEN 'N'
64. WHEN /* Cardinal Point 22.5 */ v_bearing BETWEEN 11.25 AND
33.75 THEN 'NNE'
65. WHEN /* Cardinal Point 45 */ v_bearing BETWEEN 33.75 AND
56.25 THEN 'NE'
66. WHEN /* Cardinal Point 67.5 */ v_bearing BETWEEN 56.25 AND
78.75 THEN 'ENE'
67. WHEN /* Cardinal Point 90 */ v_bearing BETWEEN 78.75 AND
101.25 THEN 'E'
68. WHEN /* Cardinal Point 112.5 */ v_bearing BETWEEN 101.25 AND
123.75 THEN 'ESE'
69. WHEN /* Cardinal Point 135 */ v_bearing BETWEEN 123.75 AND
146.25 THEN 'SE'
70. WHEN /* Cardinal Point 157.5 */ v_bearing BETWEEN 146.25 AND
168.75 THEN 'SSE'
71. WHEN /* Cardinal Point 180 */ v_bearing BETWEEN 168.75 AND
191.25 THEN 'S'
72. WHEN /* Cardinal Point 202.5 */ v_bearing BETWEEN 191.25 AND
213.75 THEN 'SSW'
73. WHEN /* Cardinal Point 225 */ v_bearing BETWEEN 213.75 AND
236.25 THEN 'SW'
74. WHEN /* Cardinal Point 247.5 */ v_bearing BETWEEN 236.25 AND
258.75 THEN 'WSW'
75. WHEN /* Cardinal Point 270 */ v_bearing BETWEEN 258.75 AND
281.25 THEN 'W'
76. WHEN /* Cardinal Point 292.5 */ v_bearing BETWEEN 281.25 AND
303.75 THEN 'WNW'
77. WHEN /* Cardinal Point 315 */ v_bearing BETWEEN 303.75 AND
326.25 THEN 'NW'
78. WHEN /* Cardinal Point 337.5 */ v_bearing BETWEEN 326.25 AND
348.75 THEN 'NNW'
79. ELSE to_char(v_bearing)
80. END;
81. END CardinalDirection;
82. /
83. SHOW errors

--
José Mercedes Venegas Acevedo
cel Mov RPC 964185205

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Carlos T. Groero Carmona 2019-06-08 21:33:06 Re: Perdida de flujo replicacion
Previous Message kernel 2019-06-07 11:30:04 Re: Perdida de flujo replicacion