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がよいと感じる。