web-dev-qa-db-ja.com

GISポイントまたは個別の経度と緯度の列?

Pointタイプは幾何学的な座標を格納するために作成されているようですが、それが解決しようとしている問題や、2つの数値列を使用するだけの利点はわかりません。それは16バイトです、それでそれは2つの8バイトフロートの単なる抽象化ですか?それとも、特定のクエリのパフォーマンスを最適化する何らかのジオハッシュを含む文字列ですか?

リーフレットマップ上の特定のビューポートのすべてのポイントを取得したいとしましょう...緯度と経度を表す数値列を使用して、N/S境界とE/W境界間の経度番号、簡単です。ここでポイントの使用を検討しましたが、構文が面倒であり、開発やデータベースのパフォーマンスに不要なオーバーヘッドを感じているようです...

2
dvtan

いくつかの利点、

  • 標準化Open Geospatial Consortium(OGC) によって標準化されています
  • タイピングポイントを使用する関数は、ポイントを受け入れると言われています。そのため、タイピングや他のライブラリの操作に有利です。たとえば、ポイントで機能する関数を見つける必要がある場合は、 空間関係と測定 のインデックスで「ポイント」を検索します(ブラウザで今すぐ実行できます)。 。
  • 索引付け複合型に索引を付けることができます:(SRID,long,lat)非常に複雑な時間 定義する賢明なソート と、複合型に対するカスタムのrツリーインデックスがあります。
  • SRIDの包含ポイントには 空間参照系(SRID) が含まれ、これなしでは使用した地球のモデルがわからないため、地球上に座標を配置しないでください。
  • 独立した地位の欠如緯度と経度は、それ自体では何も意味しません。緯度とは何ですか:-5.28593対応する縦座標がありません。また、SRIDがなければ意味がありません。
  • N-dポイント can オプションで、3番目または4番目の次元を含めることができます。したがって、高次元の空間でも常にポイントです。
    • 高さ?問題ありません(3dz)。
    • 時間のある2D?問題ありません(3dm)
    • 3Dと時間?問題ない。 4dへようこそ

また、Well-knownテキストを使用するテキストとの間、およびWell-knownバイナリを使用してバイナリとの間の標準化された強制を提供します。

リーフレットの例に当てはまるように、

数値列が緯度と経度を表すので、N/S境界の間の緯度番号とE/W境界の間の経度番号を持つすべての行をフィルターするだけです。

まず、できません。極に向かって移動すると、経度の1度が0に収束します。第二に、たとえできたとしても、複雑になります。代わりに、GISメソッドを検討します。

SELECT *
FROM table
WHERE ST_DWithin( ST_Point(x,y)::geography, distance_in_meters );

メートル単位の距離!いいですね。 ;)

3
Evan Carroll

ポイントは空間関係に役立ちます。ポリゴン内のポイント(都市が単純な正方形であることはめったにないため、都市の境界内の住所)、他のポイントに最も近いポイント(家の近くのパン屋)などを特定できます。緯度/経度を使用して、これだけですが、Lat/Longが非常に間違った答えを返すことがあります( http://workshops.boundlessgeo.com/postgis-intro/geography.html )。

Postgresでのジオメトリの入門: http://workshops.boundlessgeo.com/postgis-intro/

別の見方:米国の地図を見ると、ポイントが国内にあるかどうかをどのようにすばやく判断できますか? min/max lat/longを使用すると、AKとHI(およびプエルトリコ、グアムなど)を含める必要があり、lat/longのmin/maxボックスは、カナダ/メキシコなどとオーバーラップするため、突然機能しなくなります。しかし、ポイントを使用すると、クイックジオメトリチェックでST_Within()を介してチェックできます。

3
indiri

PostgreSQLの幾何データ型を使用する利点は、幾何関数と演算子を使用できることです。あなたの例はかなり単純で、機能する基本的なクエリはかなり単純です。幾何演算子を使用すると、パスと交差する、または円内に含まれる線のみを返すクエリを実行できます。これらの演算子がないと、より多くの行を返し、コードのチェックインを行う必要があります。とはいえ、幾何演算子はGIS関連ではないため、マッピングには適していません。関連するクエリをマッピングする必要がある場合は、PostGISを使用します。

1
Philip Tinney