How do I Do a Radius Search?
Radius Search
There are (at least) two ways of conducting a radius search. The first (and simplest) makes use of SQL Servers Geography data type. Unfortunately, this approach can be quite slow, making the second technique a better approach. The second approach is to use trigonometric functions to calculate the distance
Geometry
The following code snippet demonstrates a radius search used to identify all properties located within a 1-mile radius of a central point in Ventura County (34.28250,-119,29317). This approach simplifies the geography data type, whuich simplifies the calculation but usually takes longer to run.
Declare @Lat Float = 34.28250
Declare @Lon Float = -119.29317
Declare @Base Geography = geography::Point(@Lat,@lon,4326)
SELECT
x.[ATTOM ID],
x.SitusAddress,
x.Distance
FROM
(
SELECT
[ATTOM ID],
SitusAddress,
Distance = @Base.STDistance(geography::Point(Latitude,Longitude,4326)) / 1609.344
FROM
Property.PropertyFeature
Where
SitusStateCountyFIPS = '06111' And DataLength(Latitude) > 0 And DataLength(Longitude) > 0 And Latitude <> 0 And Longitude <> 0
) as x
Where
x.Distance < 1
.Note: This example takes approximately 3 times longer to run than the Trigonometry approach (below)
Trigonometry
The following code snippet performs the same task but uses trigonometric functions rather than the geography data type to conduct to calculate the distance between two points.
Declare @Lat Float Declare @Lon Float
Set @Lat = 34.28250
Set @Lon = -119.29317
SELECT
x.[ATTOM ID],
x.SitusAddress,
x.Distance
FROM
(
SELECT
[ATTOM ID],
SitusAddress,
Distance = (3959 * acos(cos(radians(@Lat)) * cos(radians(Latitude)) * cos(radians(Longitude) - radians(@Lon)) + sin(radians(@Lat)) * sin(radians(Latitude))))
FROM
Property.PropertyFeature
Where
SitusStateCountyFIPS = '06111'
) as x
Where
x.Distance < 1
Note: This is a simplified version of a more complicated formula that can applied because all US addresses are located in the Northern Hemisphere and West of GMT.