/// <summary> ///マップのインスタンスを生成しないコンストラクタ ///<para>DEMデータ情報について整理し、マップを管理する準備を行います。</para> /// </summary> /// <param name="fileName">ファイル名</param> /// <param name="info">マップ情報</param> /// <param name="parentFileName">親ファイル名<para>元ファイルが圧縮ファイル等であった場合に利用してください。</para></param> public DemSet(string fileName, Info info, string parentFileName = "") : base() { this.FileName = fileName; this.info = info; this.map = null; // メモリ空間を始めは食わせたくないので、マップのサイズはセットしない。 this.ErrorMsg = ""; }
/// <summary> /// 渡されたマップを用いて初期化する /// <para>呼び出すのは一回きりにしてください</para> /// </summary> /// <param name="info">マップの情報</param> private void Init(Info info) { if (this.dict.Count == 0) { this.mapSize = info.Field.Size; this.amountOfMeshInMap = info.Size; this.meshSize = new Blh(this.mapSize.B / (double)this.amountOfMeshInMap.y, this.mapSize.L / (double)this.amountOfMeshInMap.x); this.offset = this.GetMapOffset(info); } return; }
/// <summary> /// マップのオフセットを計算して返す /// <para>マップを世界中に敷き詰めたとしたとき、原点(緯度経度0度)を含むマップの南西にあるコーナー座標と原点との差をオフセットと定義しています。</para> /// </summary> /// <param name="info">マップの情報</param> /// <returns>オフセット量</returns> private Blh GetMapOffset(Info info) { Blh underLeft = info.Field.UpperLeft; underLeft.Unit = AngleUnit.Degree; // 単位を度に統一する underLeft.DatumKind = Datum.WGS84; // 測地系も統一 Blh size = info.Field.Size; size.Unit = AngleUnit.Degree; // 単位を度に統一する size.DatumKind = Datum.WGS84; // 測地系も統一 double remainderLat = underLeft.B % size.B; double remainderLon = underLeft.L % size.L; if (this.CheckNearlyZero(remainderLat)) remainderLat = 0.0; if (this.CheckNearlyZero(remainderLon)) remainderLon = 0.0; if (remainderLat != 0.0 && underLeft.B > 0.0) remainderLat -= size.B; // 0なら一致している if (remainderLon != 0.0 && underLeft.L > 0.0) remainderLon -= size.L; if (this.CheckNearlyZero(remainderLat)) remainderLat = 0.0; if (this.CheckNearlyZero(remainderLon)) remainderLon = 0.0; if (this.CheckNearlyZero(remainderLat + size.B)) remainderLat = 0.0; // 足したら0に近くなるようなら0と丸める if (this.CheckNearlyZero(remainderLon + size.L)) remainderLat = 0.0; return new Blh(remainderLat, remainderLon, 0.0, AngleUnit.Degree, Datum.WGS84); }