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

緯度経度が市域内にあるかどうかを確認する方法

    これはやり過ぎかもしれませんが、postgres を使用している場合 postgis をインストールできます 空間データを管理するための拡張。次に、 irb あなたはこのようなことをすることができます:

    result = ActiveRecord::Base.connection.execute('SELECT
    ST_Contains(ST_SetSRID(ST_MakeBox2D(ST_Point(-0.489, 51.28), ST_Point(0.236, 51.686)), 4326),
    ST_SetSRID(ST_Point(-0.1265, 51.483), 4326))')
    

    クエリは、 ST_contains関数 を使用して、ポイントが指定されたbbox内にあるかどうかをチェックしています。

    これは戻ります:

    => #<PG::Result:0x007fa517fcbe08 @connection=#<PG::Connection:0x007fa5167f8970 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>
    

    次に、次のことができます。

    result.first
    

    これは戻ります:

    {"st_contains"=>"t"}
    

    この時点で-0.7265、44.483 (bboxの外側のポイント)結果は次のようになります:

    {"st_contains"=>"f"}
    

    raw sqlを使用したくない場合は、gemを使用して空間データを管理できます。非常に良いものは次のとおりです: rgeo 。作成者のブログ を読むことをお勧めします。

    rgeo を使用する ポイントやポリゴンなどの「ジオメトリ」を使用してモデルの属性を定義してから、含む?

    要点 を残しておきます postgisをインストールするための非常に基本的な手順 Ubuntuで。



    1. SQL Server(T-SQL)でのPATINDEX()関数のしくみ

    2. 一意のフィールドがないテーブルに行がまだ存在しない場合は、mysqlを挿入します

    3. MySQLからNoSQLへの移行の例?

    4. SQLServerのメッセージ512「サブクエリが複数の値を返しました」を修正