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