|
Показ на карте большого числа объектов
|
|||
---|---|---|---|
#18+
Добрый день! Есть база данных postgresql с таблицей у которой есть колонки широта и долгота Код: plsql 1. 2.
Нужно показывать на карте яндекс эти записи. Для небольшого участка работает нормально. Но если вывести большой регион, то записей десятки тысяч и все начинает тормозить и запросы умирают по таймауту. Получается, что как-то нужно группировать записи и на большом удалении показывать кружочки с числом записей в этом районе. А при приближении карты уже выдавать детально информацию по каждой записи. На многих сайтах я видел такое, но как это реализуется на SQL? SQL должен группировать точки рядом и считать их количество. Подскажите пожалуйста, как это реализуется? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 11:50 |
|
Показ на карте большого числа объектов
|
|||
---|---|---|---|
#18+
Serge N, для Postgres надо установить расширение Postgis В нём реализован пространственный индекс R3 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 12:17 |
|
Показ на карте большого числа объектов
|
|||
---|---|---|---|
#18+
_avz Serge N, для Postgres надо установить расширение Postgis В нём реализован пространственный индекс R3 postgis у меня уже установлен, индекс R3 насколько я понимаю позволяет делать запросы с геометрическими условиями - например выбрать точки рядом с заданной. Но как сделать запрос, который бы группировал и считал точки лежащие рядом для целого города например как на картах авито? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 12:24 |
|
Показ на карте большого числа объектов
|
|||
---|---|---|---|
#18+
Serge N, "рядом" - значит не дальше чем на каком-то расстоянии. Используй ST_Distance_Sphere() Или рядом - значит в пределах какой-то области - тогда st_intersects(), для точек достаточно st_within() или для точки делается st_buffer() и проверяется пересечение с ним ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 12:33 |
|
Показ на карте большого числа объектов
|
|||
---|---|---|---|
#18+
_avz Serge N, "рядом" - значит не дальше чем на каком-то расстоянии. Используй ST_Distance_Sphere() Или рядом - значит в пределах какой-то области - тогда st_intersects(), для точек достаточно st_within() или для точки делается st_buffer() и проверяется пересечение с ним В том то и дело, что нужно не в пределах области. Для прямоугольника можно и без postgis просто задавать latinude/longitude between V1 and V2. Нужно сгруппировать по сетке и для каждого узла выдать количество. Как это делается? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 12:40 |
|
Показ на карте большого числа объектов
|
|||
---|---|---|---|
#18+
Типа, кластеризация? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 12:44 |
|
Показ на карте большого числа объектов
|
|||
---|---|---|---|
#18+
_avz Типа, кластеризация? наверное. как на картах авито - прикладываю скриншот - несколько домов рядом объеденены в одну точку и в ней число объявлений - 5 штук. а уже если приблизить, то каждое объявление выдается отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 12:57 |
|
Показ на карте большого числа объектов
|
|||
---|---|---|---|
#18+
Сам я таким не занимался, но рискну предположить, что может подойти это: Clustering_Functions ST_ClusterDBSCAN — Window function that returns a cluster id for each input geometry using the DBSCAN algorithm. ST_ClusterIntersecting — Aggregate function that clusters the input geometries into connected sets. ST_ClusterKMeans — Window function that returns a cluster id for each input geometry using the K-means algorithm. ST_ClusterWithin — Aggregate function that clusters the input geometries by separation distance. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2021, 13:13 |
|
|
start [/forum/topic.php?fid=53&msg=40105132&tid=1993820]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
193ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 536ms |
0 / 0 |