V70以降のSMLの変更点
2019.9.3 更新 [1´.ObjectToMap()関数 (V2018以降)を追加] V70以降(正確にはV69の途中)、SMLにおいていくつかの変更がありましたので、整理しました。 1.ObjectToMap()関数 この関数は、ラスタやベクタのオブジェクト座標からその場所の地理座標を求める関数ですが、 ラスタに対して使用する際、注意が必要です。 V69の途中までは、ラスタの左上隅のピクセルの左上角の座標は (0, 0) でしたが、V69の途中から(1, 1)に変わりました。 ●左上隅のセルの左上角: (1, 1) ●左上隅のセルの中心 : (1.5, 1.5) ●右下隅のセルの右下角: (ラスタのカラム数+1、ライン数+1) 図1.テストデータ。1x1のラスタ。中心はE135度30分, N40度30分。 図2...ラスタのオブジェクト座標を(1.5, 1.5)で指定。セルの中心の緯度経度を表示。Good ○ 図3...(0.5, 0.5)とすると、1セル左上の緯度経度を表示します。Bad × <対応済みSML> ○ラスタのセル中心をポイントベクタに変換するSML(V69以降バージョン) ○太陽計算SML(太陽高度、方位、大気外日射量ラスタの計算) 1´.ObjectToMap()関数 (V2018以降) V2018の途中までは、ラスタの左上隅のピクセルの左上角の座標は (1, 1) でしたが、V2018の途中から(0, 0)に変わりました。 ●左上隅のセルの左上角: (0, 0) ●左上隅のセルの中心 : (0.5, 0.5) ●右下隅のセルの右下角: (ラスタのカラム数、ライン数) <対応済みSML> ○ラスタのセル中心をポイントベクタに変換するSML(V2018以降バージョン) 2.CreateControlPointGeorefFromGeoref()関数 CreateControlPointGeorefFromGeoref(R, g, numpoints, xsrc, ysrc, zsrc, xdest, ydest, zdest) の中の(xsrc, ysrc)は、ラスタの場合、これまで通り、左上隅のセルの左上角の座標が(0, 0) です。 ●左上隅のセルの左上角: (0, 0) ●左上隅のセルの中心 : (0.5, 0.5) ●右下隅のセルの右下角: (ラスタのカラム数、ライン数) CreateControlPointGeorefFromGeoref()関数に関しては、V69以前とV70以降でSMLを修正する必要はありません。 3.V70から座標参照系(CRS)が導入されました。これに伴い、SMLでも座標系の 設定のし方が変りました。 <対応済みSML> ○3次メッシュ生成SML ○4次メッシュ生成SML ○数値地図25000(地図画像)インポートSML ○数値地図200000(地図画像)インポートSML ○数値地図50000(地図画像)インポートSML 3-1) V69の頃の座標系の設定のし方(復習) 座標系を設定し、ジオリファレンスに渡している。 警告は出ますが、V72でも使用できます(2006/7/14現在)。 (例1)緯度経度 # Set Map Projection gll = GeorefAlloc(); class MAPPROJ projection; projection.System = "Latitude / Longitude"; projection.Datum = "Tokyo - Japan"; GeorefSetProjection(gll,projection); (例2)UTM class GEOREF georefproj; # Setup your old Maproj here class MAPPROJ proj; numeric zone = 10; proj.SetSystemUTM(zone); proj.Datum = "WGS84"; # View the details in the CRS window dialog and note the CRS ID numbers GeorefSetProjection(georefproj, proj); 3-2) ダイアログを開いて、座標系を選択する方法(V70以降) # choose Coordinate Ref System class GEOREF g; g = GeorefGetParms(g); 3-3) ダイアログを開かないで、座標系を設定する方法(V70以降) (例1a) 緯度経度、旧日本測地系(Tokyo / ジオグラフィック) class GEOREF g; class SR_COORDREFSYS crs; # Create parms - "Coordinate System", "Datum", "Projection" crs.Create("1280", "2393", "3393"); GeorefSetCoordRefSys(g, crs); なお、Create()メソッドの中の3つの数字は順に、座標系、測地系(datum)、 投影法を表す番号です。座標参照系の詳細タブにある番号です。 (参考)V7.0以降の座標系の設定のし方 今までのMAPPROJクラスの方法では、投影法や測地系をアルファベットの 名前で与える必要がありましたが、V70からは番号になりました。名称が 正しかったかどうか、心配する必要はもうありません。 (例1b) 緯度経度、世界測地系(JGD2000 / ジオグラフィック) class GEOREF g; class SR_COORDREFSYS crs; crs.Create("1280", "2304", "3304"); GeorefSetCoordRefSys(g, crs); (例2a) UTM座標、 旧日本測地系(Tokyo) class GEOREF g; class SR_COORDREFSYS crs; switch (zone) { case 51: crs.Create("1200", "2393", "25362"); break; #51 case 52: crs.Create("1200", "2393", "25364"); break; #52 case 53: crs.Create("1200", "2393", "25366"); break; #53 case 54: crs.Create("1200", "2393", "25368"); break; #54 case 55: crs.Create("1200", "2393", "25370"); break; #55 case 56: crs.Create("1200", "2393", "25372"); break; #56 南鳥島 } GeorefSetCoordRefSys(g, crs); (例2b) UTM座標、世界測地系(JGD2000) class GEOREF g; class SR_COORDREFSYS crs; switch (zone) { case 51: crs.Create("1200", "2304", "25362"); break; #51 case 52: crs.Create("1200", "2304", "25364"); break; #52 case 53: crs.Create("1200", "2304", "25366"); break; #53 case 54: crs.Create("1200", "2304", "25368"); break; #54 case 55: crs.Create("1200", "2304", "25370"); break; #55 case 56: crs.Create("1200", "2304", "25372"); break; #56 南鳥島 } GeorefSetCoordRefSys(g, crs); (例3) 19座標系, 世界測地系(参考SML> sdf_georef_v13.sml) class GEOREF g; class SR_COORDREFSYS crs; switch (zone) { case 1: crs.Create("1200", "2304", "25494"); break; case 2: crs.Create("1200", "2304", "25495"); break; case 3: crs.Create("1200", "2304", "25496"); break; case 4: crs.Create("1200", "2304", "25497"); break; case 5: crs.Create("1200", "2304", "25498"); break; case 6: crs.Create("1200", "2304", "25499"); break; case 7: crs.Create("1200", "2304", "25500"); break; case 8: crs.Create("1200", "2304", "25501"); break; case 9: crs.Create("1200", "2304", "25502"); break; case 10: crs.Create("1200", "2304", "25503"); break; case 11: crs.Create("1200", "2304", "25504"); break; case 12: crs.Create("1200", "2304", "25505"); break; case 13: crs.Create("1200", "2304", "25506"); break; case 14: crs.Create("1200", "2304", "25507"); break; case 15: crs.Create("1200", "2304", "25508"); break; case 16: crs.Create("1200", "2304", "25509"); break; case 17: crs.Create("1200", "2304", "25510"); break; case 18: crs.Create("1200", "2304", "25511"); break; case 19: crs.Create("1200", "2304", "25512"); break; } GeorefSetCoordRefSys(g, crs); 2006.8.30/UTM, 南鳥島のゾーン情報追加 2006.8.4改定 2006.7.24改訂 2006.7.14 2019.9.3/ObjectToMap()関数 (V2018以降)追加 (株)オープンGIS 文責 輪座