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

10,000メートル未満のpostgisファイルとその計算された距離に表示したい

    これを行う最も簡単で最速の方法は、座標をgeometryとして保存することです。 またはgeography 分離された座標ペアの代わりに:

    ALTER TABLE data ADD COLUMN geog geography (point,4326);
    UPDATE data SET geog = ST_MakePoint(lon,lat);
    

    その後、この新しい列に要点インデックスを作成します:

    CREATE INDEX idx_data_point ON data USING gist (geog) ;
    

    ST_DWithinを使用する ST_DistanceSphereのように、距離をクエリする場合 またはST_Distance しない 空間インデックスを使用してください!

    SELECT ST_Distance(geog,ST_MakePoint(49.9 ,6.7)::geography,true)
    FROM data
    WHERE ST_DWithin(geog,ST_MakePoint(49.9,6.7),10000,true); 
    
    • 注:true 関数内 ST_DWithin および ST_Distance use_spheroid =trueを意味します 、これはgeographyのデフォルトです パラメータ。

    デモ: db<>fiddle

    参照:指定された座標から5マイルの範囲内にあるすべての建物を取得する




    1. Pentaho Kettleを使用して、参照整合性を維持しながら、単一のテーブルから複数のテーブルをロードするにはどうすればよいですか?

    2. SQL Serverクエリ:リテラルでは高速ですが、変数では低速です

    3. MariaDBでのCHAR()のしくみ

    4. MySQLまたはPHPを使用して重複エントリを防ぐ適切な方法