Во-первых, вам понадобится широта / долгота каждого почтового индекса и сохраните их в таблице вместе с геопространственным представлением (тип данных GEOGRAPHY или GEOMETRY).Когда пользователь вводит почтовый индекс, вы можете посмотреть этот почтовый индекс в своей базе данных, чтобы найти его местоположение.
Вам также нужно будет сохранить представление GEOGRAPHY / GEOMETRY для каждого из магазинов/ lons у вас сейчас есть.
Исходя из этого, вы можете использовать все геопространственные функции SQL Server для выполнения геопространственных поисков.
Я сделал доступным GitHub aПриложение .NET, которое будет импортировать бесплатный набор данных почтовых индексов Ordnance Survey (все почтовые индексы в ГБ) в SQL Server, преобразовывая все предоставленные им восточные и северные направления в широты и долготы, а затем создавая столбец географии.У меня есть полное сообщение в блоге по этому вопросу здесь .Конечный результат будет использоваться так:
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
Надеюсь, это будет хорошей отправной точкой.