SQL Query for Performing Radius Search based on Latitude Longitude

前端 未结 4 866
天命终不由人
天命终不由人 2020-12-04 10:31

We have a restaurant table that has lat-long data for each row.

We need to write a query that performs a search to find all restaurants within the prov

4条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-04 11:06

    If your data is in SQL server database, you can use this:

    CREATE PROC up_FindZipCodesWithinRadius
    
        @ZipCode char(5) ,
        @GivenMileRadius int
    AS
    SET NOCOUNT ON
    
    DECLARE @lat1 float, 
        @long1 float
    
    SELECT  @lat1= latitude,
        @long1 = longitude 
    FROM ZipSource
    WHERE zipcode = @ZipCode
    
    SELECT ZipCode ,DistanceInMiles
    FROM
    (
        SELECT  ZipCode,3958.75 * ( Atan(Sqrt(1 - power(((Sin(@Lat1/57.2958) * Sin(latitude/57.2958)) + 
                (Cos(@Lat1/57.2958) * Cos(latitude/57.2958) * Cos((longitude/57.2958) - (@Long1/57.2958)))), 2)) / 
                ((Sin(@Lat1/57.2958) * Sin(latitude/57.2958)) + (Cos(@Lat1/57.2958) * Cos(latitude/57.2958) * 
                Cos((longitude/57.2958) - (@Long1/57.2958)))))) as DistanceInMiles
    FROM ZipSource
    ) a
    WHERE a.DistanceInMiles <= @GivenMileRadius
    --AND ZipCode <> @ZipCode
    ORDER BY DistanceInMiles
    
    GO
    
    EXEC up_FindZipCodesWithinRadius '35085',20
    GO
    
    DROP PROC up_FindZipCodesWithinRadius
    

提交回复
热议问题