---
title: "Places and geo data integration · RUAL Documentation"
description: "Use Places and geo data in RUAL blueprints. Search the built-in places dataset by proximity, category and filters, and do coordinate maths."
canonical: https://docs.rual.nl/integrations/places
language: en
---

# Places and geo data

Search the built-in places dataset by proximity, category and filters, and do coordinate maths.

## Guides

- [Places and Geo Search](https://docs.rual.nl/blueprints/places)

- [Location Blocks](https://docs.rual.nl/reference/location-blocks)

## Blocks

Add these blocks on the canvas by searching for their name. Each block page lists its pins and how it behaves.

- [if `geo_point_branch`](https://docs.rual.nl/block-types/geopoint/geo_point_branch)

- [cast to object `geo_point_convert_to_object` Converts a geopoint object type to an object type](https://docs.rual.nl/block-types/geopoint/geo_point_convert_to_object)

- [compute destination point `geo_point_destination_point` Generates a new geo point from origin based on meters and bearing](https://docs.rual.nl/block-types/geopoint/geo_point_destination_point)

- [from city `geo_point_from_city` Resolves a city/town name (optionally constrained to a country code, e.g. NL, and a province/state, e.g. Vermont) to a geo point at the city centre, plus the city's radius in metres and its province/country. Offline lookup against the embedded dataset. A city name is not unique within a country : eight US states have a Morristown : so wire province whenever you know it, for example straight from geo point reverse geocode.](https://docs.rual.nl/block-types/geopoint/geo_point_from_city)

- [land cover `geo_point_land_cover` Resolves a geo point to a terrain / land-cover type (urban, agricultural, forest, grassland, wetland, water, bare, coastal). Offline raster lookup (Benelux, simplified CORINE).](https://docs.rual.nl/block-types/geopoint/geo_point_land_cover)

- [create `geo_point_lat_lng_to_point` Generates a geo point based on the given latitude and longitude](https://docs.rual.nl/block-types/geopoint/geo_point_lat_lng_to_point)

- [is nearby `geo_point_nearby` Checks whether a road or railway is within a given distance of a geo point, and returns the nearest point on it. Offline lookup against the road/rail network (Benelux, OpenStreetMap).](https://docs.rual.nl/block-types/geopoint/geo_point_nearby)

- [generate random in radius `geo_point_random_in_radius` Generates a random geo point based on the given radius](https://docs.rual.nl/block-types/geopoint/geo_point_random_in_radius)

- [reverse geocode `geo_point_reverse_geocode` Resolves a geo point to the nearest street, city, province and country. City/province/country are nearest-populated-place, and always stay in the country of the nearest known place : a point near a border is never relabelled with a larger city on the other side. Street is the nearest named road (needs the road network loaded).](https://docs.rual.nl/block-types/geopoint/geo_point_reverse_geocode)

- [snap to network `geo_point_snap` Snaps a geo point onto the nearest road or railway (road/track pinning). Outputs the snapped point and how far it moved. Offline lookup against the road/rail network (Benelux, OpenStreetMap).](https://docs.rual.nl/block-types/geopoint/geo_point_snap)

- [get lat / lon `geo_point_to_lat_lng` Returns the latitude and longitude of a given geo point](https://docs.rual.nl/block-types/geopoint/geo_point_to_lat_lng)

- [travel mode from points `geo_point_travel_mode` Classifies which network a series of GPS points is travelling on (road pinning): when at least min ratio of the points lie within max distance of a road or railway, the traveller is pinned to that network : e.g. the last 5 fixes near a road means driving, near a railway means riding a train. When both networks qualify the one with the smaller mean distance wins. Outputs the mode (road, rail or none), per-network conditions, the match confidence and the points snapped onto the matched network. A single geo point object is accepted as well; entries without numeric lat/lon are ignored. Offline lookup against the road/rail network (Benelux, OpenStreetMap).](https://docs.rual.nl/block-types/geopoint/geo_point_travel_mode)

- [is valid `geo_point_validate` Checks whether the given geo point has a valid latitude and longitude.](https://docs.rual.nl/block-types/geopoint/geo_point_validate)

- [list place categories `places_categories` Lists the curated category groups with their Dutch and English labels and synonyms : the block to build a category dropdown from. Overture ships roughly 1700 raw categories, which is far too many to show a user, so they are folded into a smaller curated set. Any group id or synonym listed here can be passed to the categories pin on the other blocks.](https://docs.rual.nl/block-types/places/places_categories)

- [places dataset info `places_dataset_info` Reports which dataset this node is serving: the Overture release, the vocabulary version, and how many records and categories it holds. This is the one places block that answers when no dataset is loaded : that is its job, so check loaded rather than success. Worth surfacing in an admin view: the release string is what makes results reproducible and comparable between refreshes. Accuracy limits worth knowing: education categories overcount by roughly 6% against the official register, counts are indicative until conflation exists, and confidence is uncalibrated.](https://docs.rual.nl/block-types/places/places_dataset_info)

- [place density `places_density` Measures how built-up the area around a point is: how many places sit within the radius, the rate per km², a breakdown per category, and a classification (dense_urban, urban, suburban, rural). The classification is driven by the per-km² rate rather than the raw count, so it does not change when you change the radius. Data is Overture Maps Places.](https://docs.rual.nl/block-types/places/places_density)

- [enrich with nearby places `places_enrich` Adds the nearest place per category to every item in a list, in one call : no iterator needed. The usual pipeline is: query your objects, run this block, then write the result back with a mutation. After that an ordinary range query filters on the stored distance, so no further lookups are needed. Each item gets {distance_m, name, id, count} per category under output path. Items are copied, never modified in place, and every item is returned whether or not it had a usable coordinate.](https://docs.rual.nl/block-types/places/places_enrich)

- [facet counts by places `places_facet` Counts how many items in a list are near each category : &ldquo;412 objects near a hospital&rdquo; in one node. Counts items, not places: an item with three hospitals nearby counts once, which is what a facet over an inventory means. Pass categories with a shared radius, or filters for a named filter per facet.](https://docs.rual.nl/block-types/places/places_facet)

- [filter by places `places_filter` Keeps or removes items from a list according to a places filter, without writing anything to a store. Feed it a filter from places_parse_query to turn typed text such as binnen 300m van een basisschool straight into a filtered list. Items with no usable coordinate cannot satisfy a spatial test, so they are treated as not matching.](https://docs.rual.nl/block-types/places/places_filter)

- [get place by id `places_get` Looks up a single place by its Overture id : the block for re-resolving an id you stored earlier. Not finding it is a successful lookup with found false, not an error: an id can disappear between dataset releases, so branch on found rather than on success. Ids are opaque; do not parse them.](https://docs.rual.nl/block-types/places/places_get)

- [place here `places_here` Resolves the place a coordinate is at, rather than the record nearest to it. Two things separate it from places_nearest. It ignores records that are not places you can be at : at Madurodam the restaurant inside it is a metre nearer than the park, and the park is still the answer. And it recognises being inside something: a point in the middle of the Efteling has a snack bar four metres away and the park's own record half a kilometre off at the entrance, so the answer is the park. That is inferred from the park's own attractions surrounding you, because Overture Places has points and no boundaries; kind tells you which way the answer was reached, and a point with nothing prominent around it honestly answers none rather than reaching for the nearest landmark it can find.](https://docs.rual.nl/block-types/places/places_here)

- [places in bounding box `places_in_bbox` Returns every point of interest inside a bounding box : the block for rendering what is currently on screen. Results carry no distance, because a bounding box has no query point; use places_nearest when you need distances. Data is Overture Maps Places.](https://docs.rual.nl/block-types/places/places_in_bbox)

- [match places filter `places_match` Tests one geo point against a places filter, normally one from places_parse_query. distance_m and count come back whether or not the filter matched, so you can re-answer any radius question from the result without calling again : which is what lets a radius slider move without a round trip. reason is a readable Dutch explanation you can show to the user.](https://docs.rual.nl/block-types/places/places_match)

- [nearest places `places_nearest` Finds the nearest points of interest to a geo point, ordered by distance, with the distance to each in metres. Leave max distance empty for an unbounded search : because you get distances back rather than a yes/no, you can apply any radius afterwards without querying again, which is what makes a free-choice radius slider possible. Data is Overture Maps Places; see places_dataset_info for the release, and note that counts are indicative rather than a register.](https://docs.rual.nl/block-types/places/places_nearest)

- [parse places query `places_parse_query` Turns typed Dutch or English into a structured filter. binnen 300m van een basisschool becomes a proximity filter; niet bij scholen becomes a negated one; minimaal 3 kroegen binnen 500m carries a minimum count; wijk Jordaan and Station Breda resolve to a location. Feed filter into places_match, places_filter or places_facet. Parsing is rule-based and deterministic : no model call and no network. It never guesses silently: anything it could not read comes back in unparsed with a lower confidence, so you can fall back to plain search instead of acting on a half-understood filter.](https://docs.rual.nl/block-types/places/places_parse_query)

- [resolve place category `places_resolve_category` Resolves free text such as kroeg, basisschool or supermarkt to a category group id. Regular plurals are handled, so kroegen and bars work without being listed. When a word spans several groups : school is the obvious case : the alternatives are returned rather than one being picked silently, because only you know which was meant.](https://docs.rual.nl/block-types/places/places_resolve_category)

- [search places `places_search` One search box over both points of interest and settlements, with a single ranking across the two. Handles accents (Bréda finds Breda), typos (amsterdm centraal), partial words as you type, and collapses duplicate records for the same real place. Settlements outrank businesses, so Breda resolves to the municipality rather than to one of the ~2000 business names containing it. Pass near to bias results towards the current viewport. Each result carries kind, subtitle and score, so a dropdown renders straight from them.](https://docs.rual.nl/block-types/places/places_search)

- [places within radius `places_within` Returns every point of interest inside a radius, nearest first. Reports both count and raw_count: Overture is not conflated, so the gap between them is how much duplication the source data carries at this spot. Treat count as a deduplicated search result, not a census : train_station totals 1,432 nationally against roughly 400 real stations. Data is Overture Maps Places.](https://docs.rual.nl/block-types/places/places_within)

## Next steps

- [Third-Party Integrations](https://docs.rual.nl/tutorials/third-party-integrations): Calling outside APIs, receiving their webhooks, keeping data in sync and handling failures.

- [All integrations](https://docs.rual.nl/integrations): Everything RUAL connects to, by what it is for.
