2017年04月12日

シンボルの分類に従ったラベリングにはシンボルクラスの取得

シェープファイルとかジオデータベースをArcMapで表示するとき、その属性値に従ってシンボルの色や大きさを変えたりすることは多いと思う。例えば都市のポイントデータを表示するとき、人口50万人以上の都市は16ptの円で、10〜50万人の都市は12ptで、というようにして、記号の大小で人口の多い少ないを表示する、という方法だ。

せっかくだから、ここに都市名をラベリングするときも、シンボル表示で使ったクラス分けを流用してみたくならないだろうか。なるかなぁ、なるよね、きっと。うんうん。

さっきの例だと人口が50万人以上の都市はゴシック体のボールドで、人口10〜50万人の都市は通常のゴシック体で、人口10万人以下の都市は小さい明朝体で、といったように表示をしたい、という場合だ。

そんなときは、シンボルの大小を決めた後、レイヤプロパティのラベルタグ内の「シンボルクラスの取得」を使うといいらしい。

今回の説明ではNatural EarthのサイトからダウンロードしたPopulated Placesのデータを使っている。

ダウンロードはこちらから。
Populated Places | Natural Earth
http://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-populated-places/

上記ページの下の方に、Population ranksという段落があって、ArcMapのフィールド演算でこの式を使うといいよ、という例が載っている。それに従ってpoprankというフィールドを追加して、この式を実行した。

1.レイヤプロパティの「シンボル」タブで、シンボルのクラス分けを決めておく。

今回はpoprankが10より小さい都市、つまり[pop max]が20万人以下は小さい黒丸で、それより大きい都市はそれぞれpoprankに従ってシンボルが変わるように設定した。そうするとこんな感じの地図ができる。

i17040601.png
(図をクリックすると拡大した図が表示されます)

2.レイヤプロパティの「ラベル」タグ内の上の方にある「方法:」のところで「フィーチャのクラスを定義し、クラス毎に異なるラベリングを行います。」を選択する。

3.2.の下のボックス内の表示が変わる。「シンボルクラスの取得」をクリックする。

i17040602.png

4.「クラス:」のところに、シンボルのクラスに対応するラベルが表示される。(シンボルタブの「ラベル」のところに表示されている値がリストされる。)

「クラス:」のところで、1つ1つクラスを選びながら、対応させたいフォントやサイズ、色、配置プロパティなどを設定していく。

poprankが11の地名は、游ゴシック10ptで表示する設定。
i17040603.png

poprankが12の地名は、游ゴシック12pt。
i17040604.png

poprankが13は、游ゴシック12ptボールド。
i17040605.png

poprankが14は、游ゴシック14ptボールド。
i17040606.png

poprankがそれ以外は、游明朝8ptイタリック。
i17040607.png

(結構手間だなぁ…。ぼそっ。)

ともあれ、すべて設定し終わるとこんな感じで地名が表示される。

i17040608.png

悪くはないかもしれないけれど、他と違うように表示するにはその分「違うように表示してね」という設定をしてあげないといけないんだなぁ。そりゃ当たり前だけど…。

まま、ご参考まで〜。
posted by たかはし at 11:00| Comment(0) | ArcGIS

2017年04月05日

自動でちょっとだけ気が利いたラベリングにはMaplexエンジンを

ArcMapでポリゴンにラベリングをすると、デフォルトでは水平に文字が表示される。こんな感じ。

i17032701.PNG
(図はクリックすると拡大します)

データは政府統計の総合窓口 e-Statのサイト(http://www.e-stat.go.jp/)からダウンロードした平成22年国勢調査 町丁・字等別境界データである。表示しているのは東京駅のちょっと北、神田とか秋葉原のあたりだ。ラベルが重なる場合は、ラベルを表示してくれないので、いくつか町丁目名が表示されていないところがある。

これを「レイヤプロパティ>ラベリングタブ」の「配置プロパティ」を開いて、「配置」タブの中で「常に直線」を選んでみる。

i17032702.PNG

そうすると…

i17032703.PNG

もう少し表示されるラベルが増えてくる。ここでもっと地名を表示させたい場合は、アノテーションに変換して一つずつラベル配置を調整するしかないんだろうか。それはちょっと大変そう…。またGISのしもべ状態になりそうだ。

データを入力して最初に地図化した時って、どこで値が突出しているのか、ちょっと地名が確認ができればいいだけのことも多い。そこまで凝った手作業をしなくても、もうちょっと自動で何とかラベリングしてくれないかなーと思っていたら、あったあった。データフレームのプロパティの「一般」タブに「ラベリングエンジン」というのがある。デフォルトは「標準ラベルエンジン」だけど「Maplexラベルエンジン」を選ぶ。

i17032704.PNG

Maplexにしてから、もう一度レイヤプロパティ>ラベルタブの「配置プロパティ」を開く。すると、インタフェースがこんな風に変化している。

i17032705.PNG

なんだかいろんなことができそうな感じ〜♪

試しに「ラベル調整ルール」タブで「フォントサイズを縮小」をオンにして、その「オプション」ボタンを押してみる。

i17032716.png

今は8ptで表示されている地名を、0.5ptずつ、最小で4ptまでフォントサイズを小さくして、ラベリングを試みてくれるらしい。この設定で表示してみると、こんな感じ。

i17032708.PNG

やっぱり4ptだとちょっと小さすぎるかな。以下は、1)レイヤプロパティウインドウ上でフォントを游明朝Demi Bold 10ptにして、2)「配置プロパティ」ウィンドウの「ラベル調整ルール」タブ、「フォントサイズを縮小」で、0.5ptずつ最小5ptまで縮小するよう設定、3)「配置プロパティ」の「ラベル位置」タブで、「字間をあける」をオンにして、そのオプションで最大60%まで字間を広げる設定にしたものである。

i17032709.PNG

うーん、どうだろう。美しく見やすい地図を作るには遠いのかもしれない。でも、手っ取り早く地名を確認したい、というだけならこれでも悪くなさそうである。まぁ自動とはいえ設定できることが多くて、きりがなさそうではあるけど。

あっ、せっかく国勢調査の境界データを使ったので、最後に人口っぽい何かを。とりあえず何もデータを結合しなくても境界データについてくる人口と世帯数を使おう。下の地図は人口を世帯数で割った、1世帯当たりの人口である。

i17032715.png

鍛冶町2丁目の周辺は1.5〜2人だけど、それ以外のところは1〜1.5人の世帯が多いようだ。大まかに言って、1〜2人世帯が多くて、どっちかというと1人世帯の方が多いという地域らしい。

ここに年齢別のデータを結合したらどこそこに高齢者の一人暮らしが多い地域がある、といった様子も見えてくる…、かもしれない。
posted by たかはし at 11:00| Comment(0) | ArcGIS

2017年03月27日

緯度経度データの世界地図表示には投影座標系を設定しよう

最近、2地点の緯度経度座標からラインを発生させて地図を作るという作業をしている。まずは緯度経度の座標はエクセルかなんかで、ID番号、始点X座標(経度)、始点Y座標(緯度)、終点X座標(経度)、終点Y座標(緯度)が一行に入っている表に準備しておく。

i17032601.PNG

あ、都市の緯度経度はかなり適当に取得したものなので信じないでください。はい。

表ができたら、ArcToolboxの 「データ管理>フィーチャ>XY 座標 →ライン(XY to Line)」を使って、ラインを発生させる。

i17032602.PNG

これで出来上がるのがこんなラインのデータだ。ArcMap立ち上げ直後にXY to Lineを実行したので、地図はXY to Lineツールを使うときに空間参照の項目で指定したGCS_WGS_1984で表示されている。

i17032603.PNG

なんだか少し気持ち悪くないだろうか。そう、背景の世界地図を超えてびよーんとでっばった線が2つほどあるのだ。1つは東京toサンフランシスコの緑色の線、もう一つはサンフランシスコto香港の青い線である。

どうやら、日付変更線を超える都市まで伸びる線は、本来の位置から360度回った位置まで伸ばして表示されるようなのだ。どちらから生えるかは、始点を基準にしているらしい。つまり、東京toサンフランシスコなら東京を起点に線を伸ばし、サンフランシスコto香港ならサンフランシスコを起点に伸ばすのだ。

ううむ、しかしできれば日付変更線を超えるときは、そこで一度線が切れて、逆側に線を回りこませたい。東京toサンフランシスコなら、一度ハワイのあたりで線が切れて、切れた残りの線が地図左側からまた伸びてきて欲しい。

当初これをやるには、180度のところで線を一度切って、360度足したり引いたりするという、手作業エディットが必要なのかなーと思っていた。んが、しかし、いつも経度0度を中心に地図を表示するわけではない。日本付近を中心にすることだってあるだろう。そのたびに、地図の端にあたる経度で線を切って360度移動、というのは、私がGISにこき使われるしもべ状態ではないか。

ま、実際その作業を何回かして、ある時ふと気づいた。データフレームの座標系を投影座標系に設定すると、線を切らなくてもきちんとそれが回り込むのだ。

上のXY to Line実行直後の地図は、緯度経度をそのままXY座標として表示している。それを例えば、ミラー図法(投影座標系>世界範囲の座標系(WGS 1984))を指定する。これはデータフレームのプロパティ>座標系タブで設定する。

i17032604.PNG

そうすると、これまでびよーんと伸びていた線がきちんと左右に回り込んでくれるのだ。

i17032605.PNG

ああ、素敵。ついでに、データフレームのプロパティ内では、中央子午線も指定できる。例えば、東経140度を真ん中にすると…。

i17032608.PNG

ちゃんと日本付近を中心に表示してくれる。それだけではなくて、今度はサンフランシスコからロンドンに伸びる線がきちんと地図の左右で回り込んでくれる。

i17032607.PNG

あのGISにこき使われていた時間はなんだったのか…、と思わなくもない。きっと知っている人は知っている話に違いない。まぁそれでもこれでその作業から解放されて、ひとまずはめでたしめでたしなのでした。
posted by たかはし at 10:15| Comment(0) | ArcGIS