まず、緯度、経度を使用している場合は、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以降)が必要です。よくわかりません。
参照用にこれを確認してください