根据数据库中保存的经度和纬度显示附近的地方。 angular6 + sql 服务器
show nearby places based on saved longitude and latitude in database. angular6 + sql server
当应用程序启动时,我想显示距离我所在位置附近(10 公里)的餐馆,这些餐馆作为经度和纬度保存在数据库(SQL 服务器)中。
例如:餐厅 table
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 就可以解决这个问题,我会使用存储过程,将这些值作为参数传递,连同以公里为单位的附近值(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
当应用程序启动时,我想显示距离我所在位置附近(10 公里)的餐馆,这些餐馆作为经度和纬度保存在数据库(SQL 服务器)中。
例如:餐厅 table
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 就可以解决这个问题,我会使用存储过程,将这些值作为参数传递,连同以公里为单位的附近值(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