duckdb
, we can download all places within our defined bounding box of 50.832939, 4.337368, 50.858410, 4.369812
. The code below is based on an example from the Overture Maps website:-- Load necessary modules
LOAD spatial;
LOAD httpfs;
-- Set the AWS S3 region
SET s3_region = 'us-west-2';
-- Copy the filtered data from S3 to a local Parquet file
COPY (
SELECT
id,
names,
categories,
websites,
addresses,
ST_GeomFromWKB(geometry)
FROM
read_parquet('s3://overturemaps-us-west-2/release/2024-07-22.0/theme=places/*/*')
WHERE
-- Filter by bounding box (xmin and ymin)
bbox.xmin BETWEEN 4.337368 AND 4.369812 AND
bbox.ymin BETWEEN 50.832939 AND 50.858410
) TO 'vijfhoek.parquet';
Next, we can query all the places where the primary category is "breakfast_and_brunch_restaurant"
:
SELECT
names.primary AS name,
addresses[1].freeform AS address,
websites[1] AS website
FROM
'vijfhoek.parquet'
WHERE
categories.primary = 'breakfast_and_brunch_restaurant';
┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ name │ address │ website │
│ varchar │ varchar │ varchar │
├──────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ Flower food │ Rue Blaes 264 │ │
│ Le Père Tranquille │ Rue des Renards 4 │ │
│ Brussels Waffle Workshop │ Rue des Foulons 30 │ http://www.waffleworkshop.com │
│ Woodpecker 20 │ Rue Jourdan 20 │ │
│ EatClub Brussels │ Rue de Stassart 18 │ │
│ Café Boudin │ Rue Ravenstein 20 │ https://cafeboudin.be │
│ bloom_and_brunch_by_sabri │ Rue de la Paix 7 │ │
│ Lastra │ Rue du Conseil 24 │ │
│ Le Coin Des Saveurs │ Boulevard de l'Abattoir 19 │ │
│ Kandinsky │ Chaussée de Gand 37 │ https://kandinsky-family.be/ │
│ Restaurant Baurade │ Boulevard Anspach 153 │ │
│ Kafei Dansaert │ Rue Antoine Dansaert 57 │ https://kafei.be │
│ Le Odin Royal │ Oude Graanmarkt 2 │ │
│ Movenpick │ │ │
│ Woodpecker St. Cath. │ Quai au Bois à Brûler 27 │ │
│ Restaurant Al Andalus │ Rue de Ribaucourt 4 │ │
│ Gaufres and Waffles │ Chemin du Croquet 1 │ http://www.gaufresandwaffles.com │
│ Oats Day Long │ Europakruispunt 3 │ https://www.oatsdaylong.com │
│ Belrose cake │ Boulevard Émile Jacqmain 3 │ https://www.belrosecake.com/ │
│ Spread the moon │ Rue du Gentilhomme 13 │ https://www.instagram.com/spreadthemoon/ │
│ Longitude Nord-Sud │ Quai aux Pierres de Taille 14 │ http://longitude.blog4ever.com/ │
├──────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 21 rows 3 columns │
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
This is a good start, but lots of places we already visited are still missing from this list. We can query for all places where 'breakfast_and_brunch_restaurant'
is listed under alternate categories using OR 'breakfast_and_brunch_restaurant' = ANY (categories.alternate);
.
I’m planning to pick this idea up later, and check if I can find a way to include more breakfast and brunch spots. In a next step, I could attempt to scrape the provided websites to check menus for our usual order.