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

postgresqlで緯度と経度で最寄りの場所を見つけます

    PostGIS

    そのようなテーブルに緯度と経度を保存しないでください。代わりに、PostGISジオメトリまたは地理タイプ を使用してください 。

    CREATE EXTENSION postgis;
    
    CREATE TABLE foo (
      geog geography;
    );
    
    CREATE INDEX ON foo USING gist(geog);
    
    INSERT INTO foo (geog)
      VALUES (ST_MakePoint(x,y));
    

    これで、クエリを実行する必要があるときに、 KNN(<->)を使用できます。 ) これは実際にインデックスでこれを行います。

    SELECT *
    FROM foo
    ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;
    

    クエリでは、明示的にHAVING distance < 5があります 。インデックスでもそれを行うことができます。

    SELECT *
    FROM foo
    WHERE ST_DWithin(foo.geog, ST_MakePoint(x,y)::geography, distance_in_meters)
    ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;
    

    これにより、すべてのポイントがdistance_in_metersの外側にある場合、何も返されないことが保証されます。 。

    さらに、xとyは10進数ですST_MakePoint(46.06, 14.505)



    1. postgresqlのシェルで一重引用符をエスケープする

    2. MySQLがここで常にインデックスマージを使用しないのはなぜですか?

    3. ODP.NET を使用した ASP.NET Web サイトのデプロイ

    4. xp_cmdshellがSQLServer2012で機能しないのはなぜですか?