查找邮政编码10英里内的商店?

时间:2012-03-09 15:04:08

标签: c# asp.net sql-server-2008

我有一个商店列表及其邮政编码。我需要做的是当用户在网页上输入邮政编码时,它会搜索数据库,然后找到与该邮政编码最接近的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英里内的商店

2 个答案:

答案 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)