Sql server 根据数据库中保存的经度和纬度显示附近的位置。角度6+;sql server

Sql server 根据数据库中保存的经度和纬度显示附近的位置。角度6+;sql server,sql-server,stored-procedures,angular6,distance,Sql Server,Stored Procedures,Angular6,Distance,当应用程序启动时,我希望显示距离我所在位置10公里的附近餐馆,这些餐馆将作为经度和纬度保存在数据库(SQL Server)中 例:餐厅餐桌 餐厅,名称,经度,纬度 1,希腊餐厅,-72.374984,41.274672 2,意大利餐厅,-73.483947,40.739283 假设我的位置是 经度:-74.009056 纬度:40.713744 如果只使用sql就可以解决这个问题,我将使用存储过程,通过将这些值作为参数传递,以及附近以km(10 km)为单位的值(@mylongite,@myL

当应用程序启动时,我希望显示距离我所在位置10公里的附近餐馆,这些餐馆将作为经度和纬度保存在数据库(SQL Server)中

例:餐厅餐桌

餐厅
名称
经度
纬度

1
希腊餐厅
-72.374984
41.274672

2
意大利餐厅
-73.483947
40.739283

假设我的位置是

经度:-74.009056

纬度
:40.713744

如果只使用sql就可以解决这个问题,我将使用存储过程,通过将这些值作为参数传递,以及附近以km(10 km)为单位的值(
@mylongite
@myLatitude
@km

或者,如果可以用angular解决这个问题,我会调用餐厅表中的所有数据,并进行计算,以对它们进行排序

这些是我的基本假设,但不确定它是否可行。 如何根据数据库中保存的lng和lat检索附近的餐厅(10公里)

不需要地图,我只想把它列成一张单子。最好知道每家餐厅离我的位置有多远(以公里为单位)

感谢您的帮助,非常感谢代码片段

我建议使用,而不是纬度和经度。请参阅下面的演示

--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

参考资料:,

谢谢您的回答。此查询是否可以取附近的值(10km)?从
Distance
ex:first row的
15106428
9630214
中我应该使用哪一个?第一个是指它离我的位置有多远,以米为单位吗?我切换了纬度和经度,这是我的错误。值444568256079表示意大利餐厅为44456.825。。。距离给定点44.456852…公里。谢谢。我发布了另一个关于错误的帖子,请帮助。