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

geodjangoのk最近傍を取得するにはどうすればよいですか?

    raw() postgis order_byを利用するためのSQLクエリ 演算子:

    1. <-> これは、バウンディングボックスの中心を使用して最近傍を取得し、オブジェクト間の距離を計算します。

    2. <#> これは、バウンディングボックス自体を使用してオブジェクト間の距離を計算する最近傍を取得します。

    あなたの場合、あなたが望むのは<->のようです 演算子、したがって生のクエリ:

    knn = Person.objects.raw(
        'SELECT * FROM myapp_person 
        ORDER BY location <-> ST_SetSRID(ST_MakePoint(%s, %s),4326)',
        [location.x, location.y]
    )[:k]
    

    自分のダーピネスによる編集: [:k]は省略できます LIMIT 1を追加するには 生のSQLクエリで。 (私がしたように両方を使用しないでください!)

    他の質問に答える過程で: geodjangoで距離(テーブル全体)で注文するのはどれくらい効率的ですか 、別の解決策が考えられるかもしれません:

    spatial indexingを有効にする 論理的な制約によってクエリを絞り込みます(私の答えでは 上記のリンクされた質問の)あなたはかなり速い KNNを達成することができます 次のようにクエリします:

    current_location = me.location
    people = People.objects.filter(
        location__dwithin=(current_location, D(km=50))
    ).annotate(
        distance=Distance('location', current_location)
    ).order_by('distance')[:k]
    



    1. PostgresqlとPHP:マルチユーザーアプリケーションで、currvalは最後に挿入されたIDを取得するための効率的な方法ですか?

    2. 日時データを数値として保存する

    3. EclipseEEのSQLテーブルにデータを挿入する

    4. bcp で入力 SQL ファイルを指定できますか?