Clustering van bushaltes in QGis met postgis

Bushaltes bevinden zich vaak in paren, aan beide zijden van de weg. Op een kaart is het vaak beter om daar één symbool met één label van te maken. Dat kan met postgis en de DBManager in Qgis.

Soms ook gaat het om meer dan 2 bushaltes met dezelfde namen. Kijk hieronder naar het plein voor NS-treinstation Zwolle. Het wemelt van de bushaltes.

bushalte noncentroids

Beter zou zijn om haltes met dezelfde naam te clusteren. Dat kan door een laag aan te maken in de DBManager van Qgis. Niet in de Postgresql  database zelf! Het is beter een laag met de sql-code te koppelen, omdat de st_makeenveloppe functie 4 waarden heeft, corresponderend met de kaartextent, die per project verschillen. Het gaat om de volgende SQL-code:

select name, st_centroid(st_union(way)) as waygeom
from planet_osm_point
where way && ST_MakeEnvelope(202248, 501898, 205180, 504072, 28992) and highway = 'bus_stop'
group by name;

De st_union wordt gedaan met behulp van de group by functie, waarbij records worden samengevoegd tot multipoints, gebaseerd op dezelfde naam.

P.S. De ST_MakeEnveloppe functie beperkt het samenvoegen op naam tot de extent van de kaart in Qgis. Immers, een bushalte met ‘Markt’ als naam kan overal in Nederland voorkomen en tot vreemde centroids leiden.

Daarna doet de st_centroid functie de multipoints weer tot één punt smelten. Het resultaat, zie hieronder. Een stuk mooier.

bushalte centroids

Ook een gewoon bushalten’paar’ oogt beter als één symbool. Zie het verschil hieronder.

bushalte noncentroids bushalte centroids