Как я могу адаптировать свой поиск по радиусу по почтовому индексу / почтовому индексу к поиску по радиусу по городам? - PullRequest
1 голос
/ 29 октября 2019

В настоящее время у нас есть рабочий скрипт, который возвращает список всех наших продуктов в радиусе почтового индекса / почтового индекса. Он ищет все продукты, которые имеют местоположения в кодах регионов в параметре @ miles почтового индекса @ lookingfor , а также возвращает расстояние.

Расположение PostodeLocation *Таблица 1008 * содержит четыре столбца: ссылки на город / город, почтовый индекс (pcd) и северную (grn) и восточную (gre) ссылки. Первичный ключ указан в почтовом индексе.

Проблема в том, что я не знаю центра каждого города или почтовых индексов для внешнего радиуса каждого города. Я не могу адаптировать сценарий, чтобы дать мне все продукты в местах в радиусе города или даже от центра города.

Кто-нибудь еще сталкивался с этим требованием и нашел решение? Я ищу технику, которая больше, чем фактическое требование кода.

Текущий скрипт:

declare @lookingfor nvarchar(10) = 'sw1a 1aa'
declare @miles int = 5
DECLARE @UserCoordX bigint
DECLARE @UserCoordY bigint
SELECT    @UserCoordX = GRE
        , @UserCoordY = GRN
FROM MyCompany.dbo.PostcodeLocations pcls
WHERE pcls.PCD = @lookingfor
select pcls.PCD
    , p.ProdName
    , sqrt((((pcls.GRE - @UserCoordX) * (pcls.GRE - @UserCoordX)) + ((pcls.GRN - @UserCoordY) * (pcls.GRN - @UserCoordY)))/(160.9334*160.9334)) as Distance
from MyCompany.dbo.pcls_disk pcls
inner join MyCompany.dbo.Loc l on l.Postcode = pcls.pcd
inner join MyCompany.dbo.X_ProdLoc xpl on xpl.LocId = l.LocId
inner join MyCompany.dbo.Prod p on p.ProdId = xpl.ProdId
where p.StatusId = 4 and p.HideFromSearch = 0
and ((pcls.GRE - @UserCoordX) * (pcls.GRE - @UserCoordX)) + ((pcls.GRN - @UserCoordY) * (pcls.GRN - @UserCoordY)) 
        <= cast(@Miles * 160.9334 * @Miles * 160.9334 as bigint)
order by [Distance]
...