When Spatial Search Goes Wrong


I want to find some great pizza near my city of Salisbury, Maryland. I do a search and put in 60 miles as my radius. I get a bunch of results:Salisbury is on a peninsula, separated from western Maryland by the Chespeake Bay, with only one way to cross. Take a look at the pizzas on the left. They are across the Bay, and take hours to drive to.

Instead of a simple buffer, we can create an isochrone. An isochrone is a polygon of everywhere one can travel to within a certain time. An isochrone of 60 minutes for my city looks like this:

Now, I can do a query to get all the pizza joints that are contained within that isochrone polygon:

Good! These are more meaningful results.

There are multiple ways to generate isochrones. The free and open source way is to use PostGIS with pgrouting. For this example, I used the Mapbox isochrone API which is fast and easy.

When your product requires these kind of search queries, think about the application before doing a simple buffer.

Often users don't want results that are geographically close, they want results that are chronologically close.