Я думаю, вам понадобятся данные CodePoint Survey Survey Survey для сопоставления ваших почтовых индексов с долготой и широтой. Элемент код доступен как commercial product, или есть также Codepoint Open
После того, как у вас есть широта и долгота, то вы можете использовать стандартные алгоритмы, такие как гаверсинус или Vincenty для расчета расстояния между точками
РЕДАКТИРОВАНИЕМ
Структура файлов CSV, открытых в CodePoint, может быть найдена here. Обратите внимание, что местоположение выполняется как Northings и Esatings, а не Longitude и Latitude, поэтому ему потребуется преобразование. В Интернете есть несколько статей об этом, например.
http://www.deepbluesky.com/blog/-/converting-os-coodinates-into-longitude-latitude_7/
http://mediakey.dk/~cc/convert-northing-and-easting-utm-to-longitude-and-latitude/
но вы должны знать, что OS Northings/Eastings основаны на Эйри 1830 эллипсоида, а не модели WGS84, используемой Google карты (и большинство систем GSM). Неспособность разрешить эту разницу может привести вас к чему-либо между 70-120 м между Корнуолом и Восточной Англией.
Вы также можете найти функции PHP для этого преобразования на сайте Movable Type (необходимое чтение для любого PHP-разработчика, работающего с GeoData. Я бы рекомендовал добавить пару столбцов в свою базу данных запаса для долготы и широты и одноразовый скрипт для обновления всех существующих данных с использованием данных Codepoint, а затем изменить свои процедуры вставки/обновления для продавцов, чтобы обновлять эту информацию. Используя PHP, другое решение для этого преобразования: PHPCoord от Jonathan Stott
Для более высокой производительности в запросе базы данных выполните поиск lat/long против «ограничивающей рамки» перед вычислением расстояний. Я объяснил, как это сделать в ответ на similar query.