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

postgresqlpostgis円の内側を指す場合

    まず、lat_longはgeoraphyタイプの列だと思います。ジオメトリタイプの列の場合は、例を他のEPSG(おそらく全世界で3857メートル法のEPSG)に変更する必要があります。 st_dwithinは、ジオメトリタイプの場合はメートルで、ジオメトリの場合はマップ単位でチェックインするため、非常に重要です(EPSG 4326の場合、単位はメートルではなく度です)

    このようにデータを挿入します

    insert into car_wash values (1,'aaa',st_setsrid(st_makepoint(54.51, 22.54),4326))
    

    st_setsrid、st_makepointを使用する理由と、4326とは何かを説明します。-4326はEPSG 4326です。これは最もよく知られている座標参照系です(緯度と経度が度数で示されています)。

    • st_makepoint-緯度と経度の座標から地理ポイントを作成します。バイトのように見えますが、心配しないでください。何らかの理由でlatとlongが必要な場合は、st_x()およびst_y()またはst_astext()関数を使用して取得できます。ゲオまたはゲオ(この場合)を持つことの最も良いことは、要点インデックスを使用できることです。地理クエリを高速化する非常に強力なツール。

    • st_setsrid-st_makepointはポイントを作成しますが、srid=0です。 POSTGISにデータを読み取るEPSGを指示する必要があります。たとえば、4326で読むように彼に指示すると、Googleの世界地図の正しい場所に表示されますが、たとえば3857と言うと、3857はメートル法であり、度数ではないため、約50になります。左下隅から50メートル(または、おそらく左下、覚えていない)

    geogにインデックスを作成する

    create index on car_wash using gist (geog);
    

    テーブルがあり、その中にデータがあり、インデックスが付けられています。ここで、ポイントが洗車機のいずれかに近いかどうかを確認します。

    select *
      from car_wash cw
     where ST_DWithin (cw.geog,ST_GeogFromtext('SRID=4326;POINT(54.21 22.54)'),1000)
      AND cw.was_deleted=false
    

    ST_DWithinの3番目のパラメーターは、メートル単位の距離(georpahy)またはマップ単位(geometry)です。したがって、この場合、ユーザーの場所から最大1000メートル離れており、削除されていないすべての洗車が表示されます。



    1. OracleSQLクエリ-2つの日付の間のレコードを生成します

    2. PostgreSQL:PostgreSQLですべてのテーブルのOWNERを同時に変更します

    3. mysqlを介してワードプレスのすべてのカテゴリのすべての投稿を取得するにはどうすればよいですか?

    4. サブクエリの結果に正規表現を使用するにはどうすればよいですか?