<div dir="ltr"><div>We have several tables with latitude and longitude columns (data type: numeric) and I need to calculate whether a given lat/lon is within # degrees of a point-radius ring. I came up with the function below. The user supplied radius has to be in degrees (e.g. give me all records within 5 to 25 degrees of this lat/lon pair). Sample query:  select * from mytable where dist_check(mytable.latitude.mytable.longitude,35.6895,139.6917,5,25)=1. </div>
<div><br></div><div>Any advice on solving the same problem using the geography data type when the input radius is supplied in degrees? </div><div><br></div><div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">CREATE OR REPLACE FUNCTION dist_check(lat1 numeric, lon1 numeric, lat2 numeric, lon2 numeric, innerradius numeric, outerradius numeric)</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
<br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">pt1 geometry;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">pt2 geometry;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">BEGIN</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">pt1 := ST_MakePoint(lon1,lat1);</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">pt2 := ST_MakePoint (lon2,lat2);</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">IF ST_DWithin(pt1,pt2,</span><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">outerRadius) AND NOT ST_DWithin(pt1,pt2,</span><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">innerRadius)</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">THEN return 1;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">ELSE</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">return 0;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">END IF;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
<br></div><div>Thanks!</div></div></div>