2017-03-22 77 views
0

我有4個我總是得到的點,我想查詢一個多點定義的多邊形是否包含這4個點。我正在使用PostGIS和Postgres。查詢包含4個點的多邊形

我也爲此目的使用OGR/GDAL。有人會爲此向我提供使用SQL的查詢。

+0

請定義「內部4分」。如果多邊形在這4點內,則爲 –

+0

。 4點是相機點,所以我想知道這個多邊形是否在這4點內,位於相機視野 – andre

+0

我需要包含這4點的多邊形。 – andre

回答

0

這用來檢查點(1 1),(2 2),(3×3),和(4×4)都位於由(00)所限定的多邊形內,(10 0),(10 10) (0 10)和(0,0):

SELECT st_contains(
      st_polygon(
      st_linefrommultipoint(
       st_mpointfromtext(
        'MULTIPOINT(0 0, 10 0, 10 10, 0 10, 0 0)' 
       ) 
      ), 
      0 
     ), 
      st_mpointfromtext(
      'MULTIPOINT(1 1, 2 2, 3 3, 4 4)' 
     ) 
     ); 

因此,要找到滿足條件的所有多點,你可以使用類似的東西:

SELECT id 
FROM multipoints 
WHERE st_contains(
     st_polygon(
      st_addpoint(
       st_linefrommultipoint(
        multipoints.geom 
       ), 
       st_startpoint(
        st_linefrommultipoint(
        multipoints.geom 
       ) 
       ), 
       -1 
      ), 
      st_srid(multipoints.geom) 
     ), 
     st_mpointfromtext(
      'MULTIPOINT(1 1, 2 2, 3 3, 4 4)', 
      8307 
     ) 
    ); 

這假定multipoints不形成一個閉合的多邊形(即第一個點等於最後一個)。

我在我的例子中使用SRID 8307,用你需要的替換它。

+0

謝謝,我是初學者,我可以從GEOM列中獲取幾何。我怎麼會設置在上面的SQL語句,我也想選擇「全部」,從表中,不僅一個多邊形 – andre

+0

我已經擴展了一個建議的回答多邊形「 –

+0

FEHLER:操作上混合SRID幾何 這就是我得到 SELECT GID 從那裏st_contains( areas.geom, st_mpointfromtext( '多點(16.075 47.950,16.249 47.914,16.249 47.91411,16.232 47.826)' ) )地區 ; – andre

相關問題