将postgis线串与GPS日志匹配的有效方法

时间:2018-08-16 13:55:14

标签: postgresql postgis

我在一个允许用户上载GPX文件的网站上工作,该网站的邮编中存储着一个充满线串的表。这些线串是道路和小路的一部分。然后,网站从gpx文件中计算出gps日志行进的所有线串(方向很重要)。问题在于数据库中可能存在数百万个这样的线串,并且要弄清楚gps日志是否走得很昂贵,因此我需要某种方法来确定可能匹配的线串,然后再将其从数据库中拉出。 / p>

我的一个想法是将线串的第一点存储在它自己的索引列中。然后绘制一个包含整个gpx日志的框,并在该框中查找每个带有起点的线串。我认为这将允许快速搜索,但是如果gpx日志较长且沿对角线移动,则可能会创建一个巨大的框,其中大部分区域与任何gpx跟踪点都相距很远。

这个想法的一个改进是绘制了多个包含gps轨迹的小盒子。这样可以减少空白空间,但需要更多查询。

enter image description here 绿线是示例gps跟踪,红线和蓝线是查询的示例框。

我可以使用哪些方法在Postgis中快速找到可能与gps跟踪匹配的线串?

1 个答案:

答案 0 :(得分:0)

如果您正在寻找有效的方法 首先:如果没有空间索引,请创建

create index on gpstrace gist(geom);
create index on boxes gist(geom);

现在,如果您希望所有gpstrace都部分位于框中,则

select *
  from gpstrace g
 where exists (select from boxes b where st_dwithin(g.geom, b.geom,0) and b.id=1);

如果您只希望在盒子中完全使用gpstrace,那么

select *
  from gpstrace g
 where exists (select from boxes b where st_within(g.geom, b.geom) and b.id=1);