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

距離を計算するためにPostgisでPostgreSQLを設定する方法

    簡単な答え:

    x、yを変換するだけです ST_MakePointを使用したオンザフライの値 (オーバーヘッドに注意してください!)指定されたポイントからの距離を計算すると、デフォルトのSRSはWGS84

    SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
                       ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;
    

    GEOGRAPHYの使用 GEOMETRYを使用している間、結果はメートル単位で取得されます 度でそれを与えます。もちろん、距離を計算するには座標ペアのSRSを知ることが不可欠ですが、データ品質を制御でき、座標が一貫している場合(この場合、SRSを省略)、心配する必要はあまりありません。外部データを使用して操作を実行することを計画している場合は、注意が必要になります。外部データからもSRSに気づかず、自分のデータとは異なる場合があります。

    長い答え:

    そうですね、PostGISを使用している場合は、 x、yを使用しないでください。 そもそも別々の列に。このようなことを行うジオメトリ/地理列を簡単に追加できます。

    これはあなたのテーブルです...

    CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);
    

    次のデータが含まれています..

    INSERT INTO places VALUES ('Budva',18.84,42.92),
                              ('Ohrid',20.80,41.14);
    

    地理タイプ列を追加する方法は次のとおりです。

    ALTER TABLE places ADD COLUMN geo GEOGRAPHY;
    

    列が追加されたら、次のように座標を地理/ジオメトリに変換し、テーブルを更新します。

    UPDATE places SET geo = ST_MakePoint(lon,lat);
    

    距離を計算するには、関数 ST_Distanceを使用する必要があります。 、次のように(メートル単位の距離):

    SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;
    
       st_distance   
    -----------------
     686560.16822422
     430876.07368955
    (2 Zeilen)
    

    WKTに位置パラメータがある場合 、次も使用できます:

    SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
       st_distance   
    -----------------
     686560.16822422
     430876.07368955
    (2 Zeilen)
    



    1. あるテーブルから別のテーブルにデータを移動する、postgresqlエディション

    2. イベントの最新の日付でグループ化されたテーブル結合から個別の順序対を選択します

    3. PHPを介してMySQLテーブルに列が存在するかどうかを確認します

    4. データベースを圧縮して実行速度を上げる方法