Утончите много ST_Points - PullRequest
       7

Утончите много ST_Points

0 голосов
/ 10 января 2011

У меня много (1.000.000) ST_Points в postgres-db с расширением postgis.Когда я показываю их на карте, браузеры становятся очень занятыми.Для этого я хотел бы написать SQL-оператор, который фильтрует высокую плотность только до одной точки.
Когда пользователь уменьшает масштаб из 100 ST_Points, postgres должен возвращать только одну.Но только если эти точки находятся близко друг к другу.
Я попробовал это с этим утверждением:

select a.id, count(*)
from points as a, points as b
where st_dwithin(a.location, b.location, 0.001)
and a.id != b.id
group by a.id

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

Ответы [ 2 ]

2 голосов
/ 16 января 2011

Я согласен с tcarobruce, что кластеризация - это термин, который вы ищете. Но это доступно в postgis.

По существу, кластеризация может быть достигнута путем уменьшения числа десятичных знаков в X и Y и группировки по ним;

select 
  count(*),
  round(cast (ST_X(geom) as numeric),3)
  round(cast (ST_Y(geom) as numeric),3)
from mytable 
group by 
round(cast (ST_X(geom) as numeric),3), 
round(cast (ST_Y(geom) as numeric),3)

Что приведет к таблице с координатами и количеством реальных точек по этой координате. В этом конкретном примере он дает вам округление до 3 десятичных знаков, 0,001, как в вашем первоначальном утверждении.

0 голосов
/ 15 января 2011

Вы ищете термин «кластеризация».

Есть клиентские библиотеки, которые делают это, а также коммерческие сервисы , которые делают это на стороне сервера.

Но это не что-тоPostGIS делает изначально.(Для этого есть билет .)

Возможно, вам придется написать собственное решение и заранее рассчитать кластеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...