我在一个允许用户上载GPX文件的网站上工作,该网站的邮编中存储着一个充满线串的表。这些线串是道路和小路的一部分。然后,网站从gpx文件中计算出gps日志行进的所有线串(方向很重要)。问题在于数据库中可能存在数百万个这样的线串,并且要弄清楚gps日志是否走得很昂贵,因此我需要某种方法来确定可能匹配的线串,然后再将其从数据库中拉出。 / p>
我的一个想法是将线串的第一点存储在它自己的索引列中。然后绘制一个包含整个gpx日志的框,并在该框中查找每个带有起点的线串。我认为这将允许快速搜索,但是如果gpx日志较长且沿对角线移动,则可能会创建一个巨大的框,其中大部分区域与任何gpx跟踪点都相距很远。
这个想法的一个改进是绘制了多个包含gps轨迹的小盒子。这样可以减少空白空间,但需要更多查询。
我可以使用哪些方法在Postgis中快速找到可能与gps跟踪匹配的线串?
答案 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);