Как найти все дома рядом с аптеками? Пространственный запрос за 5 минут
🧭 Уровень сложности: ★★☆ (уверенный новичок) ⏱️ Время чтения: 5 минут 🗺️ QGIS версия: 3.22+ В прошлой статье мы разобрали, что такое буферные зоны. Построили, посмотрели, покрутили. Но буфер сам по себе — это просто фигура. Самое интересное начинается, когда вы говорите: «А теперь покажи мне все дома, которые попадают в этот буфер». В этой статье мы снова рассмотрим район Замоскворечье. Для примера возьмем два слоя: точки (аптеки) и полигоны (здания: 1825 шт.). Построим буферную зону и посмотрим что дальше: Способ 1...
4 месяца назад
--scenario1 SELECT BY PK QUERY PLAN --scenario1 --SELECT BY PK EXPLAIN (ANALYZE, BUFFERS , COSTS , SUMMARY ) SELECT * FROM bookings.airports_data WHERE airport_code = (   SELECT airport_code   FROM bookings.airports_data   ORDER BY random()   LIMIT 1 );    QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  Index Scan using idx_airports_data_code_timezone on airports_data (cost=143.04..145.26 rows=1 width=190) (actual time=2.557..2.559 rows=1 loops=1)   Index Cond: (airport_code = (InitPlan 1).col1)   Buffers: shared hit=23   InitPlan 1    -> Limit (cost=142.75..142.76 rows=1 width=12) (actual time=2.468..2.469 rows=1 loops=1)    Buffers: shared hit=20    -> Sort (cost=142.75..156.51 rows=5501 width=12) (actual time=2.467..2.467 rows=1 loops=1)    Sort Key: (random())    Sort Method: top-N heapsort Memory: 25kB    Buffers: shared hit=20    -> Index Only Scan using airports_data_pkey on airports_data airports_data_1 (cost=0.28..115.25 rows=5501 width=12) (actual time=0.127..1.319 rows=5501 loops=1)    Heap Fetches: 0    Buffers: shared hit=17  Planning:   Buffers: shared hit=199  Planning Time: 1.783 ms  Execution Time: 2.675 ms (17 rows) -- scenario1.sql --SELECT BY PK CREATE OR REPLACE FUNCTION scenario1() RETURNS integer AS $$ DECLARE  test_rec record ; BEGIN SET application_name = 'scenario1'; SELECT * INTO test_rec FROM bookings.airports_data WHERE airport_code = (   SELECT airport_code   FROM bookings.airports_data   ORDER BY random()   LIMIT 1 );  return 0 ; END $$ LANGUAGE plpgsql;