Do wyliczania dokładnej odległości drogą, pomiędzy dwoma punktami najlepiej korzystać z wyspecjalizowanych to tego celu API.
Takowe udostępniają np. Google albo MapBox. W obu przypadkach są to usługi płatne a każde odpytanie zajmuje od kilkudziesięciu milisekund do kilku sekund zatem nie są to rozwiązania dla osób, które nie są już ogarniętymi programistami. Jeśli w bazie będziesz miał 1000 firm i będziesz chciał przeliczyć odległości między wybraną z nich a wszystkimi pozostałymi to to się nie uda.
Pomysł z kodami pocztowymi jest bardzo dobry. Owszem wymaga wstępnego przeliczenia i zapisania wyników w bazie ale daje to szanse na sensowne działanie (i w ogóle działanie) serwisu.
Na początek najłatwiej jednak policzyć zwykłą ORTODROMĘ pomiędzy dwoma punktami GPS i pomnożyć przez jakiś współczynnik np. 1,2 albo uzależnić to od regionu i mieć takich współczynników więcej. Da to dość dobre przybliżone wyniki dla większych odległości pomiędzy miastami. Przy małych odległościach niestety pozostaje tylko API. Oczywiście można buforować odległości od centrów miast, województw itp.. itd... ale jak by się za to nie zabierać to nie jest temat banalny.
Wg mnie na terenie Polski wystarczy wyliczanie odległości po GPS i przemnożeniu jej przez odpowiednio dobrany współczynnik. Problemy wystąpią jedynie przy dużych jeziorach, zalewie wiślanym i kilku miejscach gdzie nie ma mostów przez rzeki. Jednak odpowiednio wspierając algorytm odległościami wyliczonymi pomiędzy wspomnianymi kodami pocztowymi dałoby się sporo takich sytuacji uniknąć.
Przynajmniej do wstępnej selekcji wyników. Jak już wybrany zostanie "zwycięzca" wówczas wynik można doprecyzować za pomocą API.
Możesz przerobić mój kod biorący pod uwagę mapy google i sieć dróg :)
https://github.com/miccom1977/distances
Gdyby tam było jeszcze cokolwiek do przerabiania w temacie, w którym pytanie zadał autor tematu.
Jak łatwo się domyślić odległość zleceniobiorcy ma tu kluczowe znaczenie i polecamy najpierw tych co są najbliżej a nie pierwszego lepszego. Z tego wynika, że przy każdym zapytaniu trzeba będzie wyliczyć wiele odległości a tu napotkamy problemy, o których napisałem wyżej.