计算列表是不是在数据库值的“范围内”
Posted
技术标签:
【中文标题】计算列表是不是在数据库值的“范围内”【英文标题】:Calculate if listing is 'in range' from database values计算列表是否在数据库值的“范围内” 【发布时间】:2013-07-30 16:18:11 【问题描述】:首先我为标题道歉!想不出怎么形容了!
我有一个数据库,其中包含英国的所有区号及其平均纬度和经度。现在我希望能够计算出哪些区号与另一个区号相距 'n' 英里。
我尝试在我的本地主机上运行大量计算以计算出所有距离并将它们存储在一个庞大的数据库中,所以我所要做的就是稍后查找距离,但内存不足,我'我想知道这是否是最好的方法?我是否忽略了一种简单的即时计算方法?
所以为了清楚起见,我希望人们能够输入区号和以英里为单位的范围,然后获取该范围内的所有区号。 我可用的信息是一个包含以下字段的数据库:
|邮编_ID |代码 |网格_N |网格_E |纬度 |经度 |
【问题讨论】:
看看:***.com/q/407989/2493918 @MarkusHofmann 我可以计算出距离,但是计算出范围内的区号需要很长时间才能计算出来! 请看这个答案***.com/questions/8599200/… 你读过Haversine Formula了吗? @MarkusHofmann 是的,这就是我正在使用的公式,哦,我刚刚意识到可以重新排列它以使其对我拥有的数据库更好!好的,我会拿我的本子和笔来做一些数学运算,看看它会导致什么。我有一种感觉我应该能够减少它像if( ((lat1 - lat2) - (long1-long2)) < val ) include in results
?
【参考方案1】:
有几种方法可以实现你想要的。
查看“HaversineFormula”进行距离计算
在 google 上查看 Google Maps API examples,因为这些可以提供有关如何解决问题的见解
要存储我建议使用PostgreSQL Database 和PostGIS 一起使用
关于 PostGIS (引自网站):
PostGIS 是 PostgreSQL 对象关系数据库的空间数据库扩展器。它增加了对地理对象的支持允许位置查询在 SQL 中运行。
如果您能够使用上述设置,则使用 db 数据会更容易。
这也可能有用:
php Postal (Zip) Code Range and Distance Calculation
把你的眼睛翻过来,让我知道你的想法。
祝你好运。
【讨论】:
我也发现了这个:dougv.com/2009/03/27/… 非常感谢,我将探索所有这些路线,我对PostgreSQL数据库特别感兴趣,我以前从未听说过类似的东西!我目前正在阅读您评论的链接,我看到他们如何设法优化它很聪明! 我已经设法解决了我正在运行的脚本上的内存问题,以使用预先计算的值创建一个完整的数据库。如果保持目前的速度,它将需要一天多的时间才能完成!如果索引正确,您认为拥有这个数据库会是一个好主意吗?它应该比每次计算距离都要快,还是我错了? (完成后,表中将少 4,000,000 条记录) 如果您能够保存处理后的数据,它肯定会提高整体性能。尝试尽可能多地进行预处理。使用 cronjobs/tabs 进行常规后台处理,并尽可能少地进行“按需”(根据用户请求)处理。因此,请在用户创建新搜索后尝试保存处理后的搜索结果(以英里为单位等)。数据库应该能够处理这么多的数据,但这取决于硬件设置的速度和空间。【参考方案2】:How to calculate distance from lat/long in php?这里已经回答了一个类似的问题
您需要计算给定距离的半径,并确定哪些额外的邮政编码位于圆内。
【讨论】:
以上是关于计算列表是不是在数据库值的“范围内”的主要内容,如果未能解决你的问题,请参考以下文章