No se trata de un duplicado de la sección " Contar puntos en un polígono con Postgis ", ya que en el ST_Contains(geometry geomA, geometry geomB), este caso tiene dos geometrías (start_geom y end_geom) en geomB, mientras que la otra pregunta es sobre una sola geometría.
Tabla de polígonos de entrada us_county:
Column | Type | Modifiers
----------+-----------------------------+--------------------------------
gid | integer | not null default nextval('us_county_gid_seq'::regclass)
statefp | character varying(2) | |
geoid | character varying(5) |
name | character varying(100) |
geom | geometry(MultiPolygon,4269) |
Viajes de la tabla de puntos de entrada:
Column | Type | Modifiers
--------------+----------------------+-----------------------------------
id | integer |
gid | integer | not null default nextval('trips_gid_seq'::regclass)
start_geom | geometry(Point,4326) |
end_geom | geometry(Point,4326) |
Quiero utilizar para comprobar si un polígono en us_county podría contener tanto start_geom y end_geom de un viaje puntos.
He probado las siguientes consultas:
1. esta consulta devuelve un resultado vacío, lo que no es correcto
select us_county.name, count(trips.gid)
from trips, us_county
where st_contains(us_county.geom, trips.start_geom) and
st_contains(us_county.geom, trips.end_geom)
group by us_county.name;
2. una segunda idea es utilizar la función ST_Collect():
select us_county.name, count(trips.gid)
from trips, us_county
where st_contains(ST_Transform(us_county.geom, 4326),
ST_Collect(trips.start_geom, trips.end_geom))
Group by us_county.name;
Pero esto resulta ser muy lento, para 3k polígonos y 50k puntos, la consulta se ejecuta más de 40min.