Estas funciones convierten una geometría ordinaria (no temporal) en la celda o el conjunto de celdas que la cubre en una resolución dada, y comprueban si una trayectoria de celdas temporales entra alguna vez en ese conjunto de celdas. La salida del conjunto de celdas junto con el predicado de intersección alguna vez forman el prefiltro espacial multiplataforma que usan las consultas portables de BerlinMOD.
Devolver la celda de una cuadrícula que contiene una geometría de punto en la resolución dada
latLngToCell(geometry,resolution integer) → h3index geoToQuadbinCell(geometry,integer) → quadbin geoToS2Cell(geography,integer) → s2cell
La geometría debe ser un POINT no vacío, su longitud y su latitud se interpretan en el SRID 4326, y la resolución está entre 0 y 15 para H3, entre 0 y 26 para QUADBIN y entre 0 y 30 para S2; cualquier otro argumento provoca un error. La forma H3 toma el nombre de la función h3_latlng_to_cell de h3-pg; QUADBIN y S2 no tienen extensión anfitriona, y sus formas conservan los nombres que les da MobilityDB.
SELECT latLngToCell(geometry 'SRID=4326;Point(4.35 50.85)', 7); -- 871fa4418ffffff SELECT geoToQuadbinCell(geometry 'SRID=4326;Point(4.35 50.85)', 10); -- 48a6227affffffff SELECT geoToS2Cell(geography 'SRID=4326;Point(4.35 50.85)', 10); -- 47c3c3
Devolver el conjunto de celdas de una cuadrícula que cubren una geometría en la resolución dada
geoToH3IndexSet(geometry,integer) → h3indexset geoToQuadbinSet(geometry,integer) → quadbinset geoToS2CellSet(geography,integer) → s2cellset
El conjunto contiene las celdas que contienen un punto de la geometría, asignado cada punto a su celda como lo asigna latLngToCell, geoToQuadbinCell o geoToS2Cell. Es el conjunto del que toma sus valores una celda temporal de una trayectoria, de modo que una prueba de conjunto de celdas sobre él nunca pierde una trayectoria que comparte un punto con la geometría. Un POINT produce una única celda, una LINESTRING las celdas por las que pasan sus segmentos, un POLYGON las de sus anillos junto con las que encierra, y los valores MULTI* / GEOMETRYCOLLECTION devuelven la unión de sus componentes. Una curva, un TIN o un TRIANGLE, por sí solos o dentro de una colección, se rechazan, ya que una cobertura que omitiera sus celdas descartaría una trayectoria que el prefiltro debe conservar. H3 recorre cada segmento de celda en celda a través de los bordes de las celdas y, para un polígono, toma las celdas que no contienen ningún punto de un anillo y cuyo centro contiene el polígono, leyéndolas hacia fuera desde las celdas de los anillos. Una tesela QUADBIN está delimitada por dos meridianos y dos paralelos, de modo que QUADBIN recorre cada segmento de tesela en tesela y rellena las filas de teselas entre las teselas del borde de un polígono. Una celda S2 está delimitada por cuatro arcos de círculos máximos, el camino que sigue un segmento geodésico, de modo que S2 recorre cada segmento de una geografía de celda en celda y lee las caras del cubo hacia abajo en la jerarquía de celdas para obtener las celdas que encierra un polígono. Esta cobertura es la que necesita un prefiltro espacial, donde la función h3_polygon_to_cells de h3-pg devuelve las celdas cuyo centro contiene un polígono, razón por la que el nombre sigue siendo el de MobilityDB.
SELECT geoToH3IndexSet(geometry 'SRID=4326;Point(4.35 50.85)', 7);
-- {"871fa4418ffffff"}
SELECT geoToQuadbinSet(geometry 'SRID=4326;Point(4.35 50.85)', 10);
-- {"48a6227affffffff"}
SELECT geoToS2CellSet(geography 'SRID=4326;Point(4.35 50.85)', 10);
-- {"47c3c3"}
Devolver si una trayectoria de celdas temporales toma alguna vez una de las celdas de un conjunto de celdas
h3indexset ?= th3index → boolean quadbinset ?= tquadbin → boolean s2cellset ?= ts2cell → boolean
Combinado con el constructor del conjunto de celdas responde si un viaje pasa alguna vez por una región sin materializar la geometría de la trayectoria, un prefiltro conservador para el eIntersects exacto. Descansa sobre un núcleo que comparten todas las cuadrículas.
SELECT geoToH3IndexSet(geometry 'SRID=4326;Point(4.35 50.85)', 7) ?= th3index '871fa4418ffffff@2001-01-01'; -- t SELECT geoToQuadbinSet(geometry 'SRID=4326;Point(4.35 50.85)', 10) ?= tquadbin '48a6227affffffff@2001-01-01'; -- t SELECT geoToS2CellSet(geography 'SRID=4326;Point(4.35 50.85)', 10) ?= ts2cell '47c3c3@2001-01-01'; -- t