根据数据库中保存的经度和纬度显示附近的地点。 angular6 + sql服务器

时间:2018-09-07 07:59:44

标签: sql-server stored-procedures angular6 distance

启动该应用程序后,我想在我的位置显示附近(10公里)的餐馆,并将这些餐馆作为经度和纬度保存在数据库(SQL Server)中。

例如:餐厅桌

restaurantIdnamelongitudelatitude

1Greek Restaurant-72.37498441.274672

2Italian Restaurant-73.48394740.739283

...

假设我的位置是

longitude:-74.009056

latitude:40.713744

,如果只能使用sql来解决,我将使用存储过程,将这些值作为参数以及附近的距离(以km(10 km)为单位)传递(@myLongitude@myLatitude,{{ 1}})。

或者如果可以使用角度解决此问题,我将调用餐厅表中的所有数据并进行计算以将其分类。

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

不需要地图,我只想将其列为清单。最好知道每家餐厅离我的位置有多远(以公里为单位)。

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

1 个答案:

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

引用:STDistanceSTPointFromText