library(tidyverse)
library(leaflet)
library(sf)
<- "https://api.pdok.nl/bzk/locatieserver/search/v3_1/free?q={location}&fq=type:woonplaats&fq=bron:BAG&fl=id woonplaatsnaam weergavenaam centroide_ll&df=woonplaatsnaam&rows=100"
pdok_query_url <- "https://service.pdok.nl/brt/achtergrondkaart/wmts/v2_0/grijs/EPSG:3857/{z}/{x}/{y}.png"
pdok_map_url
<- function(map, location, fillColor) {
addLocationMarkers <- URLencode(str_glue(pdok_query_url))
url <- jsonlite::read_json(url, simplifyVector = TRUE)
res
<- bind_rows(res$response$docs) %>%
df mutate(lng = as.numeric(str_extract(centroide_ll, "[\\d\\.]+\\s")),
lat = as.numeric(str_extract(centroide_ll, "\\s[\\d\\.]+")))
<- addCircleMarkers(map, lng=df$lng, lat=df$lat, popup = df$woonplaatsnaam,
map stroke = F, radius = 5, fillOpacity = 1, fillColor = fillColor, color = fillColor)
return(map)
}
<- function(markers) {
create_map
<- leaflet() %>%
map setView(zoom=7, lng=5.4, lat=52.2) %>%
addTiles(urlTemplate = pdok_map_url,
attribution = "<a href='https://www.pdok.nl/'>PDOK</a>",
options = tileOptions(minZoom = 6, maxZoom = 18)
)
for (location in names(markers)) {
<- addLocationMarkers(map, location, markers[[location]])
map
}<- addLegend(map, position = "bottomright",
map colors = unname(unlist(markers)),
labels = names(markers),
opacity = 1)
return(map)
}
Dutch placename mapper
Inspired by British Placename Mapper, I thought I’d try to make such place name visualizations of the Netherlands myself.
The Dutch platform PDOK provides open geo-information datasets through webservices and downloads. Here, we use the location API to search for residence locations using Solr-syntax. We also use the gray background map from PDOK, and use leaflet to create interactive maps.
This allows us to create maps of common Dutch toponym patterns, such as “loo” (Germanic), “recht” (Roman) or “ga” (Frisian).
create_map(list(
"*loo OR *lo OR *le" = "blue",
"*recht OR *richt" = "green",
"*ga" = "red",
"*wolde" = "orange",
"*schot" = "black",
"*wijk" = "magenta"
))
Or places which contain river names:
create_map(list(
"*rijn*" = "red",
"*maas*" = "green",
"*lek*" = "orange",
"*ijssel*" = "blue",
"*zaan*" = "black",
"*waal*" = "magenta"
))