空间查询对数据的距离限制

时间:2014-09-17 22:29:38

标签: database-design solr geolocation geospatial spatial

我正在构建具有地理位置功能的应用。我目前只关注存储和查询数据的最佳方式。 这是我常用的用例。

人物A添加带有地理位置的图像。除了地理位置数据,他/她还添加了标记,表示他/她的图像仅对1英里范围内的用户可见。

现在,我的问题是,存储此信息的最佳方式是什么,以便其他人可以看到他当前位置附近的所有图像,同时尊重所存储图像的限制,例如:仅可见1英里,仅可见2英里等。

1 个答案:

答案 0 :(得分:0)

Solr具有地理空间搜索功能(最近通过Java拓扑套件库进行了大幅增强)。 Solr documentation有一个使用距离过滤器的例子,它允许你找到某个距离为某点的任何东西,例如,

&q=*:*&fq={!geofilt sfield=location}&pt=41.38,2.18&d=5

其中q是搜索的非地理空间部分,sfield是你的位置字段,pt是点(必须在lat / lon中,在上例中是Barcelona),d是距离字段。您可以用您的属性替换d参数可以看到图像的距离。

注意还有geodist功能,如果你想要突出显示更接近的东西,它允许你按距离排序。

您可以使用的另一种方法是使用空间数据库并将位置数据存储为点域。作为Postgres / Postgis的一个例子,您可以使用http://postgis.net/docs/ST_DWithin.html功能,它允许您搜索某个距离内的所有内容。 Postgres / GIS使用spatial indexing的R树索引,可以非常快速有效地搜索这种性质。它还具有良好的属性部分全文搜索功能。

select * from images where ST_DWithin( point, st_setsrid(st_makepoint(2.1, 41.38), 4326), 5);

您可以使用Oracle和SQL Server进行类似的操作(在较小程度上使用MySQL)。这种方法可能看起来比Solr方法更复杂,如果你坚持在lat / lon中进行搜索,在这一点的距离d内给出我所有匹配此属性的图像,那么SOLR肯定会做你想要的,但是如果你想要的话要考虑将来更高级的空间功能,并利用其他数据库功能,您可能需要考虑空间数据库方法。

相关问题