Как рассчитать геохэш видимой области / ограничительной рамки? - PullRequest
3 голосов
/ 04 декабря 2011

Я недавно начал работать над личным проектом, включающим географические местоположения, карты (Google Maps V3) и т. Д.

Проект разработан на Python и предназначен для запуска на Google App Engine. Я узнал, что для того, чтобы найти маркеры / позиции, близкие к позиции, можно использовать алгоритм геохэш (что довольно круто).

Что я не понимаю, так это: допустим, у меня есть все мои местоположения в хранилище данных (вместе с широтой, долготой и геохэшами (с высокой точностью) каждого местоположения.)

Я знаю, что мне следует использовать префикс геохеша (для сопоставления местоположений внутри), но как рассчитать геохеш ограничивающего прямоугольника? Учитывая, что ограничивающая рамка состоит из двух точек, северо-восточной и юго-западной, я не понимаю, как это сделать ..

Для того, чтобы я мог запросить, какие местоположения должны быть возвращены для видимой в настоящее время ограничительной рамки, мне нужен геохэш из видимой / видимой ограничительной рамки - теперь я знаю, что я могу геохэшить центральную позицию на просматриваемая карта, но я не знаю, сколько букв обрезать (чтобы уменьшить точность), чтобы добиться «подгонки» к реальной ограничительной рамке. (Или, может быть, это не так ...?)

Что вы будете делать, когда ограничивающий прямоугольник контейнера с геохэшами? (как в середине видимой области он разделяется между 'dqcjr0' и 'dqcjqb')

Кроме того, давайте предположим, что у меня есть пятибуквенный геохэш, как я могу преобразовать его обратно в видимую ограничивающую рамку? или, другими словами, как мне узнать, что «включено» в хэш, а что в смежных хэшах?

Заранее спасибо за помощь,

Кен.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Ken Вы можете обновить свой вопрос, указав, используете ли вы django / django-nonrel?

Я как раз собираюсь попробовать этот (в настоящее время заархивированный) порт Geomodel для django:

https://bitbucket.org/scotch/django-geomodel/

Кайл предполагает, что предстоящий "полнотекстовый поиск" в Google заменит его реализацию в геомодели. Тем не менее, мне нужно, чтобы он заработал в ближайшие дни.

(Мой текущий разговор: эта тема:

https://groups.google.com/forum/#!topic/django-non-relational/WCxFjkUzw18 )

Jon

0 голосов
/ 04 декабря 2011

Я использовал geohash с типами данных google app engine, т. Е. db.GeoPt много раз, и я использовал для сохранения geohash, который, как мне показалось, уступал в объединении db.GeoPt с очень хорошей, но немного медленной библиотекой под названием geomodel Geomodel может выполнять сопоставление ограничивающего прямоугольника и радиуса, и я предлагаю вам попробовать ограничивающий прямоугольник, поскольку он не так дорог, как радиус.Я могу выполнить запрос ограничивающего прямоугольника следующим образом:

    articles = Article.bounding_box_fetch(Article.all().filter('modified >',
                          timeline).filter('published =',
                          True).filter('modified <=',
                          bookmark).order('-modified'),
                          bounds,
                          max_results=PAGESIZE + 1)

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

...