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

最近傍のPostgisSQL

    まず、緯度、経度を使用している場合は、4326を使用する必要があります。

    UPDATE season SET geom = ST_PointFromText ('POINT(' || longitude || ' ' || latitude || ')' , 4326 ) ;
    

    次に、geomフィールドにインデックスを作成します

    CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); 
    

    次に、kNN近傍法を取得します:

    SELECT *,ST_Distance(geom,'SRID=4326;POINT(newLon newLat)'::geometry) 
    FROM yourDbTable
    ORDER BY
    yourDbTable.geom <->'SRID=4326;POINT(newLon newLat)'::geometry
    LIMIT 10;
    

    このクエリは、要点インデックスのkNN機能を利用します( http://workshops。 boundlessgeo.com/postgis-intro/knn.html

    それでも、返される距離はメートルではなく度になります(投影4326は度を使用します)。

    これを修正するには:

    SELECT *,ST_Distance(geography(geom),ST_GeographyFromText('POINT(newLon newLat)') 
    FROM yourDbTable
    ORDER BY
    yourDbTable.geom <->'SRID=4326;POINT(newLon newLat)'::geometry
    LIMIT 10;
    

    ST_distanceを計算するときは、地理タイプを使用します。距離は常にメートル単位です:

    http://workshops.boundlessgeo.com/postgis-intro/geography.html

    このすべての機能には、おそらく最新のPostgisバージョン(2.0以降)が必要です。よくわかりません。

    参照用にこれを確認してください https:// gis.stackexchange.com/questions/91765/improve-speed-of-postgis-nearest-neighbor-query/



    1. ダンプ内のMySQLフラグ

    2. blueimp/jquery-file-uploadのmysql挿入にカスタム変数を追加します

    3. MySQLのデータベース内のすべてのテーブルのDDLを生成する方法

    4. 2つの文字列間のMySqlクエリが機能しない場合があります