計算フォーム
それぞれの値を入力し、求めたい項目の [計算] ボタンを押してください。
計算フォームは AMP には非対応なので完全版を表示してください。 地図上の長さ mmcmm実際の長さ mkm
縮尺の逆数 (1/f)
$(function () { // 地図上の長さを計算 $('#btn_ml').click(function() { // 値取得 var ml = Number($('#ml').val()); var rl = Number($('#rl').val()); var scale = Number($('#scale').val()); var ml_unit = $('[name=ml_unit]').val(); var rl_unit = $('[name=rl_unit]').val(); // 計算 var out_ml = (rl * rl_unit) * (1 / scale) / ml_unit; // 出力 $('#ml').val(String(out_ml)); }) // 実際の長さを計算 $('#btn_rl').click(function() { // 値取得 var ml = Number($('#ml').val()); var rl = Number($('#rl').val()); var scale = Number($('#scale').val()); var ml_unit = $('[name=ml_unit]').val(); var rl_unit = $('[name=rl_unit]').val(); // 計算 var out_rl = myRound(((ml * ml_unit) / (1 / scale) / rl_unit),6); // 出力 $('#rl').val(String(out_rl)); }) // 縮尺を計算 $('#btn_scale').click(function() { // 値取得 var ml = Number($('#ml').val()); var rl = Number($('#rl').val()); var scale = Number($('#scale').val()); var ml_unit = $('[name=ml_unit]').val(); var rl_unit = $('[name=rl_unit]').val(); // 計算 var out_scale = Math.round(1 / ((ml * ml_unit) / (rl * rl_unit))); // 出力 $('#scale').val(String(out_scale)); }) // 四捨五入関数 function myRound(val, precision) { //小数点を移動させる為の数を10のべき乗で求める //例) 小数点以下2桁の場合は 100 をかける必要がある digit = Math.pow(10, precision); //四捨五入したい数字に digit を掛けて小数点を移動 val = val * digit; //roundを使って四捨五入 val = Math.round(val); //移動させた小数点を digit で割ることでもとに戻す val = val / digit; return val; } // 数字のみ入力(全角は対象外) $("input[type='text'].mapscale").on('keydown', function(e) { var k = e.keyCode; // 0~9, テンキ―0~9, スペース, backspace, delete, →, ←, - Ctrl, Shift 以外は入力キャンセル if(!((k >= 48 && k = 96 && k <= 105) || k == 32 || k == 8 || k == 46 || k == 39 || k == 37 || k == 189 || k == 9 || k == 16 || k == 67 || k == 86 || k == 88 || k == 190)) { return false; } }); });
はじめに
以前にも縮尺と精度についてブログで取り上げましたが、学生時代に恩師からこのように学びました。
GIS データに縮尺の概念はない。精度が重要である。
しかし、20年経った現在、GIS の世界で「縮尺」という用語は割とよく目にしますし、過去には存在しなかった新しい用語も登場しています。
ここでいう「GIS」とは、Google Maps や地理院地図をはじめとした、ディスプレイ上に表示されるデジタル地図を含むのですが、今回はデジタル地図の世界で意味する「縮尺」について考えていきます。
縮尺とは何か
そもそも、縮尺とは何かですが、地図における縮尺の定義は以下のとおりです。
地物を模した地図の1辺の長さの、実施の1辺の長さとの比
Wikipedia 参考
地物とは地図に描かれる道路や建物です。例えば、1km 四方の敷地を 1:25,000 の縮尺で地図上に描くと図上 4cm になります。
縮尺の計算式
地図上の長さ = 実際の長さ × 縮尺
- 地図上の長さ (L) = D / S
- 実際の長さ (D) = S * L
- 縮尺の逆数 (S) = D / L
単純な式ですが、単位を変換すると計算が面倒で私は暗算できませんので計算フォームを作成しました。ページ上部の計算フォームを使用してください。
なぜ GIS データには縮尺の概念がないのか
GIS データは紙地図と異なりいくらでも拡大や縮小ができるので縮尺の概念はありません。
ただし、縮尺の概念がないのは「GIS データ」であって、「GIS」の世界全般に縮尺の概念がない訳ではありません。紙であれ、ディスプレイであれ、地図を表示するとそこには必ず縮尺が存在します。
GIS ソフトウェア上の縮尺
ほとんどの汎用 GIS ソフトウェアは、マップ(ソフトウェアの用語として、以降地図をマップと書きます)を表示すると、どこかに縮尺の表示があります。ArcMap ではデフォルトで画面上部に表示される [標準] ツールバー内、ArcGIS Pro では画面左下、QGIS では画面右下に縮尺が表示されています。
この縮尺は正確な値でしょうか。
本来、1:25,000 で表示されているなら地図上に描いた 1平方km のポリゴンは 1辺 4cm になるはずです。しかし、実際に計測してみると 4cm ではありません。
縮尺の表記を変更して「1cm = 1km」と表示される縮尺にしましたが、ThinkPad X260 (FullHD) だと地図上 1km は約 5mm です。
GIS ソフトウェア上の「縮尺」は正確ではないのです。多くの汎用 GIS ソフトウェアは、OS のスケーリング レベル設定が 100% で 1インチあたり 96ドットのディスプレイ (96dpi) の場合に正確な縮尺となります。ThinkPad X260 の 13 インチ ディスプレイは約 175dpi なのでスケーリング レベルが 100% だと小さく表示されてしまうのです。逆に 40インチ ディスプレイの解像度だと 10cm 以上で表示されています。
(多くの)GISソフトウェアで表示される地図の縮尺はディスプレイのスケーリング レベルが 100% で 96dpi の値
と理解してください。
プロジェクターを使った講義だとどうやっても縮尺は正確に示せない
ディスプレイは同じ解像度でもモデルによって実際のサイズは異なります。例えば、1:25,000 の縮尺として表示した地図を ThinkPad X260 の 13インチ ディスプレイと 40インチのディスプレイに複製で表示するとこのようになります。
当然、同じ縮尺のはずなのに見た目の大きさは異なります。
大学の講義などで手元のノートPC のディスプレイをプロジェクターに大きく映して説明しますが、そこで「縮尺」というと、手元の PC上の縮尺なのか、プロジェクターでスクリーンに投影された地図の縮尺なのか分かりません。どちらかが正確ならどちらかが間違いとなります。
レイアウト上の縮尺は正確
これまで説明した内容はディスプレイに表示されたマップの場合に限ります。
ArcGIS Pro、ArcMap、QGIS にはレイアウトという用紙に地図や凡例などを配置して調製する機能があります。この場合の縮尺は用紙に対する値なので正確です。ディスプレイ上に見えているものはあくまで「用紙」を縮小(拡大)表示しているだけなので、用紙に表示された地図の縮尺は正確と言えるのです。
ディスプレイ上でもマップを正しい縮尺で表示する方法
レイアウト上ではなく、通常のマップ(ArcMap なら「データ フレーム」、ArcGIS Pro なら「マップ」)でも画面上の縮尺を正確に表示させたいと思った方は、以下の操作を行ってください。
すべてのソフトウェアに適用できる方法
Windows はスケーリング レベルを変更して GUI の表示拡大率を変更することができます。スケーリング レベルが 100% なら 96dpi なので、正しい dpi になるよう拡大率を変更します。
指定する拡大率は、マップ上で適当な地物を物差しで計測して計算します。たとえば、1km の地物は 1:25,000 で図上 4cm となりますが、実際の値が 2cm だった場合、拡大率は 2倍の 200% となります。
拡大率 (%) = ディスプレイ上で計測した長さ ÷ 地図上の本来の長さ(地図上の本来の長さ = 実際の長さ × 縮尺)
Windows の設定方法はこちらを参考にしてください。
本来の縮尺で表示される長さとディスプレイ上の長さが一致しました。
ただ、Windows でスケーリング レベルを変更すると他に色々と影響がでてきます。たとえばディスプレイに表示できる情報量が少なくなってしまいます。
ArcMap の場合
ArcMap は「Advanced ArcMap Settings Utility」から設定できます。スタート メニューから検索するか、C:\Program Files (x86)\ArcGIS\Desktop10.x(x はバージョン)\Utilities\AdvancedArcMapSettings.exe を起動してください。
Advanced ArcMap Settings Utility → [その他] タブ → [モニター設定]
ArcMap のスケールの精度が向上するように、モニター設定をカスタマイズできます。モニターの寸法がカスタマイズ為れていない場合、スケール設定はオペレーティング システムから報告される表示デバイスの DPI 値から計算されます。検出されたモニターで作業している間、デフォルト値には、ArcMap で計算された値がスケールの目的で反映されます。
GUI より引用
この設定により、他のアプリケーションに影響を与えることなくデータ フレームの縮尺を正確にできますが、シンボルやラベルの「ポイント」値もスケーリングされてしまい、拡大率が高くなるとシンボルが小さく見えなくなってしまう難点があります。
QGIS の場合
QGIS 3.6 で実測すると 96dpi 相当の表示縮尺となっていました。QGIS には「拡大」という項目があり、これを Windows のディスプレイ表示スケールで設定した相当に拡大すると、正確な縮尺となります。この拡大はマップのみを拡大するので凡例のシンボル サイズはデフォルトのままでした。
ArcGIS Pro の場合
残念ながら、ArcGIS Pro 2.3 時点では ArcMap や QGIS 3.6 のようにアプリケーション固有の拡大率設定はないようです。
ArcGIS Pro では、ArcMap にはなかった機能として縮尺表記のエイリアスが設定できます。面倒ですが、エイリアスに実際の縮尺を記述することで見た目だけ整えるという回避方法があります。
- ArcGIS Pro 画面右下の縮尺コンボボックスをクリック → [カスタマイズ] → [縮尺プロパティ] ダイアログから設定
まとめ
GIS ソフトウェアにおける縮尺について考えてきました。まとめとして、
- 主な汎用 GIS ソフトウェアで表示される縮尺はスケーリング レベル 100% で 96dpi 相当のディスプレイにおける値
- GIS は用紙に地図を描くまで縮尺の数値には(あまり)意味がない
と理解していただき、ソフトウェアに設定されている縮尺の値が画面に見えている地物の大きさではないと意識してください。
なお、投影法によっては一枚の地図内で縮尺が定まらないものもあります。たとえばメルカトル図法は赤道の縮尺のみ正確で、極に近づくほど拡大率が高くなるため、図上に一意の縮尺を記載することは不適切です。GIS ソフトウェアではどんな投影法でも縮尺が表示されますが、その縮尺はある場所の縮尺(メルカトル図法の場合は赤道上)となるので注意してください。