Created
January 13, 2021 19:38
-
-
Save ragnvald/59a73b2683806dd1bc0a99554473fb6e to your computer and use it in GitHub Desktop.
Reference for stackexchange question
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- FUNCTION: public.qdgc_get_recursivestring(double precision, double precision, integer, text) | |
DROP FUNCTION public.qdgc_get_recursivestring(double precision, double precision, integer, text); | |
CREATE OR REPLACE FUNCTION public.qdgc_get_recursivestring( | |
lon_value double precision, | |
lat_value double precision, | |
depthlevel integer, | |
square text) | |
RETURNS text | |
LANGUAGE 'plpython3u' | |
COST 100 | |
VOLATILE PARALLEL UNSAFE | |
AS $BODY$ | |
if lon_value >1: | |
lon_value = lon_value - math.floor(lon_value) | |
elif (lon_value<-1): | |
lon_value = lon_value + abs(math.ceil(lon_value)) | |
if lat_value >1: | |
lat_value = lat_value - math.floor(lat_value) | |
elif (lat_value<-1): | |
lat_value = lat_value + abs(math.ceil(lat_value)) | |
if ((lon_value>=0) and (lat_value>=0)): | |
if ((lon_value <0.5) and (lat_value>=0.5)): | |
square = square + 'A' | |
lon_value=lon_value*2 | |
lat_value=(lat_value-0.5)*2 | |
elif ((lon_value>=0.5) and (lat_value>=0.5)): | |
square = square + 'B' | |
lon_value=(lon_value-0.5)*2 | |
lat_value=(lat_value-0.5)*2 | |
elif ((lon_value<0.5) and (lat_value<0.5)): | |
square = square + 'C' | |
lat_value=lat_value*2 | |
lon_value=lon_value*2 | |
elif ((lon_value>=0.5) and (lat_value<0.5)): | |
square = square + 'D' | |
lon_value=(lon_value-0.5)*2 | |
lat_value=lat_value*2 | |
elif ((lon_value>=0) and (lat_value<=0)): | |
if ((lon_value <0.5) and (lat_value>-0.5)): | |
square = square + 'A' | |
lon_value=lon_value*2 | |
lat_value=lat_value*2 | |
elif ((lon_value>=0.5) and (lat_value>-0.5)): | |
square = square + 'B' | |
lon_value=(lon_value-0.5)*2 | |
lat_value=lat_value*2 | |
elif ((lon_value<0.5) and (lat_value<=-0.5)): | |
square = square + 'C' | |
lon_value=lon_value*2 | |
lat_value=(lat_value+0.5)*2 | |
elif ((lon_value>=0.5) and (lat_value<=-0.5)): | |
square = square + 'D' | |
lon_value=(lon_value-0.5)*2 | |
lat_value=(lat_value+0.5)*2 | |
elif ((lon_value<=0) and (lat_value<=0)): | |
if ((lon_value<=-0.5) and (lat_value>-0.5)): | |
square = square + 'A' | |
lon_value=(lon_value+0.5)*2 | |
lat_value=lat_value*2 | |
elif ((lon_value>-0.5) and (lat_value>-0.5)): | |
square = square + 'B' | |
lon_value=lon_value*2 | |
lat_value=lat_value*2 | |
elif ((lon_value<=-0.5) and (lat_value<=-0.5)): | |
square = square + 'C' | |
lon_value=(lon_value+0.5)*2 | |
lat_value=(lat_value+0.5)*2 | |
elif ((lon_value>-0.5) and (lat_value<=-0.5)): | |
square = square + 'D' | |
lon_value=lon_value*2 | |
lat_value=(lat_value+0.5)*2 | |
elif ((lon_value<=0) and (lat_value>=0)): | |
if ((lon_value <=-0.5) and (lat_value>=0.5)): | |
square = square + 'A' | |
lon_value=(lon_value+0.5)*2 | |
lat_value=(lat_value-0.5)*2 | |
elif ((lon_value>-0.5) and (lat_value>=0.5)): | |
square = square + 'B' | |
lon_value=lon_value*2 | |
lat_value=(lat_value-0.5)*2 | |
elif ((lon_value<=-0.5) and (lat_value<0.5)): | |
square = square + 'C' | |
lon_value=(lon_value+0.5)*2 | |
lat_value=(lat_value)*2 | |
elif ((lon_value>-0.5) and (lat_value<0.5)): | |
square = square + 'D' | |
lon_value=lon_value*2 | |
lat_value=lat_value*2 | |
stringlength = len(square) | |
if (stringlength < depthlevel): | |
r_lon_value = lon_value | |
r_lat_value = lat_value | |
return qdgc_get_recursivestring(r_lon_value,r_lat_value,depthlevel,square) | |
else | |
return square | |
$BODY$; | |
ALTER FUNCTION public.qdgc_get_recursivestring(double precision, double precision, integer, text) | |
OWNER TO postgres; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment