У меня есть база данных postgres 8.3 отелей, каждая из которых имеет соответствующую долготу и широту, хранящиеся в виде точки, и курорт, который хранится как идентификатор курорта. Я хотел бы найти центральную или среднюю точку курорта.Найти центр координат в PostgreSQL
я могу сделать это с помощью простого запроса:
select
avg(lat_long[0]) as latitude,
avg(lat_long[1]) as longitude,
resort_id
from accomm
group by resort_id
Однако есть некоторые плохие данные в базе данных, например, там может быть американский отель, который регистрируется в европейском курорте. Очевидно, что выполнение простого среднего этих данных будет означать, что результаты являются неточными.
Как рассчитать межквартильное среднее или аналогичный метод для фильтрации этих плохих данных? У меня в настоящее время около 30 000 строк в моей таблице.
Отели по всему миру. У нас есть что-то вроде 2000 курортов, и каждому из них понадобятся собственные ограничивающие коробки. Мы можем расширить нашу процедуру импорта с помощью функции ограничивающего прямоугольника (т. Е. Когда он увидит новый отель, проверьте, что его координаты похожи на существующие отели на том же курорте). Самые большие проблемы, которые я вижу с этим, это не помогает нашим существующим данным (хотя мы можем это исправить), и для новых курортов есть проблема с курицей и яйцом - первый добавленный отель может оказаться не самым подходящим, а затем мы 'd потерять данные о местоположении для всех других отелей в этом курорте! – thelem
У вас есть адресная информация для каждого отеля? У меня была аналогичная проблема, когда-то, и я смог ее исправить, запустив только один раз сценарий, который передавал каждый адрес в сопоставление api (google, yahoo, microsoft, что угодно), а затем обновлял long longs, если они были слишком далеко выкл. Это поможет вашим существующим данным. Идея ограничивающей коробки не кажется реалистичной, если все ваши местоположения не были в одной стране, поэтому это может быть лучшим способом ... –
Лучшее решение, которое я придумал на этом, запускает его как двухпроходный скрипт : Пасс 1 - Получите среднее значение лат/долго для всех отелей на курорте, возможно, также стандартное отклонение (курорт может быть городом или континентом!) Перевал 2 - пересчитать лат/долго на основе среднего для всех отелей в пределах определенного радиус лата/длинный от прохода 1. – thelem