我知道如果你想要真正快速的结果,我知道它不是最快的,因为我从谷歌找到了这篇文章,我想我会添加我不久前以存储过程的形式使用的 SQL 解决方案。它查找靠近 a 坐标的位置并按距离返回它们。
我希望它可以帮助某人:)
CREATE PROCEDURE [dbo].[getstores] @lat float, @lng float AS
DECLARE @radius float, @DegToRad float
SET @DegToRad = 57.29577951
SET @radius = 25000
SELECT TOP 10
name
,sto_lat
,sto_lng
,postcode
,ROUND((ACOS((SIN(@lat/57.2958) * SIN(sto_lat/@DegToRad)) +(COS(@lat/@DegToRad) * COS(sto_lat/@DegToRad) *COS(sto_lng/@DegToRad - @lng/@DegToRad))))* 6387.7, 2) AS distance
FROM store
WHERE (sto_lat >= @lat - (@radius/111))
And (sto_lat <= @lat + (@radius/111))
AND (sto_lng >= @lng - (@radius/111))
AND (sto_lng <= @lng + (@radius/111))
AND (
ISNUMERIC(sto_lat) = 1
AND
ISNUMERIC(sto_lat) = 1
)
ORDER BY distance
注意:我已经说过这不是解决这个问题的最佳解决方案,可能只是对于像我这样在谷歌上发现这个问题的人