著者アーカイブ 杉浦

著者:杉浦

地図を表現する画像タイルとベクトルタイル

 google mapの様な拡大縮小される地図を描画する際には、地図の画像を用いる必要があります。しかしながら、倍率に合わせて用いるべき地図の画像の解像度は異なります。世界地図を見たいのに、細かい街まで描画された画像が送られてきた場合、送受信者共にPCの資源を大きくムダにします。m単位の地図を見たいのに、引き伸ばされた日本地図を渡されても何が何だかわかりません。そのような問題を解決するためにタイルを用いた手法が使われています。下のGIFはタイルを選択する動作です。地図の範囲と倍率に合わせて異なるタイルを用意することによって、無駄の少ない地図のやり取りを実現しています。
 
 タイルによって地図を表現する手法には画像タイルとベクトルタイルの二種類の手法が用いられています。目的に合わせて使い分けられたり、併用されたりです。
 画像タイルを用いる手法はいたって単純、そのままタイルの様に画像をタイルらしく並べるだけの手法です。256x256pxの画像が用いられ大体軽量です。衛星写真などはたまに圧縮されにくい画像が現れ重くなります。画像タイルのみで作られた地図は加工に不向きです。画像認識を行い、解釈して、解釈に応じて加工して、と手間がかかります。
 ベクトルタイルはある区域の情報をテキストとして点、線、面、それぞれの意味するモノを格納したタイルです。[始点,終点],国道n号線,道幅6m;[点A,点B,点C,点D],浜松駅、みたいな感じです。この手法は加工を行いやすいです。属性に条件をかけ、渡された点、線、面の端点や頂点の情報を元に描かれる図形の色や形を変えるだけで加工が行えます。
 画像タイルと同じ範囲のベクトルタイルを用意し、画像タイルを背景に加工されたベクトルタイルを重ねる、というだけでとても便利になります。

著者:杉浦

国土地理院の立体地図

 国土地理院は立体地図(地理院地図3D・触地図)という立体地図関連をまとめたサイトを公開しています。このサイトは3D版の地理院地図や3Dプリンタで使える3D地図モデル作成ツールなどを無料で公開しています。ツールはページのサンプルにもある様に、日本地図に限らず、屋内の地図の様な独自の地図も作成可能です。
 地理院地図3Dは多機能な上、大量の描画で動作が重いです。3D地図は地理院地図Globe トップページ地理院地図の3D機能説明を読むと使いやすいです。地理院地図から直接移動すると操作が分からないまま放り出されて慣れるまでなかなか時間がかかりました。これらのページは3D地図で何ができるか詳しく教えてくれます。操作が面倒でも良品のサンプルがあります。3D地図から一地域だけを抜き出した国土地理院スタッフおすすめの軽い3Dモデルサンプル立体地図を見る(ギャラリー編)はそれだけでも結構楽しめます。

著者:杉浦

スタック

スタックは、コンピュータで用いられる基本的なデータ構造の1つで、データを後入れ先出し(LIFO: Last In First Out; FILO: First In Last Out)の構造で保持するものである。抽象データ型としてのそれを指すこともあれば、その具象を指すこともある。

 wikipediaより引用
 スタックはその名の通り積み重ねる様なデータ構造のことを言います。スタックではデータの操作を下図の様に行います。新たにデータが来た場合、一番上に重ね置きし、新たにデータを取り出す場合、一番上から取り出す、という動作です。それぞれプッシュ、ポップと呼ばれます。

 スタックはデータを格納した一番上のデータの参照のみで多数のデータを少ない値で扱いきれます。一番上のデータから、そのデータサイズ分参照をずらすことによって、データがいくらプッシュポップされようとも常に一番上のデータを参照し続けられます。
 スタックは最新の情報のみしか参照できない代わりに、簡単に小さなデータ領域で無数のデータを処理できるデータ構造です。この利点欠点は関数の呼び出し、抜け出しと相性が良いです。プログラミング言語は自然言語と異なり、関数が表られます。関数が現れたとき、その関数のある場所に飛び、関数の処理が終わった場合、関数が現れた場所に戻る必要があります。スタックはこれを簡単に行います。関数の呼び出し抜け出しにおいてスタックは、関数が現れた場合現れた場所をプッシュし関数へ移動、関数から抜け出す場合ポップして呼び出された場所を取り出しそこへ移動、という動作で処理を行います。 この関数の積み上げを自己のみで行う処理、自己参照を繰り返す処理が再帰処理と呼ばれます。
 とにかく入れ子構造と相性が良いです。

文字列:(()(()))を読むとした時、(を読んだらプッシュ、)を読んだらポップとする。
1文字目:(
	動作:プッシュ
	動作後のスタック:(
2文字目:(
	動作:プッシュ
	動作後のスタック:((
3文字目:)
	動作:ポップ
	動作後のスタック:(
4文字目:(
	動作:プッシュ
	動作後のスタック:((
5文字目:(
	動作:プッシュ
	動作後のスタック:(((
6文字目:)
	動作:ポップ
	動作後のスタック:((
7文字目:)
	動作:ポップ
	動作後のスタック:(
8文字目:)
	動作:ポップ
	動作後のスタック:

 上記の様に入れ子の始めを積み上げ、入れ子の終わりで始めを一つ消すといった具合です。スタックが空の時にポップが走れば不正な入れ子の終わりがある、スタックが空で終了しないならば入れ子の始めが多すぎる、といったことが分かります。

著者:杉浦

地理院地図(電子国土Web)

 地理院地図(電子国土Web)は国土地理院の公開している電子地図です。3D版に地理院地図globというものもあります。
 
 国土地理院というだけあって日本に縁の深い情報と地図を絡めて表示する機能がとても優れています。下図の様な地域の避難場所を始めとして、日本の歴史、地理、災害、土地の特徴など様々です。

 単にこの画面だけのサービスでも有用ですが、ソースコードの公開、よく使われるライブラリとの連携方法などの説明もあり、開発者向けでもあります。

著者:杉浦

ダミーデータ作成サービスMockaroo

 Mockaroo – Random Data Generator and API Mocking Tool | JSON / CSV / SQL / Excel
 Mockarooは様々なダミーデータを作成してくれる基本無料サービスです。無料ではダウンロード数の限界が1000個に制限されます。有料の場合、10万個、1億個などの大容量のデータを作成することができ、無料に比べて高速にダウンロードできます。無料でも簡単な動作テストに使用する程度ならば問題ありません。

 リンク先のタイトルにある様にMockarooはJSON、CSV、SQLを始めとして様々なフォーマットでダミーデータを作成できます。

また、Fxの関数マークからデータの欠け率やバイアス、偏りなども細かく指定できます。式のヘルプ

 このデータの指定部分も無料で使用可能な機能に含まれています。小さなデータであれば大体無料で不自由なく作ることが可能です。

著者:杉浦

文字コードを利用して文字をforで回す

 文字コードは文字を数字で扱う仕組みです。各数字と各文字が一対一の関係で対応しています。この記事では文字コードの一つであるASCIIを利用します。ASCIIの対応の大きな分類は次の表のとおりです。ASCII – Wikipediaより引用

コード範囲(16進) 内容
00-1F 制御文字
20 空白
21-7E 図形文字
7F 制御文字(DEL)

 図形文字はいくつかの記号とa-zA-Z0-9、おおざっぱにはキーボードのローマ字入力で直接打てる文字です。キーボードに詳しくないのでまあ多分そんなものぐらいの気持ちで。Ascii Table – ASCII character codes and html, octal, hex and decimal chart conversion
 知る限りのプログラミング言語にはこのASCIIと数字を変換する機能が備わっています。これを利用すると文字列をforで回せます。Excelシートと関係のあるプログラムを書いたりする時、特に便利です。最近よく使用している言語であるphp,javascriptでの例が次です。
 phpならばchr関数を利用して次の様な感じです。PHP: chr – Manual

<?php
for($i = 97;$i <= 122;$i++){
    echo chr($i);
}
for($i = 65;$i <= 90;$i++){
    echo chr($i);
}


javascriptならばString.fromCodePoint()関数を利用して次の様な感じです。String.fromCodePoint() – JavaScript | MDN

String.fromCodePoint.apply(null,Array.from({ length: 26 }, (_, i) => i+65));
String.fromCodePoint.apply(null,Array.from({ length: 26 }, (_, i) => i+97));

著者:杉浦

変数名等の命名サービスcodic

 codicはコーディング中の命名を楽にしてくれるサービスです。
プログラマーのためのネーミング辞書 | codic”

使い方は簡単。左側に日本語を入れると対応する英語が出てきます。各行が1対1で対応しており、余計な操作なく多数の語を変換できます。左上の記法ボタンからスネーク記法、キャメル記法、ハイフン区切りなど記法を切り替えることができます。

 codicはgoogle翻訳の様な一般の翻訳ツールと異なり命名用と目的が狭く、明確です。そのためちょっとした記法で、出力を限定できる機能が備わっています。
 ”~する”と動詞で結ぶことで、メソッド名になります。

 ”~か”と結ぶことで、真偽値を返すメソッド名になります。

 ”辞書s”のように名詞の後にsをつけることで複数形に変換されます。

 コーディングにおける命名用の翻訳のため通常の翻訳と異なるコーディング用の翻訳をしてくれます。

 英単語をクリックすると他の候補と簡単な英和辞書へのリンクが出現します。

著者:杉浦

様々な高さの定義

 ある地点の地上からの高さを同じ物差しでできる限り正確に測るためにいくつかの高さの定義がされてきました。この記事ではそれらを紹介します。紹介する高さは楕円体高、ジオイド高、標高(海抜)です。
 楕円体高は地球を純粋な楕円体として仮定した場合、地球楕円体と対象の地点との高さを表します。2018/08/15の日本ではGRS80地球楕円体を用いています。GNSSではWGS84地球楕円体を用いています。GRS80とWGS84のそれぞれが表現する地球はとても近く、同じものと扱っても大きな問題は起こりにくいです。GNSSの出力する高度はWGS84地球楕円体を用いた楕円体高です。GNSSを用いて現地点の地上からの標高を知るためには少し手間がかかります。
 ジオイド高はジオイドの楕円体高です。ジオイドとは、海が地球を包み、海が重力の影響のみを受けていると仮定した時、その海面が落ち着いた時に成す面のことです。近年では高精度なGNSSを用いて測量を行うことでジオイド高が求められています。ジオイド測量の概要|国土地理院
 標高はジオイドからある地点までの高さです。標高は海抜とも呼ばれます。
 三者を図解すると次の図の様になります。
 
 ジオイドとは|国土地理院から引用
 GNSSが出力する高さは楕円体高です。このため標高を求めるためにはジオイド高が必要となります。日本各所のジオイド高は国土地理院が無償で提供してくれています。
 ジオイド計算
 ジオイド・モデルの提供|基盤地図情報ダウンロードサービス※要利用登録

著者:杉浦

PHPを例にした正規表現の再帰

 正規表現によって多重括弧のような入れ子構造を表現することは難しいです。正規表現の難題、入れ子構造
 入れ子構造が正しいことを示すにはスタックのデータ構造を表現することが望ましいですが、通常の正規表現ではスタックを用いることはできません。一部の正規表現エンジンにのみ備わっている再帰機能によってスタック構造を表現できます。再帰機能を備えた正規表現を使用可能な環境にはPHP、python、ruby、一部テキストエディタなどがあたります。正規表現のみに頼らないで文字列操作コードを書くことが可能なプログラミング言語では実装されていない場合が少なくないです。次の正規表現はPHPで動作する正規表現です。PHP: 再帰的パターン – Manual

/\((?:[^\(\)]+|(?R))*\)/

 (?R)が再帰の記号です。この時点で再度正規表現全体を呼び出します。これは最大の大きさで成立している括弧を抜き出す目的の正規表現です。動作結果は下図の通りです。
 
 詳しい動作の過程は次の通りです。この過程の説明はPHP Recursive Patterns – Stan Angeloff’s blogの説明の仕方を大きく参考にしています。


/
  \(          # 開き括弧 '(' を見つける.
    (?:       # 新しいグループの開始。これをしないと最初と最後の'('と')'が|に巻き込まれる。
      [^\(\)]+# '('でも')'でもない文字をどん欲に消費する。
      |       # or
      (?R)    # '('か')'を読んだら、また最初から。再帰処理。
    )
    *         # 可能な限り深いのネストを探索する.
  \)          # '('に対応する閉じ括弧 ')' を見つける.
/
著者:杉浦

WWW上のページをアーカイブし続けているWayback Machine

 Wayback MachineInternet Archiveが保存するウェブアーカイブを閲覧することのできるサービスです。Internet Archiveは書籍、映像、ソフトウェア、音楽、ウェブサイトなどのコンテンツをアーカイブしている団体です。そのデータ量は2016年10月時点で15ペタバイトを超えていました。これらのコンテンツはアメリカの著作権法に則って収集されているため、おおよそ問題ありません。特に規模が大きいためか国、団体によっては問題視される場合もあります。
 Wayback Machineは過去にさかのぼってウェブページを見るためのサービスです。これを利用することでリンク切れのページや、更新前のページを見ることが出来ます。googleのキャッシュ機能との最大の違いは再現するページの時期を決めてくれることです。
 
 保存の日取りや仕方がまちまちで目当てのものが無い時も少なくないですが、最近ではphp4やphp5の始めあたりまでよく使われていたらしいxml用のphpライブラリの版元ページを参照することで役に立ってくれました。