SQL Server(T-SQL)にて、空間データ型(geograhy)で遊んだ備忘録 Part.2

前回: mrgchr.hatenablog.com

意図しないSRIDのデータが混ざらないようにする

どうやらGIS系データではSRIDが非常に重要で、混ざらないように注意する必要があるようです。
SQLらしく制約で解決しましょう。

ALTER TABLE [dbo].[Locations]
  ADD CONSTRAINT CHK_Locations_GeographicalPoint_SRID4326
  CHECK ([GeographicalPoint].[STSrid] = 4326);

これでSRID4326指定されていないデータはテーブルに存在できなくなりました。
異なるSRIDの座標情報をSRID4326だと指定してしまったりなど、ヒューマンエラーは防ぎようがありませんが。

意図しない形のデータが混ざらないようにする

前回のLocationsテーブルの[GeographicalPoint]列はPointと言っているので、Point型を期待していますが、LINESTRINGだろうがなんだろうが入れることはできます。
これもSQLらしく制約で解決しましょう。

ALTER TABLE [dbo].[Locations]
  ADD CONSTRAINT CHK_Locations_GeographicalPoint_POINT
  CHECK ([GeographicalPoint].STGeometryType() = 'POINT');