Комментарии 6
По коду не совсем понял, сколько раз при запросе списка изображений выполняется обращение к БД? А то вижу циклы, вижу проверки на вхождение в список.
И еще вопрос, имеет ли хэш функция какую-либо привязку к особенностям координатной сетки для ускорения выборки?
И еще вопрос, имеет ли хэш функция какую-либо привязку к особенностям координатной сетки для ускорения выборки?
0
Сейчас сделано так, что сначала на клиенте определяются прямоугольные области, в которые нужно загрузить фотографии, затем эта информация склеивается в один запрос и отправляется на сервер. Т.е. при инициализации создается один запрос на 9 областей (если все происходит так, как на картинке в статье). Затем при пересечении других областей, запрос будет охватывать меньше областей (3 прямоугольника если двигать только влево, вправо или вверх, вниз).
Не совсем понял вопрос. Вообще нет такой особенности. Вычисляется так, как было описано, в зависимости от размеров областей и точки отсчета. Хотя если вы про третий способ выборки из БД, то там наверное можно было обойтись целыми числами, правда не известно, повлияло бы это на производительность существенно.
И еще вопрос, имеет ли хэш функция какую-либо привязку к особенностям координатной сетки для ускорения выборки?
Не совсем понял вопрос. Вообще нет такой особенности. Вычисляется так, как было описано, в зависимости от размеров областей и точки отсчета. Хотя если вы про третий способ выборки из БД, то там наверное можно было обойтись целыми числами, правда не известно, повлияло бы это на производительность существенно.
0
Просто в плане хэша можно было бы реализовать довольно хитро, сам использую такое:
— все координаты сводятся к XYZ, тоестьномер тайла на котом лежит картинка;
— любую пару XY можно представить числом, которое собирается по следующему правилу: биты из Y чередуются с битами из X, младший бит идет из X;
— получить индексы нижележащих уровней Z можно взять (XY) (XY+1) собрать в индекс и каждый сдвинуть на удвоенную разницу уровней влево.
Данная схема работает, проверено в боевых условиях.
В итоге, координата внутри хранится дополнительно как число для Z=18. При запросе передаются координаты левого-верхнего правого-нижнего и зум. Вычисляется граница индекса и в результате получаем простой запрос по интервалу. Если есть несколько зон, можно добавить в условие выборки, не думаю, что сильно просадит скорость.
— все координаты сводятся к XYZ, тоестьномер тайла на котом лежит картинка;
— любую пару XY можно представить числом, которое собирается по следующему правилу: биты из Y чередуются с битами из X, младший бит идет из X;
— получить индексы нижележащих уровней Z можно взять (XY) (XY+1) собрать в индекс и каждый сдвинуть на удвоенную разницу уровней влево.
Данная схема работает, проверено в боевых условиях.
В итоге, координата внутри хранится дополнительно как число для Z=18. При запросе передаются координаты левого-верхнего правого-нижнего и зум. Вычисляется граница индекса и в результате получаем простой запрос по интервалу. Если есть несколько зон, можно добавить в условие выборки, не думаю, что сильно просадит скорость.
+1
А сервер работает на asp.net?
+1
Почитал, пока лишь по диагонали. В избранное до лучших времен, может и пригодится.
Спасибо!
Спасибо!
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Реализация выборки, кэширования и отрисовки фотографий на карте