我有一个商店列表及其邮政编码。我需要做的是当用户在网页上输入邮政编码时,它会搜索数据库,然后找到与该邮政编码最接近的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英里内的商店
答案 0 :(得分:7)
首先,您需要每个邮政编码的纬度/经度,并将它们与地理空间表示(GEOGRAPHY或GEOMETRY数据类型)一起存储在表格中。当用户输入邮政编码时,您可以在数据库中查找该邮政编码以找到它的位置。
您还需要存储您当前拥有的每个商店的地理位置/地理位置表示。
基于此,您可以使用所有SQL Server的地理空间功能来执行地理空间搜索。
我已经在GitHub上提供了一个.NET应用程序,它将免费的Ordnance Survey邮政编码数据集(所有邮政编码以GB为单位)导入SQL Server,将其提供的所有Eastings / Northings转换为lat / lon然后创建地理列。我在here上发了一篇完整的博客文章。最终结果将如下使用:
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
希望这将是一个很好的起点。
答案 1 :(得分:1)