Как я могу разделить земной шар на небольшие сетки таким образом, чтобы это позволяло мне назначать каждое местоположение широты / длины сетке?[закрыто]

StackOverflow https://stackoverflow.com/questions/1824790

Вопрос

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

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

Каков был бы наилучший способ создания такой грид-системы и отображения на нее двумерных пространственных местоположений?

Редактировать 1:Возможно, ничего страшного, если сетки не будут идеально однородными, особенно вокруг полюсов.

Это было полезно?

Решение

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

Другие советы

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

Цель (как описано другими респондентами) состоит в том, чтобы свести к минимуму количество запросов, необходимых для покрытия рассматриваемого пространства, не запрашивая тонны ненужных данных с сервера.То, как вы выполняете сопоставление из двумерного пространства с одномерным индексом, повлияет на эту цель.

Без знания ваших точных требований к приложению геохеширование может оказаться подходящим методом: http://en.wikipedia.org/wiki/Geohash

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

Вы не можете создать прямоугольную сетку, которая равномерно отображает земной шар.Если сетка должна быть однородной, вы должны использовать вместо нее треугольники.Но в целом, я сомневаюсь, что это решит вашу проблему.То, что вам нужно, - это 2D восьмиугольник (это ссылка для поиска в Google;проверьте изображения, чтобы легко понять, как это работает) какого-то рода:Вы должны разделить свои координаты на иерархии (например, к северу / югу / востоку / западу от начала координат для первого уровня, а затем между 90 градусами и т.д.).

Затем вы можете сделать пару выборок, которые быстро приведут к получению наименьшего прямоугольника, который содержит существующие координаты.Теперь вы можете проверить размер прямоугольника.Если это < 100 метров, значит, вы нашли решение.В противном случае у вас будет всего несколько позиций для проверки (обычно одна).

Найдите в Google "базу данных octree sql database" для реализаций.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top