启动该应用程序后,我想在我的位置显示附近(10公里)的餐馆,并将这些餐馆作为经度和纬度保存在数据库(SQL Server)中。
例如:餐厅桌
restaurantId
,name
,longitude
,latitude
1
,Greek Restaurant
,-72.374984
,41.274672
2
,Italian Restaurant
,-73.483947
,40.739283
...
假设我的位置是
longitude
:-74.009056
latitude
:40.713744
,如果只能使用sql来解决,我将使用存储过程,将这些值作为参数以及附近的距离(以km(10 km)为单位)传递(@myLongitude
,@myLatitude
,{{ 1}})。
或者如果可以使用角度解决此问题,我将调用餐厅表中的所有数据并进行计算以将其分类。
这些是我的基本假设,但不确定是否可行。 如何根据数据库中保存的lng和lat检索附近的餐馆(10公里)?
不需要地图,我只想将其列为清单。最好知道每家餐厅离我的位置有多远(以公里为单位)。
感谢您的帮助,非常感谢代码段!
答案 0 :(得分:1)
我建议使用Geography data type代替纬度和经度。请参阅以下演示
--this is your table
CREATE TABLE Landmark (
Id int,
Name VARCHAR(100),
Latitude FLOAT,
Longitude FLOAT
)
INSERT Landmark VALUES
(1, 'Greek Restaurant', -72.374984, 41.274672),
(2, 'Italian Restaurant', -73.483947, 40.739283)
--this is better table to query
WITH GeographyLandmark AS
(
SELECT Id, Name, geography::STPointFromText('POINT(' + CAST(Latitude AS VARCHAR(20)) + ' ' + CAST(Longitude AS VARCHAR(20)) + ')', 4326) Location
FROM LandMark
)
--this query calculates distance between point and localizations in meters
SELECT Id, Name,
geography::STPointFromText('POINT(' + CAST(-74.009056 AS VARCHAR(20)) + ' ' + CAST(40.713744 AS VARCHAR(20)) + ')', 4326).STDistance(Location) Distance
FROM GeographyLandmark
结果:
Id Name Distance
----- -------------------- ----------------
1 Greek Restaurant 150944,610588657
2 Italian Restaurant 44456,82536079