V70 以降の SML の変更点
(TNTmips)
V70 以降(正確には V69 の途中)、SMLにおいていくつかの変更がありましたので、整理しました。
ObjectToMap() 関数 (V70 以降)
- この関数は、ラスタやベクタのオブジェクト座標からその場所の地理座標を求める関数ですが、ラスタに対して使用する際は注意が必要です。
- 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
ObjectToMap() 関数 (V2018 以降)
- V2018 の途中までは、ラスタの左上隅のピクセルの左上角の座標は (1, 1) でしたが、V2018 の途中から (0, 0) に変わりました。
- 左上隅のセルの左上角: (0, 0)
- 左上隅のセルの中心 : (0.5, 0.5)
- 右下隅のセルの右下角: (ラスタのカラム数、ライン数)
- 対応済み SML
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 を修正する必要はありません。
V70 から座標参照系 (CRS) が導入されました
- V70 から座標参照系 (CRS) が導入されました。これに伴い、SML でも座標系の設定の仕方が変りました。
- 対応済み SML
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);
ダイアログを開いて、座標系を選択する方法 (V70 以降)
- (例)
# choose Coordinate Ref System class GEOREF g; g = GeorefGetParms(g);
ダイアログを開かないで、座標系を設定する方法 (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 からは番号になりました。名称が正しかったかどうか、心配する必要はもうありません。
- なお、Create() メソッドの中の3つの数字は順に、座標系、測地系 (datum)、投影法を表す番号です。座標参照系の詳細タブにある番号です。
- (例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);
作成
(V2018 以降追加) 更新
更新
株式会社オープン・ジー・アイ・エス