乘车共享应用程序 - 查找周围的起点和目的地
Ride Sharing App - finding surrounding origins and destinations
我查看了其他几个看起来有些相关的 SO 问题,但并不是我所需要的(或者我不够聪明,无法将这些点联系起来)。
正在为客户开发应用程序。他们的数据库保存着旅行的人的出发地和目的地,仅限于(我相信)美国和加拿大的地方,以及旅行发生的日期。记录会定期更新。调用这些 "trips."
用户来到该网站,输入出发城市和目的地城市,以及每个城市的半径,表明他们愿意为完成旅行而离开他们想要的 origin/destination 城市多远。
该应用程序的工作是查找数据库中已有的any/all 次旅行,这些旅行距离用户需要旅行的出发地和目的地最近。
我最初的想法是在数据库中找到用户期望出发地半径内的所有出发城市,然后使用该记录集在数据库中搜索目的地城市以查找半径内的 any/all 个城市用户想要的目的地。
我还需要一个体面的(最好是免费的...这里是低预算项目)API 可以帮助查找城市地理位置并执行实际半径计算...我想。
我想要做的事情是否接近最佳选择?看起来最困难的部分将是在数据库中找到用户所需城市半径内的所有现有城市——这对于仅 "find all cities in the radius of X city".[=10 的更简单查询来说有点扭曲=]
所以,这有点像 Uber 的情况,除了 Uber driver 决定行程参数是什么,用户只需要知道哪个 Uber driver 要去 from/to离用户最近的地方(在指定的日期,开机)。
现在,用户只是在州级别查找事物 - 从 BC 到纽约,然后阅读数据行查看游乐设施以找到最接近他们需要的那些。
在此先感谢各位聪明人可能有的聪明见解!
Declare @DriverLat float = 41.744068
Declare @DriverLng float = -71.315024
Declare @Within int = 20
Select *
From (
Select Distinct
A.ZipCode
,A.CityName
,A.StateCode
,Miles = [dbo].[udf-Geo-Calc-Miles] (@DriverLat,@DriverLng,A.Lat,A.Lng)
From [dbo].[ZipCodes] A
Where CityType = 'D'
and ZipType = 'S'
) A
Where Miles <= @Within
Order By Miles
Returns
UDF
CREATE Function [dbo].[udf-geo-Calc-Miles] (@Lat1 float,@Lng1 float,@Lat2 Float,@Lng2 float)
Returns Float as
Begin
Declare @Miles Float = (Sin(Radians(@Lat1)) * Sin(Radians(@Lat2))) + (Cos(Radians(@Lat1)) * Cos(Radians(@Lat2)) * Cos(Radians(@Lng2) - Radians(@Lng1)))
Return Case When @Miles is null then 0 else abs((3958.75 * Atan(Sqrt(1 - power(@Miles, 2)) / @Miles))) end
End
我查看了其他几个看起来有些相关的 SO 问题,但并不是我所需要的(或者我不够聪明,无法将这些点联系起来)。
正在为客户开发应用程序。他们的数据库保存着旅行的人的出发地和目的地,仅限于(我相信)美国和加拿大的地方,以及旅行发生的日期。记录会定期更新。调用这些 "trips."
用户来到该网站,输入出发城市和目的地城市,以及每个城市的半径,表明他们愿意为完成旅行而离开他们想要的 origin/destination 城市多远。
该应用程序的工作是查找数据库中已有的any/all 次旅行,这些旅行距离用户需要旅行的出发地和目的地最近。
我最初的想法是在数据库中找到用户期望出发地半径内的所有出发城市,然后使用该记录集在数据库中搜索目的地城市以查找半径内的 any/all 个城市用户想要的目的地。
我还需要一个体面的(最好是免费的...这里是低预算项目)API 可以帮助查找城市地理位置并执行实际半径计算...我想。
我想要做的事情是否接近最佳选择?看起来最困难的部分将是在数据库中找到用户所需城市半径内的所有现有城市——这对于仅 "find all cities in the radius of X city".[=10 的更简单查询来说有点扭曲=]
所以,这有点像 Uber 的情况,除了 Uber driver 决定行程参数是什么,用户只需要知道哪个 Uber driver 要去 from/to离用户最近的地方(在指定的日期,开机)。
现在,用户只是在州级别查找事物 - 从 BC 到纽约,然后阅读数据行查看游乐设施以找到最接近他们需要的那些。
在此先感谢各位聪明人可能有的聪明见解!
Declare @DriverLat float = 41.744068
Declare @DriverLng float = -71.315024
Declare @Within int = 20
Select *
From (
Select Distinct
A.ZipCode
,A.CityName
,A.StateCode
,Miles = [dbo].[udf-Geo-Calc-Miles] (@DriverLat,@DriverLng,A.Lat,A.Lng)
From [dbo].[ZipCodes] A
Where CityType = 'D'
and ZipType = 'S'
) A
Where Miles <= @Within
Order By Miles
Returns
UDF
CREATE Function [dbo].[udf-geo-Calc-Miles] (@Lat1 float,@Lng1 float,@Lat2 Float,@Lng2 float)
Returns Float as
Begin
Declare @Miles Float = (Sin(Radians(@Lat1)) * Sin(Radians(@Lat2))) + (Cos(Radians(@Lat1)) * Cos(Radians(@Lat2)) * Cos(Radians(@Lng2) - Radians(@Lng1)))
Return Case When @Miles is null then 0 else abs((3958.75 * Atan(Sqrt(1 - power(@Miles, 2)) / @Miles))) end
End