YQL Geo Расстояние между 2 WOEID - PullRequest
       13

YQL Geo Расстояние между 2 WOEID

0 голосов
/ 23 декабря 2009

Я храню YQL WOEID (Где на земле ID) для всех пользователей моих приложений. Теперь мне нужен способ поиска всех пользователей в пределах x миль от заданного WOEID, возможно ли это с помощью YQL?

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

Редактировать: Я думаю, что я действительно ищу что-то вроде поиска сотрудников в Stackoverflow Careers, где вы можете ввести место и указать ему расстояние вокруг того пространства, которое вы хотите включить в результаты поиска

1 Ответ

2 голосов
/ 14 февраля 2010

Насколько я могу судить, это не то, что поддерживается YQL. Наиболее близким может быть метод возврата соседей данного WOEID .

.

Проблема с поиском пользователей в пределах x миль от заданного WOEID заключается в том, что WOEID могут иметь произвольные размеры с разными центрами и ограничительными рамками. Несмотря на то, что это более сложно, сохранение широты и долготы позволит вам получить результаты, которые вы ищете. Есть как минимум два способа сделать это.

Первый - это запрос непосредственно по широте и долготе путем вычисления расстояния Хаверсин до начальной точки. Это может быть очень медленным, особенно при работе с тысячами строк. В любом случае вы должны увидеть, поддерживает ли ваша база данных геопространственные данные. MySQL и PostgreSQL оба имеют геопространственные расширения.

Второй популярный метод - использовать геохэш . Это создает набор строк, которые вы можете использовать для запроса ближайших точек. Например, возьмите координаты Lat: 40.7571397, Lon: -73.9891705 для Рокфеллер-центра в Нью-Йорке. Одна реализация geohash (для Google AppEngine) для этих координат выдает следующее:

  • 9
  • 9ac
  • 9ac7
  • 9ac7b
  • 9ac7be
  • 9ac7be2
  • 9ac7be2e
  • 9ac7be2e4
  • 9ac7be2e4e
  • 9ac7be2e4ed
  • 9ac7be2e4ed4
  • 9ac7be2e4ed4e

Так что, если вы хотите найти точки, которые действительно близки, вы можете найти другие точки, которые соответствуют 9ac7be2e4ed4e; если вам нужен общий регион, вы можете попробовать 9ac7be2e4e и так далее. Если у вас есть подмножество точек, вы можете рассчитать расстояние для набора данных намного меньшего размера.

...