geoc_delta.sql 977 B

1234567891011121314151617181920212223242526272829303132
  1. CREATE OR REPLACE FUNCTION "public"."geoc_delta"("lon" numeric, "lat" numeric)
  2. RETURNS "pg_catalog"."jsonb" AS $BODY$
  3. DECLARE
  4. ret varchar;
  5. dLon numeric;
  6. dlat numeric;
  7. radLat numeric;
  8. magic numeric;
  9. sqrtMagic numeric;
  10. ee numeric;
  11. a numeric;
  12. BEGIN
  13. ee := 0.006693421622965823;
  14. a := 6378245;
  15. dLon := geoc_transform_lon(lon - 105, lat - 35);
  16. dLat := geoc_transform_lat(lon - 105, lat - 35);
  17. --raise NOTICE 'dLon的值为: %',dLon;
  18. --raise NOTICE 'dLat的值为: %',dLat;
  19. radLat := lat / 180 * pi();
  20. magic = sin(radLat);
  21. magic = 1 - ee * magic * magic;
  22. sqrtMagic := sqrt(magic);
  23. dLon = (dLon * 180) / (a / sqrtMagic * cos(radLat) * pi());
  24. dLat = (dLat * 180) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi());
  25. ret :='['||dLon||','||dLat||']';
  26. return ret::jsonb;
  27. END;
  28. $BODY$
  29. LANGUAGE plpgsql VOLATILE
  30. COST 100;