SQLServerのgeographyとgeometryの違い

SQLServerを使用して、位置情報を使用することになったので、下記の2つについて違いを調べてみた。

  • geography
  • geometry

geography

地球の丸み(楕円)を考慮して、距離を出す場合に使用する。

下記は、指定位置の近い順に表示するSQL

SELECT
        *
    FROM
        LATITUDE_LONGITUDE
    ORDER BY
  geography::STPointFromText(
    'POINT(' + CAST(LONGITUDE as varchar) + ' ' + CAST(LATITUDE as varchar) + ')', 4326)
    .STDistance(geography::STPointFromText('POINT(138.4292727 36.3016805)', 4326))

geometry

平面での距離を出す場合に使用する。
三平方の定理を使用して距離を出した場合と同様の結果となった。

下記は、指定位置の近い順に表示するSQL

geometryで近い順に表示
SELECT
       *
    FROM
        LATITUDE_LONGITUDE
    ORDER BY
  geometry::STPointFromText(
    'POINT(' + CAST(LONGITUDE as varchar) + ' ' + CAST(LATITUDE as varchar) + ')', 4326)
    .STDistance(geometry::STPointFromText('POINT(138.4292727 36.3016805)', 4326))
三平方の定理から近い順に表示
SELECT
        *
    FROM
        LATITUDE_LONGITUDE
    ORDER BY
        POWER(ABS(LATITUDE - 36.3016805), 2) + POWER(ABS(LONGITUDE - 138.4292727), 2)

位置情報の取得用途であれば、geographyがよいと感じる。