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

ユーザーの場所に基づいてデータベース値を照会する

    さまざまな空間データベースの機能を比較する質問があります。 GIS:PostGIS / PostgreSQL vs. MySql vs. SQL Server? 、PostgisがMySQLよりもかなり明確な勝者を出しているところ。

    MySQLとPostgisのどちらを使用する場合でも、可能であれば、緯度と経度の値をジオメトリ/地理(ポイント)として保存し、近くのものを見つけるために使用できる関数として、 ST_Distance ST_Distance_Sphere そして、よりあいまいな<->演算子 (使用法など)ジオメトリ/地理列を直接操作します。さらに重要なのは、空間インデックスを追加できることです。 、これらの関数が適切に機能する必要があります。これは、個別にインデックス付けされた緯度と経度の列の検索を大幅に上回ります(これはテーブルのサイズによって異なりますが、テーブルのサイズが大きくなるにつれて大きくなります)。

    Postgisでは、latとlonを次のようにジオメトリに変換できます:

    alter table mytable add column geom (Geometry, 4326);
    update mytable set geom = ST_SetSRID(ST_MakePoint(lon, lat), 4326)
    create index ix_spatial_mytable_geom on mytable using gist(geom);
    

    この時点で、上記のリンクの例のいずれかを使用して、他のポイントの近くのポイントを見つけるための非常に効率的なクエリを実行できるようになります。

    MySQLでも同様のことができますが、空間参照系、つまりlat / lonを意味する上記の4326はサポートされておらず、ST_MakePoint関数がないため、STGeomFromTextを使用してlat/を連結する必要があります。一緒にポイントを作るためにロン。 Claudioや他の人が述べているように、それは平面座標ですべてを行いますが、これはPostgisの問題ではありません。

    長くてやや接線の答えをお詫びしますが、大量のデータ(MySQL、SQL Server、Postgres / GIS)でデータベース間でさまざまな移行を行い、途中で多くの間違いを犯したので、正しい方向(そして、Postigsがスペードで持っている他の空間機能の使用を開始したい場合は、将来の校正を少し追加してください)。



    1. mysql_real_escape_string()はSQLインジェクションから完全に保護しますか?

    2. 困惑するRuby/MySQLエラー:無効なパケット:シーケンス番号の不一致

    3. Laravelからストアドプロシージャを実行する方法

    4. SQLiteは頻繁なSELECTクエリでデータベースファイル(コード14)を開くことができません