Name

ST_HexagonGrid — Returnerar en uppsättning hexagoner och cellindex som helt täcker gränserna för geometriargumentet.

Synopsis

setof record ST_HexagonGrid(float8 size, geometry bounds);

Beskrivning

Börjar med konceptet med en hexagonbeläggning av planet. (Inte en hexagonbeläggning av jordklotet, detta är inte H3-beläggningsschemat.) För en given plan SRS och en given kantstorlek, med början vid SRS:ens ursprung, finns det en unik hexagonbeläggning av planet, Tiling(SRS, Size). Denna funktion svarar på frågan: vilka hexagoner i en given Tiling(SRS, Size) överlappar med en given gräns.

SRS för utdatahexagonerna är den SRS som tillhandahålls av begränsningsgeometrin.

Om man dubblar eller tripplar hexagonens kantstorlek genereras en ny parent tiling som passar med origin tilingen. Tyvärr är det inte möjligt att generera överordnade hexagonbeläggningar som barnbeläggningarna passar perfekt i.

Tillgänglighet: 3.1.0

Exempel: Räkna punkter i hexagoner

För att göra en punktsammanfattning mot ett hexagonalt rutnät genererar du ett hexagonalt rutnät med punkternas utsträckning som gränser och ansluter sedan spatialt till det rutnätet.

SELECT COUNT(*), hexes.geom
FROM
    ST_HexagonGrid(
        10000,
        ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857)
    ) AS hexes
    INNER JOIN
    pointtable AS pts
    ON ST_Intersects(pts.geom, hexes.geom)
GROUP BY hexes.geom;

Exempel: Generering av hex-täckning av polygoner

Om vi genererar en uppsättning hexagoner för varje polygongräns och filtrerar bort dem som inte korsar deras hexagoner, får vi till slut en tiling för varje polygon.

När stater läggs i plattor blir resultatet att varje stat täcks av en hexagon och att flera hexagoner överlappar varandra vid gränserna mellan staterna.

[Note]

Nyckelordet LATERAL är underförstått för set-returning-funktioner när man hänvisar till en tidigare tabell i FROM-listan. Så CROSS JOIN LATERAL, CROSS JOIN eller helt enkelt , är likvärdiga constructs för det här exemplet.

SELECT admin1.gid, hex.geom
FROM
    admin1
    CROSS JOIN
    ST_HexagonGrid(100000, admin1.geom) AS hex
WHERE
    adm0_a3 = 'USA'
    AND
    ST_Intersects(admin1.geom, hex.geom)