Рекомендации по поиску по почтовому индексу и радиусу

2

Я забочусь о нескольких специализированных сайтах для организации членства в uk и что мы хотим сделать, это предоставление, а также другие функции адресов, это поиск ближайшего члена веб-пользователя с самих сайтов.

Несколько вариантов использования, которые я хочу заполнить:

Случай 1: пользователь помещает свой почтовый код и хочет видеть всех членов в радиусе 5/10/15/20/30/40 миль от них

Случай 2: член помещает в область (город, графство и т.д.) и получает список членов в этой области.

По сути, я ищу программируемый API, который я могу использовать для кода:

  • поиск почтового кода и возврат адресов (например, после выбора номера дома).
  • поиск сообщения + радиус (5miles, 10miles и т.д.) и получить набор применимых почтовых кодов для присоединения к записям членства в базе данных

Любые рекомендации? Это может быть ежеквартальная установка обновления на сервере, это может быть запрашиваемый веб-сервис. Я открыт для предложений.

Заранее спасибо

Изменить. Не забывайте об этом; что-то еще было брошено в смесь на работе, и это ушло на задний план. Будет обновляться, когда он вернется к кипению (абитуриенты для комментариев с кипячением: -))

  • 0
    Не уверен, что вопрос. Вам нужен сторонний сервис, который предоставляет эти данные?
  • 0
    @OrbMan - Или данные, которые я могу использовать, чтобы получить почтовые индексы в определенном диапазоне от указанного. Но также потребуется поиск адреса, поэтому, скорее всего, третья сторона ищет.
Теги:
postal-code

4 ответа

4

Обновление: я только что увидел на сайт BBC News, что данные PostCode будут свободны с этого месяца. В свете этого я бы использовал эти данные. Я бы поискал API для этой базы данных.

Предыдущий ответ: Данные по столбцу в Великобритании поставляются по цене SIGNIFICANT Royal Mail. Это поставляется с данными Lng Lat для каждого почтового индекса. Запатентованная природа базы данных Royal Mail довольно противоречива. См. этот сайт для получения дополнительной информации.
Сказав это, вы можете использовать Google Maps Api для этого. Пользователи могут вводить штырь на карте, где они живут, и вы можете захватить Lng и Lat. Это не даст вам все, что вы указали выше.

Вот хорошая статья о Google Geocoding API

  • 1
    +1 Спасибо за ответ. Я только что нашел ernestmarples.com и ordnancesurvey.co.uk/opendatadownload/products.html ... просто смотрю сейчас :-)
  • 0
    Удачи. Картография - это мое поле. Если вы найдете хороший API в этих данных, добавьте свой ответ. Я буду обновлять свои собственные, если я тоже.
Показать ещё 1 комментарий
2

Одна вещь, с которой вы, вероятно, столкнетесь в какой-то момент, должна рассчитать расстояние между двумя точками (широта/долгота). Одним из наиболее известных алгоритмов является Haversine Forumla. Я написал реализацию этого, основываясь на некотором C-коде, который я нашел (не могу вспомнить оригинального автора). Это происходит примерно так:

public static double DistanceBetween(LatLng pos1, LatLng pos2, DistanceUnit unit)
{
    double R = 6371;

    switch (unit)
    {
        case DistanceUnit.Miles:
            R = 3960;
            break;
        case DistanceUnit.Kilometers:
            R = 6371;
            break;
        case DistanceUnit.Meters:
            R = 6371000;
            break;
    }

    double dLat = GeoMath.DegreesToRadians(pos2.Latitude - pos1.Latitude);
    double dLon = GeoMath.DegreesToRadians(pos2.Longitude - pos1.Longitude);
    double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
        Math.Cos(GeoMath.DegreesToRadians(pos1.Latitude)) *
        Math.Cos(GeoMath.DegreesToRadians(pos2.Latitude)) *
        Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
    double c = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a)));
    double d = R * c;
    return d;
}

Если DistantUnit - это простое перечисление, а LatLng - это просто структура или класс с двумя двойными свойствами.

2

По крайней мере, в Соединенных Штатах (я совершенно не осведомлен о каком-либо другом формате почтового индекса в стране), но если они относятся к Long/Lat, это должно работать), вы должны иметь возможность использовать Формулу Хаверсина для разработки Почтовые индексы в пределах заданного геопространственного радиуса.

Проще говоря, у вас должен быть почтовый индекс → long/lat table. Затем из данного почтового кода (координаты) вы можете математически определять все широтные и продольные координаты на заданном расстоянии от этой точки - затем вы берете эти приблизительные координаты и конвертируете обратно в zip, затем запрашиваете членов в почтовых индексах.

После этого, это вопрос построения их на карте. Следующее предоставит MUCH больше деталей, чем я мог, поскольку он объясняет математику и фактически переводит ее в рабочий MySQL-запрос, чтобы вы начали:

http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

0

Я сделал что-то подобное несколько месяцев назад. Учитывая IP-адрес, мне нужно знать, как закрывается город/город, где эта служба должна работать на наших собственных серверах. С веб-сайта, который я больше не знаю, я получил список локаций lat/lng/city по всему миру. Таблица содержит около 8 миллионов записей.

Как говорит Дан Дипло, вам понадобится расстояние для таких запросов. Мой запрос заключался в том, чтобы найти ближайшее место для заданной координаты lat/lng. Используя аналогичную функцию, как Дэн Дипло, я создал индекс, который вычислял расстояние записи БД (latlng1) и ноль (latlng2). Этот индекс используется только для получения индексного сканирования для уменьшения набора данных - он не помогает найти окончательное значение. Наконец, вам нужно запросить данные, которые вы ищете, и расстояние до нуля, чтобы уменьшить набор поиска.

Таким образом, запрос занял около 100 мс. Но вы должны использовать функцию Diplo как индекс SQL, который не должен быть проблемой для существующих баз данных, предоставляющих математические функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню