Hallo zusammen,
evtl. bin ich hier besser aufgehoben…
Ich habe zwei Tabellen, in der einen stehen nur Punkte und in der anderen nur LineStrings.
Ich möchte jetzt herrausfinden welche der Punkte sich auf bzw. um einen Linestring befinden, dazu folgender Query:
Beide Tables haben entsprechnde Spatiale Indices und die Geometrien den gleichen SRID.
SELECT ST_AsBinary(point_geom) AS pos, oid, from
point_table WHERE ST_DWithin(point_geom,(SELECT line_geom from line_table where oid = 2) ,5e-05);
Dieser Query dauer sehr lange weil anscheinden ST_DWithin nicht den Index benutzt sondern einen Seq Scan macht:
Explain Analyse:
"Seq Scan on point_table (cost=10000000008.36..10008263148.53 rows=8526374 width=204) (actual time=3861.012..176210.108 rows=28 loops=1)"
" Filter: st_dwithin(point_geom, $0, 5e-05::double precision)"
" InitPlan 1 (returns $0)"
" -> Index Scan line_table_w_pk on line_table (cost=0.00..8.36 rows=1 width=847) (actual time=0.025..0.027 rows=1 loops=1)"
" Index Cond: (oid = 2)"
"Total runtime: 176212.919 ms"
Wenn ich die Geometry per Hand eintrage also :
SELECT ST_AsBinary(point_geom) AS fcd_pos, oid, from
point_table WHERE ST_DWithin(fcd_pos,(ST_GeomFromText(LineString('.....') ,5e-05);
dann sind die Daten in ein paar Milisekunden da…
Kann mir jemand Helfen ST_Widthin dazu zu bringen den Spatial Index zu nutzen!?