在半径范围内寻找房屋


10

在一次采访中,我被问到以下信息:一个房地产应用程序,列出了给定距离内(例如,用户希望在20英里内找到所有房屋)当前在市场上(即待售)的所有房屋,您将如何设计应用程序(数据结构和对数)以构建此类服务?

有任何想法吗?您将如何实施?我告诉他,我不知道,因为我之前从未做过任何与地理相关的事情。

Answers:


6

他们可能在回答提及空间索引的问题之后,很可能是通过选择开箱即用的数据库来提供空间索引的,但是您可能还会提到几点,如果需要的话,它可以在应用程序本身中实现,例如,通过实现R -树(如果由于其他原因固定了数据库选择,可能会很方便?还会显示您知道空间数据库的工作原理)。空间索引可让您快速获取适合搜索框的位置子集,您可以通过计算每个对象的实际距离(如果必要,仅矩形当然就足够了)进一步细化,以进行真正的搜索圆/椭圆

考虑到距离可能在20M或更小,您可能会假设平坦的地球来计算距离,尽管您会开始看到20M端出现明显的误差,但如果准确地需要更大的距离,您还需要开始寻找更好的距离模型面向全球,例如Haversine距离

当然,还有许多其他细节可以讨论,例如UI设计,DB模式,它们本身就是整个主题


在20英里处,由于地球模型引起的误差可以忽略不计。无论如何,当用户想要查看办公室20英里范围内的房屋清单时,他不在乎结果中是否包含20英里10码的房屋。
凯文·克莱恩

1
确实,如果一些假阳性并不重要,那么您最好完全跳过实际距离计算,而只返回MBR
jk。

我很好奇的一件事是:鉴于有大量待售房屋,公司(例如Zillo之类的公司)是否将所有物品都存储在db中,而只是继续从中选择?我想这会对性能造成巨大的影响,并且用图形表示形式将其全部存储在内存中会更快得多-可能是矩阵或邻接列表,并使用距离算法来查找最近的房屋。你怎么看?
保罗·史密斯

@paulsmith我不知道,但是我强烈怀疑它在空间DB中,无论如何,空间DB可能会在内部使用图形表示(很可能是讨论的R-Tree,但是还有其他选择),关键是只能选择在最小边界矩形摆在首位的项目
JK。

8

每当您遇到这样的问题,而您根本没有问题领域的专业知识时,做几件事情是一件好事。

首先确认您在此问题领域没有专门知识。

其次,说明您将如何解决问题。

尽管我在使用地理搜索时没有特定的经验,但我相信有完善的算法和现有技术可以解决该问题。我将探索这些内容,以获得对我可用的常见解决方案的知识,并根据项目的需求选择实施方案。

第三,始终将此类问题减少到其基本组成部分。您知道地图上的位置是二维分布的。您知道,如果给定了任意的x,y坐标,则通过形成一个三角形并求解未知长度来计算到另一个坐标的每个坐标的距离。希望您也知道,如果要求您查找边界框内的所有坐标,则可以简单地通过计算要查找的框的范围并沿两个轴使用简单的大于,小于逻辑来实现。

最后,我从未聘请过似乎放弃问题的开发人员。如果我问一个问题,并且该人说“我不知道”,甚至没有尝试通过口头思考,它给我的印象是他们不会为头脑风暴会议做贡献-这对于编写软件的组织至关重要。


所有好的建议
JK。

@Ben,我绝对同意您提到的所有内容,但是由于面试官在会议开始之前明确表示可以说您不知道,所以我只是按照他的指示并事先告诉他我不知道: )
保罗·史密斯

4

这可能是显而易见的,但对于许多应用程序,穷人的慢速解决方案可能很好。

在关系数据库中有一个存储纬度和经度的表。查询所有纬度在20英里以内,经度在20英里以内的位置。这为您提供了一个边界矩形,它的大小等于最小边界矩形的大小,该矩形包含您真正要搜索的半径(并且也忽略了地球的曲率)。

然后,您将获取返回的集合(通过使用索引的查询),并使用精确的距离计算将其过滤掉。

因此,不是高效的性能,而是非常有效的开发时间。对于许多应用程序来说,这可能是一个更好的选择。


2

可能最简单的方法是使用四叉树来存储房屋的位置(假设它们分布在2D景观中)。搜索应该相当简单。

如果您使用的是基于GIS的RDBMS来存储您的东西,那么您实际上不必担心。有关主要参与者的表现的一些信息,请参见此问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.