PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego st_intersection zwraca nie-wielokąty?

ST_intersect zwraca kilka typów geometrii, w zależności od względnej topologii.

Na przykład uruchomienie ST_intersect na dwóch sąsiednich wielokątach zwraca wspólną część wspólnej granicy.

Podczas gdy wyprowadza pojedynczą tabelę (jak można to zweryfikować na przykład w pgadmin), w próbce przeglądarki QGIS zostanie ona pokazana jako wiele tabel o różnych typach geometrii (na przykład:WIELOKĄT, WIELPOLI, LINIA i PUNKT), ale ( nieco mylące) o tej samej nazwie.

Wizualnie można je odróżnić, obserwując towarzyszące ikony po lewej stronie:

Możesz jednak wybrać typ geometrii, który chcesz, na przykład dodając filtr WHERE z ST_Dimension :

SELECT      a.*,
            b.*,
            st_intersection(a.geom, b.geom) as geom
FROM        a,b
WHERE       st_intersects(a.geom, b.geom) 
            AND ST_Dimension(st_intersects(a.geom, b.geom)) = 2;

lub, ze względu na wydajność, przepisz go w sposób podobny do:

SELECT clipped.* 
FROM (
         SELECT a.id, b."fieldName",
             (ST_Dump(ST_Intersection(a.geom, b.geom))).geom AS geom
         FROM "public"."table_A_name" AS a INNER JOIN "public"."table_B_name" AS b   
         ON ST_Intersects(a.geom, b.geom)
     ) AS clipped
WHERE ST_Dimension("clipped"."geom") = 2;

Drugie rozwiązanie tworzy anonimową tabelę tymczasową, która umożliwia ST_Intersection uruchomić tylko raz.

Być może zauważyłeś, że sztuczka jest w ST_Dimension("clipped"."geom") = 2 .

ST_Dimensions który filtruje wyjścia z ST_Intersection tak, aby zachować tylko wielokąty (które mają wymiar topologiczny 2).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego funkcja json_agg() PostgreSQL nie zwraca pustej tablicy?

  2. Postgres — czy to właściwy sposób na utworzenie częściowego indeksu w kolumnie logicznej?

  3. Używanie parametru pozycyjnego ($1,..) w psql

  4. Jak dodać po usunięciu ograniczeń kaskadowych?

  5. Skonfiguruj PHP i PostgreSQL w systemie Windows