查找距离邮政编码10英里以内的商店



我有一个带有邮政编码的商店列表。我需要做的是,当用户在网页上键入邮政编码时,它会搜索数据库,然后找到最接近该邮政编码的10。

我拥有的数据示例:

ID  = 1
Store =Halfords 
Address 1 =Unit 6b
Address 2 = Braidfute Retail Park   
Address 3   = Lanark    
Address 4 =South Lanarkshire
Postal Code = ML11 9AE
Lat = 55.6711692810059
Long = -3.77314400672913

我可以将邮政编码转换为经度和纬度,我需要运行什么查询才能在这条线的ym表中找到10英里内的商店

首先,您需要每个邮政编码的纬度/经度,并将这些纬度/经度与地理空间表示(GEOGRAPH或GEOMETRY数据类型)一起存储在表中。当用户输入邮政编码时,您可以在数据库中查找该邮政编码以查找其位置。

您还需要存储您当前拥有的每个存储lat/lon的GEOGRAPHIC/GEOMETRY表示。

基于此,您可以使用SQL Server的所有地理空间功能来执行地理空间搜索。

我在GitHub上提供了一个.NET应用程序,该应用程序将免费的军械调查局邮政编码数据集(所有邮政编码均为GB)导入SQL Server,将其提供的所有东/北转换为lat/lon,然后创建一个地理列。我在这里有一篇完整的博客文章。最终结果是这样使用的:

DECLARE @home GEOGRAPHY
SELECT @home = GeoLocation 
FROM dbo.PostCodeData 
WHERE OutwardCode = 'AB12' AND InwardCode = '3CD' -- Postcode entered by user
-- find all stores within 10 miles of the entered postcode
SELECT *
FROM dbo.Stores
WHERE GeoLocation.STDistance(@home) <= (10 * 1609) -- 1609 = approx metres in 1 mile

希望这将是一个良好的起点。

您需要从SQL Server中的地理空间功能开始。

最新更新