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

show nearby places based on saved longitude and latitude in database. angular6 + sql server

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

例如:餐厅 table

restaurantIdnamelongitudelatitude

1Greek Restaurant-72.37498441.274672

2, Italian Restaurant, -73.483947, 40.739283

...

假设我的位置是

longitude: -74.009056

latitude: 40.713744

如果仅使用 sql 就可以解决这个问题,我会使用存储过程,将这些值作为参数传递,连同以公里为单位的附近值(10 公里)(@myLongitude@myLatitude, @km).

或者如果这可以使用 angular 解决,我会调用餐厅 table 的所有数据并进行计算以将它们分类。

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

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

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

我建议使用 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

参考文献:STDistance, STPointFromText