Как обрабатывать 800 тыс. Баллов как MVT - PullRequest
1 голос
/ 27 января 2020

У меня есть таблица с 800k точками с информацией, которая включает в себя батиметрию, хранящуюся в PostGIS и обслуживаемую с помощью ST_AsMVTGeom, это связано с разработкой веб-приложения с использованием Leaflet, но с определенными уровнями (0-5) одной векторной плитки, которая включает в себя все данные, которые делают запрос очень медленным (это занимает минуты). Интересно, существует ли (помимо PostGIS) способ упрощения вывода строк в зависимости от уровня масштабирования.

Я использую следующий запрос для создания плиток:

SELECT ST_AsMVT(q.*, 'bathymetry_layer', 4096, 'geom')
    FROM (
      SELECT
          c.gid AS id,
          c.x,
          c.y,
          c.z,
          c.name,
          c.inst,
          ST_AsMVTGeom(
              geom,
              ST_MakeEnvelope(-86.8798828125, 20.632784250388028, -86.8359375, 20.673905264672843, 4326),
              4096,
              256,
              false
          ) geom
      FROM bathymetry_table WHERE geom && ST_MakeEnvelope(-86.8798828125, 20.632784250388028, -86.8359375, 20.673905264672843, 4326) AND ST_Intersects(geom, ST_MakeEnvelope(-86.8798828125, 20.632784250388028, -86.8359375, 20.673905264672843, 4326))
    ) q

Результат ОБЪЯСНИТЬ АНАЛИЗ:

Index Scan using geodat_batimetria_catoche_xcalak_geom_idx on geodat_batimetria_catoche_xcalak c  (cost=0.29..8.56 rows=1 width=101) (actual time=0.117..11539.038 rows=434271 loops=1)
  Index Cond: ((geom && '0103000020E610000001000000050000002B8716D9CECB55C0516B9A779CA234402B8716D9CECB55C0D34D621058493540492EFF21FD9E55C0D34D621058493540492EFF21FD9E55C0516B9A779CA234402B8716D9CECB55C0516B9A779CA23440'::geometry) AND (geom && '0103000020E610000001000000050000002B8716D9CECB55C0516B9A779CA234402B8716D9CECB55C0D34D621058493540492EFF21FD9E55C0D34D621058493540492EFF21FD9E55C0516B9A779CA234402B8716D9CECB55C0516B9A779CA23440'::geometry))
  Filter: _st_intersects(geom, '0103000020E610000001000000050000002B8716D9CECB55C0516B9A779CA234402B8716D9CECB55C0D34D621058493540492EFF21FD9E55C0D34D621058493540492EFF21FD9E55C0516B9A779CA234402B8716D9CECB55C0516B9A779CA23440'::geometry)
  Rows Removed by Filter: 5
Planning time: 7.222 ms
Execution time: 11579.044 ms
...