计算服务面积的最有效方法 Asp.net + SQL Server

Posted

技术标签:

【中文标题】计算服务面积的最有效方法 Asp.net + SQL Server【英文标题】:Most Efficent Way to Calculate Areas Serviced Asp.net + SQL Server 【发布时间】:2011-09-18 02:36:54 【问题描述】:

我正在构建一个包含公司数据库的网页。

每家公司都可以服务于其仓库给定距离内的区域。 例如,1 家公司可能服务于 200 公里外的邮政编码 4214。

我希望至少获得大约 1000 家公司。

现在我遇到的问题是我正在尝试建立一个在线目录并让客户在他们的邮政编码中搜索一家公司。

为了避免数据库遍历每家公司,并计算给定的邮政编码是否在其服务区域内。我创建了一个名为 服务区域。那只有一个 ID、Suburb ID、CompanyID

当公司注册时,他们会说邮政编码和旅行距离。然后网页计算给定距离内的所有郊区ID并将其添加到数据库中。然后,当客户搜索给定的邮政编码时,它只需要导出郊区 id 并在 areaserviced 数据库中进行搜索。

我遇到的问题是,如果我有 1000 个客户,这个 areaserviced 表将有数百万行长..

会有问题吗?

有没有更有效的方法?


针对所提供的答案:


我刚刚实现了一个工作正常的新地理表。

然而我才意识到..

如果每家公司都有他们服务的区域(转换为长/纬度的邮政编码)和距离(例如 200 公里)

现在,当客户搜索在某个区域内提供服务的公司时。数据库仍然需要遍历每家公司,计算他们服务的领域。然后继续?

这是最有效的方法吗?还是我应该坚持使用包含他们服务的所有区域的数据库,这样当客户使用特定邮政编码进行搜索时,我只会在该表中查询该邮政编码?


我可能已经解决了:

   declare @p geography;
   set @p = (select coordinates from geolookup where geoid = 3714);

   select * from Depots 
   join geolookup on geolookup.geoid = depots.suburbID
   where geolookup.coordinates.STDistance(@p)<= depots.DistanceTravelled

【问题讨论】:

【参考方案1】:

只需将公司覆盖的圆心的地理坐标保存在地理数据类型中即可。

然后,您可以通过在 WHERE 子句中使用 STWithin 传递单个纬度来有效地查询附近的所有服务位置。

Selecting geographical points within area

这样,您将拥有每家公司的一条记录,并且您不必计算和插入公司涵盖的所有郊区。

【讨论】:

谢谢。我真的推迟将我的数据库更改为地理数据类型(我最近才发现它)但你现在给了我一个足够好的理由来进行更改:) 干杯!

以上是关于计算服务面积的最有效方法 Asp.net + SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.net 中将 BMP 转换为 PDF 的最简单方法是啥

确定页面在 JavaScript 中是不是有效 - ASP.NET

连接 ASP.NET 3.5 Web 应用程序和 SQL Server 数据库的最安全方法是啥?

通过 ASP.NET Web API 有效地使用 async/await

保持 ASP.NET 会话打开/活动

计算熊猫中出现次数的最有效方法是啥?