sql >> データベース >  >> RDS >> PostgreSQL

postgisでポリゴン内のすべてのポイントを見つける方法は?

    を使用できます
    SELECT POINT_LOCATION 
    FROM LOCATIONS_TABLE 
    WHERE ST_Contains(ST_GEOMFROMTEXT('POLYGON((P1.X P1.Y, P2.X P2.Y, ...))'), LOCATIONS_TABLE.POINT_LOCATION);
    

    注:ポリゴンは閉じる必要があります(つまり、最後の座標==最初の座標)。 2番目のパラメータPOINT_LOCATIONは、ポイントテーブルのジオメトリ列である必要があります。

    更新:私は私のpgデータベースであなたのステップを再生しようとしました。 LOCATIONS_TABLE(id、geom)とPOLYGON(id、geom)の2つのテーブルを作成しました。その後、LOCATIONS_TABLEに2つのポイントを入力しました

    SRID=4326;POINT(-103.4955 20.723544)
    SRID=4326;POINT(-103.496956 20.722446)
    

    その後、ポリゴンをPOLYGONテーブルに挿入しました

    SRID=4326;POLYGON((-103.305496375 20.8527356811533,-103.0810348125 20.6129741620855,-101.6261045 20.5375321062668,-99.8356786875 20.3958770270624,-99.803065375 22.0572706994358,-99.649948125 28.9186361984516,-121.1212769375 8.69559423007209,-103.305496375  (...)
    

    私はqgisで状況を視覚化しました。下の写真を参照してください:

    ご覧のとおり、2つのポイントはポリゴンの内側にあります。そのため、ポリゴンの外側に手動でポイントを作成しました。その後、次のSQLクエリを使用して、ポイントがポリゴン内にあるかどうかを確認できます。

    SELECT ST_Contains(polygon.geom, point.geom) 
    FROM public."LOCATIONS_TABLE" point, public."POLYGON" polygon
    

    内部の2つのポイントに対してtを返し、3番目のポイントに対してfalseを返します。




    1. postgresqlのRownum

    2. MySQLは、合計がしきい値を超えるレコードを選択します

    3. 挿入から1時間遅れた日時。夏時間

    4. ORA-01821:ISO8601の日付と現地時間の日付形式が認識されないエラー