Experiments >

Delivery estimates: distance ranges

Experiment #8227th March, 2021by Joshua Nussbaum

There are many ways to compute the delivery time between two points.

The brute force approach is to compute the shipping time for each postal zone, but that’s a lot. In the US there are ~33,000 zip codes, so that means doing 33,000 API lookups for each warehouse and carrier.

A company with 3 warehouses and 2 carriers would require 3 X 2 X 33,000 = 198,000 API requests.

One method to reduce the requests is to measure a reduced set of point in each state.

My first approach is to do this by computing the rate for only 2 points in each state, the closest zip code and the farthest zip code.

I picked a random point for the warehouse, ie Cherry Hill, NJ. It’s latitude/longitude is 39.9067637/-75.0315724

To compute the nearest point for the state of Pennsylvania:

select p.municipality, p.code from postal_codes as p
inner join subdivisions as s on s.id = p.subdivision_id and s.code = 'PA'
order by st_distance('POINT(-75.0315724 39.9067637)', p.geog)
limit 1

That returns Philadelphia, 19148, which is correct, it’s only a few miles away.

And to compute the farthest point:

select p.municipality, p.code from postal_codes as p
inner join subdivisions as s on s.id = p.subdivision_id and s.code = 'PA'
order by st_distance('POINT(-75.0315724 39.9067637)', p.geog) desc
limit 1

That returns: West Springfield, 16443, which is correct, it’s on the opposite side of the state, on the north western border of Ohio.

The 2 queries can be merged together to run for all states in one shot:

select s.code, s.name,
(select p.code from postal_codes as p where s.id = p.subdivision_id order by st_distance('POINT(-75.0315724 39.9067637)', p.geog) limit 1) closest_zip,
(select p.code from postal_codes as p where s.id = p.subdivision_id order by st_distance('POINT(-75.0315724 39.9067637)', p.geog) desc limit 1) farthest_zip
from subdivisions as s

NOTE: the order of points with PostGIS is longitude,latitude, NOT latitude,longitude. (That’s 4 hours I wont get back)

view all experiments

Stay tuned in

Learn how to add more experimentation to your workflow