2011-01-17 5 views
0

Клиент хочет, чтобы на своем веб-сайте находилась страница, где пользователь может найти продавца своего ассортимента. То, что они хотят, - это возможность входа в UK PostCode и список их продавцов, чтобы появиться в ближайшем порядке.Поиск почтового индекса

Есть ли способ использовать Карты Google для определения ближайшего поставщика?

У меня есть база данных PHP MySQL со всеми поставщиками Почтовые индексы и детали, и я буду использовать почтовый индекс пользователя.

ответ

3

Я думаю, вам понадобятся данные 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.

0

Думаю, вам понадобится немного больше данных, чем это. Я бы предположил, что вам нужно хранить широту и долготу каждого британского почтового индекса вместе с самим почтовым индексом. Я думаю, что эти данные доступны в Royal Mail за стоимость, и я помню, где-то читал, что он будет доступен и в общественном достоянии. Попросите пользователя ввести свой почтовый индекс, посмотрите свою широту и долготу в db, а затем используйте это для выполнения другого запроса, который вычисляет ближайший поставщик для них, возможно, в пределах определенного количества миль. Вы могли бы создать процедуру хранения, чтобы сделать все это на db. This post, похоже, содержит некоторые сведения о том, как это сделать.

0

Если вы хотите, чтобы это было быстро, то предварительно вычислить расстояния между почтовыми индексами в определенном радиусе друг от друга - увидит следующее:

Calculate distance between zip codes and users

Это должно работать нормально в вашем случае, если вы думаете пользователь будет готов проехать более 100 миль, чтобы купить продукт?

0

Вместо Google Maps этот открытый почтовый индекс geocoding API может пригодиться вам. Как говорили другие, как только у вас есть лат для обеих точек, вы можете использовать стандартные альгосы для поиска расстояний. A previous question содержит некоторую информацию о том, как это сделать непосредственно в SQL.

0

Вы можете найти этот сайт полезным: SQL/CSV Postcode Database

Я ранее использовал это для поиска длинных/лат с почтовым индексом «OUTCODE».

Существует также сценарий php (который я не тестировал), который вычисляет расстояние между двумя почтовыми индексами.

Смежные вопросы