как сопоставить координаты wgs84 с индексом b-дерева sql server (без использования встроенных пространственных индексов)

Я хотел бы иметь возможность отображать географические точки из WGS84, я считаю, отформатированных для ms sql server, с набором ячеек, которых он коснется, если ту же пару координат нужно будет преобразовать в пространственный индекс sql server с 4 иерархическими сетками 256 ячеек каждая.

Пространственный индекс sql server 2008 не идеально подходит для наших нужд, потому что он не поддерживает использование как географических, так и негеографических данных в одном индексе.

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

на этой странице визуально показано, как география точка может быть сопоставлена ​​с плоскими ячейками, которые могут быть индивидуально закодированы как последовательность от 1 до 4 положительных целых чисел. Пример пронумерованных ячеек см. В разделе «Правило самой глубокой ячейки» на связанной странице.

Я в основном ищу псевдокод о том, как это сделать.

Любая помощь будет оценена по достоинству, и если вы знаете алгоритмические детали, мы будем очень благодарны.

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


person JM Hicks    schedule 23.01.2013    source источник


Ответы (1)


Простое решение - перемежать координаты x и y, как в кривой Мортона, также известной как кривая z. Вы можете проверить это, вычислив верхнюю границу с использованием самого старшего бита. В картах Bing используется кривая Мортона: http://msdn.microsoft.com/en-us/library/bb259689.aspx, но кривая Гильберта намного сложнее, но в большинстве случаев лучше. В кривой Гильберта в качестве координаты используется код Грея. Вот пример кода: Отображение N -мерное значение до точки на кривой Гильберта.

person Gigamegs    schedule 13.05.2014
comment
Пожалуйста, еще раз проверьте OP. OP запрашивает что-то, что создает точно такие же мозаики, а не что-то аналогичное, как пространственный индекс sql server 2008. OP в сторону, возможно, этот пост может помочь кому-то другому. Как бы то ни было, я в конце концов придумал аналогичное решение самостоятельно, которое дает мне один поиск по дереву по комбинации широты и долготы с последующим частичным сканированием строк в пределах интересующей поверхности, предварительно заказанной требования к подкачке, без операций триггера, div или fp. Однако он не размещен здесь, поскольку на самом деле не отвечает на OP. - person JM Hicks; 19.05.2014
comment
@JMHicks: кривая Гильберта использует серый код. Разве это не то, что вам нужно? Кроме того, в ссылке это код кривой Мортона: msdn.microsoft.com/ en-us / library / bb259689.aspx. Если мой ответ окажется полезным, прошу вас проголосовать! - person Gigamegs; 19.05.2014