1

我们目前有一个工作脚本来返回邮政编码/邮政编码半径范围内的所有产品列表。它搜索在@lookingfor邮政编码的@miles参数内的区号中具有位置的所有产品,同时返回距离。

PostodeLocation包含四列:城镇/城市、邮政编码 (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]
4

0 回答 0