GEOGRAPHYとGEOMETRYの相互変換


GEOGRAPHYは球体ベース
GEOMETRYは平面ベース

変換したいときはWKTなので相互にやりくりはできる。

DECLARE @geo AS GEOGRAPHY;
DECLARE @geom AS GEOMETRY

SET @geo= GEOGRAPHY::STGeomFromText('POLYGON ((138.7463888888890 45.7519444444444 ,132.9972222222220 40.6691666666667 ,132.9972222222220 37.2861111111111 ,130.4975000000000 36.0030555555556 ,129.7977777777780 35.2197222222222 ,126.9980555555560 33.0033333333333 ,124.9980555555560 33.0033333333333 ,124.9983333333330 30.0036111111111 ,122.9983333333330 28.0038888888889 ,122.9986111111110 24.7080555555556 ,122.9986111111110 24.2033333333333 ,122.9986111111110 23.0041666666667 ,131.9977777777780 23.0044444444444 ,131.9975000000000 30.0036111111111 ,134.9972222222220 30.0036111111111 ,140.3469444444440 31.6702777777778 ,143.2300000000000 33.1702777777778 ,144.3463888888890 35.2200000000000 ,144.9127777777780 40.2194444444444 ,146.3791666666670 42.7858333333333 ,145.7291666666670 43.2691666666667 ,145.8625000000000 43.3358333333333 ,145.8300000000000 43.3861111111111 ,145.8041666666670 43.4358333333333 ,145.5791666666670 43.4025000000000 ,145.3625000000000 43.5025000000000 ,145.3125000000000 44.0525000000000 ,145.7458333333330 44.4358333333333 ,145.7455555555560 45.7522222222222 ,138.7463888888890 45.7519444444444))', 4326);
SET @geom = GEOMETRY::STGeomFromText(@geo.STAsText(),@geo.STSrid);

SET @geo = GEOGRAPHY::STGeomFromText(@geom.STAsText(),@geom.STSrid);

SELECT @geom;
SELECT @geo;

GEOGRAPHY⇒GEOMETRYはあまり使う機会がないだろうが…
緯度、経度 = 図座標 [Y,X] = 正距円筒図法
一昔前のゲームのように長方形から出ると世界を一周できる
当然距離や面積が正しく出ないので楕円考慮の投影変換が必要となるがProjとかあるしこれはアプリ側の仕事

カテゴリー: 開発 タグ: パーマリンク