粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

Androidタブレットでペーパーレスな暮らしのための環境構築

この記事の時点でAndroidタブレットに物理キーボードを繋いで書いています。 かなり快適でリモートデスクトップと合わせればPCを持ち歩かなくてよくなりそう。

今回は紙の書類を駆逐するため、手書きメモとPDF文献管理をメインに据えて紹介していきます。

自分の環境

Android8を積んだhuaweiタブレットを使っています。 iOSの人は話し半分に聞いてください。

ossyaritoori.hatenablog.com

現在の仕様状況

目的とそれに対応するアプリは以下のようになっています。(2018/7/14)

  • お絵かき:Autodesk
  • メモ:Squid,XODO
  • PDF編集:XODO
  • 文献管理:Mendeley
  • 外部ディスプレイ化:Spacedesk

手書きメモ用

デフォルトで入っている手書きメモアプリは手書き入力した文字をテキストに変換してくれる点で新しいですが、別にそんなに役に立つ場面は無さそうです。

autodesk sketchbook

メモにはautodesk sketchbookというアプリが高機能です。

筆圧と傾きを両方検知してかつ、以下のような様々なかき分けが可能です。 f:id:ossyaritoori:20180625144901j:plain

もちろんもとはお絵描きソフトなのでレイヤーで管理することも容易でカラーリングも美麗です。 f:id:ossyaritoori:20180625164438j:plain

ibis PaintX

筆圧検知などには対応していませんが似たようなアプリとしてibisがあります。

こちらは動作が軽快である点と、ユーザ登録が不要な点が勝っているように思います。 こっちはお絵描きしてないのでこんなん。 f:id:ossyaritoori:20180624225819j:plain

Metamoji Note

先の2つはレイヤーを分けて絵を書くことに優れていますが,もう少し手軽に書けるノートとしてMetamoji NoteやXodoがあります。 XODOは後ほど紹介するとして,Metamoji Noteについて紹介します。

主な利点は,

  • 手書き図形とテキストBOXをオブジェクト形式で記述可能
  • 書いた図形をあとから編集可能
  • ズームインして書く
  • 好きなフォーマットで出力可能

特にディテールウィンドウと呼ばれる特定の箇所を編集するための仕組みが秀逸です。

Squid

Squidはノートの機能に特化したアプリです。

紙のメモのように書けます。

  • 筆圧検知とパームリジェクション(ペンのみを検知する機能)が使える
  • 写真も貼れてPDFなどにエクスポート可能
  • タッチですぐ消せる消しゴムが有能
  • 動作が軽快かつ広告が少ない

私の汚い手書き文字を見せましょう。 f:id:ossyaritoori:20180714180739p:plain

PDF リーダー

PDFリーダについてです。 当然mendeley等の文献管理ソフトはいれますが、タブレットの強みを生かして手書きで注釈等を残していきたいですね。 追記:XODOの項目を強化

AdobeReader

AdobeReaderは基本的なところを抑えているのでとりあえず入れておいてもよいでしょう。

  • 手書き、テキストの書き込みや下線、マーカーまで扱える
  • 書いた図形を編集可能
  • dropboxとの連携が容易

と、基本的な箇所はすべて押さえています。欠点は手書きの際の操作感がやや悪いところとAdobeでは編集できない(保護のかかった)PDFがあることです。 具体的にはMendeleyのフォルダに入ったPDFは編集できないことが多かったです。

xodo

xodoはAdobeReaderと似たような特徴を持つアプリで,PDFの手書き編集や新たなPDFを作成してノートの様に扱うことができます。

付属のペンと手をきちんと区別できるため,右手をつきながら紙に書くように手書きをすることができるのが非常に快適です。 書いた図形は自動でグループ化され手でタッチするか,ペンの上部のボタンを押しながらタッチすることで移動や削除が想いのままで単に消しゴムで消すよりも圧倒的に早く快適です。

  • ペンと手を別で検知
  • Adobeで変更できない文章を編集できる
  • XODOで変更した文章はAdobeでは読めるがMendeleyには反映されない。

PCとの連携,リモート環境

PCとの連携が魅力的で,外部キーボードを接続することでさながらPCのような操作感を実現可能です。

キーボードとしてはBluetoothのキーボードがこのケース一体型のキーボードなどがオススメに入ります。

純正の商品は日本で発売されていないですが,Aliexpressなどで個人輸入することができます。

Alibaba グループ | AliExpress.comの 錠·電子ブックケース からの Huawei社mediapad m5キーボードケーススタンドフリップレザーケース用m5 10.8 m5 pro 10.8インチ 中の Huawei社mediapad m5キーボードケーススタンドフリップレザーケース用m5 10.8 m5 pro 10.8インチ

リモート接続

GoogleのRemoteDesktopの動作を確認しました。 今の所の操作感はあまり良くないですがファイルを操作すると行ったこと程度はできるようです。

androidlover.net

セカンドスクリーン化

有線,または無線でAndroidタブレットをPCのサブモニタにできます。

  • Spacedesk:無料なのが良い。PCと同一のネットワーク上にある必要あり。

hinokiyo.hatenablog.com

  • TwoMonUSB:有料だが有線なので高速通信可能。

play.google.com

使用シーン次第ですが,例えばSpacedeskはPCのプレゼンの制御をタブレットから行うなどの用途で活躍します。

まぁタブレットから制御してもいいんですけどね。 Office Mobile - タブレットでプレゼンテーション - 楽しもう Office

その他

タブレット上でBash的なコンソールを駆動するTermuxというアプリが面白いです。 aptが使えるのでPythonを入れてプログラミングが一応できます。 OpenCVなどには今の所対応していないらしく,タブレット内の画像を自前で編集なんていうのはちょっとハードルが高いみたいですが楽しそうですね。

linuxfan.info

Huawei MediaPad M5 Pro レビュー。iPadに対する利点は?

ねんがんのタブレットをてにいれたぞ!

テッテレー

ということでレビューします。

カタログスペック等に関して

タブレットを持つ目的としては

  • 電池の持ちが良い
  • 画面が大きくオーディオやカメラ等が良い
  • ペンを用いた本格的手書き入力

等がありますが,2018年春に発表された本モデルは

  • 電池容量:7500mAh = iPhoneSEの4.5倍くらい
  • 実行メモリ4GB,Kirin960 オクタコア (4x2.4GHz+4x1.8GHz)
  • 専用のM-Penとケースが付属

とかなり好条件です。

見た目はこんなかんじ。 f:id:ossyaritoori:20180624225950p:plain

競合となるiPadのスペック

界隈では2018年春モデル(第6世代)iPadがおすすめとされています。

も相まって,5万強出せばペーパーレスの環境を構築できるというのが非常に研究者界隈で人気となっています。 iPadProの文献ですがこことかこことかですね。

iPad vs MediaPad Pro

カタログスペックの比較ですが,比較サイトによるとスペック自体はかなり差がないようにも思えます。 (ただし,2017年のiPadと比較しており公平でない)

iOSAndroidの違いにより使用感は変わってくるのですが,各サイトを巡った感じは iPad Pro > MediaPad > iPad というスペック差になっていそうです。[要文献] iPadとの差別化点として

1. OSの違い

Mac製品同士は非常に連携が取りやすいためMacbook等を使っているならiPadを使うべきでしょう。

Androidの利点はPCとの接続が容易であることです。

GooglePlayストアでアカウントを登録すれば,ChromeやDrive,Gmail等が同期されるため,Googleのサービスにどっぷり使っている人はAndroidの恩恵を受けやすいというのは手持ちのiPhoneと大きく異なる点です。

2. コスパ

OSにこだわらない場合,本製品のコスパが光ります。

iPadでの最安構成はiPad32GB+Apple pencileで51000円強ですが,本製品は容量64GBでペンとケースがついて52000円くらいです。

それでいて基礎スペックは勝っている(はず)のでコスパは良好です。なお,MicroSDを256GBまで認識するので容量の心配はしなくて良いでしょう。

3. 手書き等入力方法

入力方法ですが本タブレットはかなり手書きを推してきます。 つけて最初にでるWifiの登録画面で手書きを要求してくるあたりとても自信のある機能のようで実際精度は結構高いです。 でもパスワードとかはデフォルトはキーボードにしてほしい。

iOSと決定的に違うのは音声入力で音声入力は試した感じGoogle先生のほうが強いです。 従って声で制御する場面が多くなるのであればSiriよりは使い勝手がよくなるかもしれません。

総じてiOSAndroidの違いが際立っていて端末間の差異は小さいように思います。 ただ,ペンの性能はApplePencilのほうが高いと思うので本格的な用途ならiPadProに軍配が上がるでしょう。

使用感

上記スペックを踏まえて, ざっくりと良かった点・不満点を述べます。

良かった点
  • 手書きや音声入力の精度が良い。かなり捗る。
  • 画面が美麗かつ大きいため,画面分割しても十分に見れる。
  • 指紋認証が早い/カメラも良好
  • 電池の持ちが良い(購入2日目に入っても半分程度残っている)
不満な点
  • キーボード入力が少ししづらく感じる(iPhoneとの比較)
  • 音声,電源スイッチの箇所に少し違和感がある
  • イアホンジャックがない(USB-Cから変換する)
  • 初期設定のいくつかに不満(なれていない人は最初のセットアップに少しもたつくかもしれない)
注意点
  • 500gは結構重い。10インチは結構でかい。持ち歩きには注意。
  • デフォルトのケースの品質は高いがペンの置所に困る。なくさないといいけど。

アプリ

必携アプリについては後ほどまとめますが, デフォルトの文字認識性能が高いため,手書き系アプリと相性が良いです。 - MetaMoji - OneNote

あたりは結構使い勝手が良さそう。 お絵かきするなら - ibis PaintX

というソフトがいい感じ。 たとえば,

f:id:ossyaritoori:20180624225819j:plain

こんなかんじに書けます。物理ボタンの配置的に書きながらスクリーンショットが非常に難しい。

PDF Reader というアプリでは手書き入力と加工ができます。(ADOBE じゃないやつ)これは結構良さげ。

f:id:ossyaritoori:20180625004622j:plain

追加で買いたい物品集

この点に関してはiPadProに軍配が上がります。かの純正キーボードは電源を本体から供給されるのでとても軽いのです。

現時点でのまとめ

2018/6/23に買ったので気づきがあれば随時更新していきますが今の所はこんなとこでしょうか。 所感としては

  • Androidの強みを活かしたiPadと同性能に近いタブレット
  • お絵かきはアプリ次第だが,iPadProに及ばないながらも快適な手書き性能
  • Google系との連携が得意なのでChrome等に依存している人は是非

Ubuntuのプリンタの設定(OKI社プリンタ,Ubuntu16.04)

よく考えたらubuntuのプリントを設定してなかったのでやり方をメモ.

OKIの場合

以下のようにdebパッケージを配っているタイプの企業もあるがOKIはppdファイルしか配ってなさそう. arimasou16.com

そこで公式のやり方に合わせる.

やりかた其の1:/etc/printcapの編集

上記のファイルを編集した後にコマンドをポチポチするもの.

ただ,私の環境では以下のような文が書いてあった.

# This file was automatically generated by cupsd(8) from the
# /etc/cups/printers.conf file.  All changes to this file
# will be lost.

つまり,「外部のソフトウェアによって管理されており勝手に消えたりするぞ」ということでこの方法はやめた.

やりかた其の2:CUPS

http://localhost:631/adminをブラウザに入力してGUIで設定するというもの. CUPSはUNIX共通の印刷システムなんだとか.

OKIの公式によると次のような画面が出てくるらしく,このadd Printerから追加するらしい. ホーム画面

実際の画像はこんなの.いや,全然違いますやん. f:id:ossyaritoori:20180603010706p:plain

「プリンタの追加」を選択してすすめていく.

プリンタの形式選択

次の画面では次の項目からネットワークプリンタの分類?を選ぶ. 全然わからないが上記のOKIのドキュメントにsocketとあったのでAppSocket/HP JetDirect を選択した.

 Backend Error Handler 
 インターネット印刷プロトコル (https) 
 LPD/LPR ホストまたはプリンター 
 インターネット印刷プロトコル (ipps) 
 インターネット印刷プロトコル (http) 
 AppSocket/HP JetDirect 
 インターネット印刷プロトコル (ipp) 
 インターネット印刷プロトコル (ipp14) 

一応AppSocketというのが一般的かつもっとも高速なやつで,Internet Printing Protocol (IPP)とかいうのはネットワーク印刷にてよく使われるらしい.

そこんとこはヘルプを確認していただきたい.

IPアドレスの設定

プリンタのIPがわかっている前提で話す. ポート番号を指定しないなら

socket://<IPアドレス>

とうつのが正解のようだ.これはどういう記法なのか?それはまたヘルプを(ry

ppdファイルの選択

OKIの場合,ppdファイルというのが配ってある. これをローカルにダウンロードして次の画面で選択する.

デフォルトの設定の選択

Generalの項目で 2-Sided Printing:をLong-Sidedにする. 両面印刷長辺とじってことですね.

感想

Windowsだと何も考えずexeファイルぶん回すことが多いがUbuntuはこういう細かなところでググらびりてぃ(Google検索から適切な情報を抽出すること)が試されるのでギークっぽい人以外には勧めづらいなぁなどとぼんやりおもった.

Homography行列の分解 OpenCV Python

OpenCVは便利なんですが不十分な情報や古い情報,ニセの情報がネット上に多すぎます. 基本的に公式のサイトを見ような.公式っぽいけど違うみたいな奴多すぎ. これがまともだったので公式と信じる.

はじめに:Homography 行列の推定とか

findHomographyにぶち込みます. 昔書いたテンプレート抽出のコードを参考にどうぞ.

キャリブレーションはがんばりましょう.decomposeはエラーにめっちゃ敏感です. ROSを使えばかなり簡単にキャリブレーションできます。100枚程度あれば結構いいスコアを出せるので頑張って。

過去にもエピポーラ幾何でなんかやってますね,この時なキャリブレーションが甘かったので結果をやり直してみたい. ossyaritoori.hatenablog.com

cv2.decomposeHomographyMat

公式?によると使い方は以下の通り.

retval, rotations, translations, normals   =   cv.decomposeHomographyMat(  H, K[, rotations[, translations[, normals]]]    )

生で吐くとこんな値になります.

(4, [array([[ 0.99069192, -0.0745761 ,  0.1138768 ],
       [ 0.07708256,  0.99686649, -0.01776175],
       [-0.11219536,  0.02637434,  0.99333609]]), array([[ 0.99069192, -0.0745761 ,  0.1138768 ],
       [ 0.07708256,  0.99686649, -0.01776175],
       [-0.11219536,  0.02637434,  0.99333609]]), array([[ 0.8447263 ,  0.02653746,  0.53454021],
       [-0.1212945 ,  0.98227444,  0.14291458],
       [-0.52127259, -0.18556049,  0.8329719 ]]), array([[ 0.8447263 ,  0.02653746,  0.53454021],
       [-0.1212945 ,  0.98227444,  0.14291458],
       [-0.52127259, -0.18556049,  0.8329719 ]])], [array([[ 0.30840663],
       [-0.09586909],
       [-0.81377852]]), array([[-0.30840663],
       [ 0.09586909],
       [ 0.81377852]]), array([[ 0.67210665],
       [ 0.17138383],
       [-0.53426701]]), array([[-0.67210665],
       [-0.17138383],
       [ 0.53426701]])], [array([[ 0.92347388],
       [ 0.23136337],
       [-0.30605063]]), array([[-0.92347388],
       [-0.23136337],
       [ 0.30605063]]), array([[ 0.64092667],
       [-0.04427804],
       [-0.76632399]]), array([[-0.64092667],
       [ 0.04427804],
       [ 0.76632399]])])

そもそもSVDを使ったdecompositionでは4つの解が出ます. したがって4つずつあるこの回転Rと並進T, 法線ベクトルnのペアから一番まともなペアを選びます.

ネコと学ぶ...さんの超わかりやすいサイトより,以下の画像を拝借.

この場合(a)のパターンが正しいです.

これの解き方は一般にわかっている点群を投影して,すべての距離が正になるかで判断します.

全容を理解するのにはInriaの2008年の文献がわかりやすそうです.(ただし長い)

解を絞る条件

要約すると

  • カメラ平面から見て同じ側に有る:8点から4点へ(ここまではOpenCVがやる)
  • Reference Point Visibility:4点から2点へ
  • のこりは...?:normal vectorからなどでやる。

ということみたいで,事前情報なしで絞れるのはせいぜい2つまでで,それ以降は例えばテンプレートのnormalベクトルがどっちを向いているかなどの条件を使います。

例えば,どちらもこちら側にあるかというのは変換前とあとのnormalベクトルがどちらもカメラ側を向いているという条件をつけることで2つに絞れますし, テンプレートが真正面から撮ったものであればnormalベクトルは(0,0,1)になっているはずなのでそれとの内積を計算して大きさを評価するなどが挙げられます。

n_ref = np.float32([0,0,1]).reshape(3,1)
for n in normals:
    print(np.dot(n.T,n_ref))

こんなかんじでやればいいですね。

サンプルコード

Gistにnotebookを上げておきました。多分これで本番環境でも行ける。 キャリブレーションはしっかりしておきましょう。 gist.github.com

解の絞り方,その他の手法などについて

連続的なフレームからの抽出の場合動作に制約をつけて式を組み直したり<例>,その他のセンサとの情報統合からこれを解くなどのアプローチがあります。

極配置の実装:アッカーマン法,EigenvalueStructure法のMATLAB実装

序論・参考文献

制御工学の授業で一度は計算させられる極配置ですが MATLABにはplaceなる関数があって,実務を始めてからは全く手計算をしなくなります。

よくある疑問とエラー

授業では忘却の彼方にありますがB行列のrankより高い極配置はできないというエラーは誰しも見たことがあるかと思います。 以下のような現象です。

A = [1 2;3 4];
B = [1; -2];
pole = [-3,-3];
place(A,B,pole)

Bのランクは1ですので,このコマンドを実行すると以下のエラーを起こします。

エラー: place (line 78)
"place" コマンドは、rank(B) より大きい多重度を持つ極を配置できません。

そういえば中身どうなっているんだ?Cとかで実装するとどうなるんや?という疑問がありませんか。 MATLABのは論文読んでないのでまだ実装しませんが, 本稿で紹介するアルゴリズムを用いた場合はこの場合でも,ほぼ極配置ができます。

  -3.0000 + 0.0000i
  -3.0000 - 0.0000i

ひょっとしたらちょっと誤差があるのかもしれない。

アッカーマン法

アッカーマン(Ackermann)はこの人?某ヒロインが検索汚染してきます。

アッカーマン法の詳細な記述についてはなんとwikipediaが一番スッキリしていて見やすくなってます。(英語)

原著の論文はこれっぽいです。

J. Ackermann. Der Entwurf linearer Regelungssysteme im Zustandsraum.
Regelungstechnik und Prozessdatenverarbeitung, 7:297–300,
1972.

参考資料

どこかの授業スライドですがこれが具体例込でわかりやすいです。 また,参考になりそうなスライドがありました。(要DL,MIMOや不可制御系の時にどうする的なのが丁寧に書いてあったスライド。わかりやすい5-10分で読める。)

Outline

  • Step1. 求めたい極を展開して特性方程式にする
  • Step2. 可制御性行列を求める
  • Step3. 以下の通りに計算する(雑)

f:id:ossyaritoori:20180516102843p:plain 添付は小林H23スライドより拝借。

MATLABコード

多項式展開が思ったより実装が面倒そうだったので一般化してないですが例えば2次元の場合は次の通り。

function F = placeAckermann2d(A,B,pole)
p = - pole;
d1 = p(1)+p(2);
d0 = p(1)*p(2);
X = A^2 + d1*A + d0*eye(2);

Uc = [B A*B];

F = [0 1]/Uc*X;
end

これで冒頭の結果を得ることができます。Bのrankが落ちていても重根極配置できるので試してみては。 この程度の計算であれば行列と逆行列計算ライブラリさえあればCやPythonでも実装余裕ですね。 MPCができるんだからDSPでも逐次的な極配置とかできるやろ。多分。

MATLABがこれを採用していない理由が知りたい。(なにか欠点があるのか?) → 入力自由度が増えた時に対応できないということのようです。

MIMOの場合:EigenvalueStructure法

アッカーマン法ではMIMOの時に行列のサイズがおかしくなります。 そこでこの手法です。1981年のこの文献が元

原理としては以下のような感じです。 f:id:ossyaritoori:20180516131828p:plain

Nullspaceの推定にsvgを使うので計算量には不安があるが,見事に動作します。 この場合自由度の足りない重根極配置をするとVの正則性が失われるので最初に出たようなエラーが出るということのようです。

function F = placeMIMO2D(A,B,pole)
[u1 w1 v1] = svd([pole(1)*eye(2)-A B])
[u2 w2 v2] = svd([pole(2)*eye(2)-A B])
en = size(w1,2)
VV = [v1(:,3:en) v2(:,3:en)];
F = VV(3:en,:)/VV(1:2,:)
end

環境構築しないでTexを使う (sharelatex VS Overleaf)

環境構築に興味のない人にTexを勧める際の選択肢としてsharelatexOverleafを試したメモ書き。 どちらも日本語入力には工夫が必要なのでその覚書として。

Overleafの日本語設定

以下の記事に習えば良い。 doratex.hatenablog.jp

platexを入れるためには次のlatexmkrcファイルを作成する。

$latex = 'platex';
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = 3; 

テンプレ

一部人のコードを借りているが,最低限必要なプリアンブル構成を記す。 amsmathとかは必要に応じていれて。

\documentclass[10pt,a4paper,oneside,twocolumn,fleqn,dvipdfmx]{jsarticle}
\usepackage[utf8]{inputenc}
\usepackage[ipaex]{pxchfon}% For japanese font

\usepackage[dvipdfmx]{graphicx}
\usepackage{subfigure}


\usepackage{geometry}
\geometry{left=25mm,right=25mm,top=25mm,bottom=25mm}

%本文
\begin{document}

\twocolumn[
    \begin{flushright} 
        右寄せ内容
    \end{flushright}
    \centering{
        \LARGE{タイトル}
    }
    \section*{
        \centering{Abstract}
    }
    \raggedright{
    Write abstract here.
    }
    \vspace{2ex}
]

\section{序論}
はろーわーるど

%参考文献
\small
\bibliographystyle{IEEEtran}
\bibliography{ref} %ref.bibを準備
\normalsize

\end{document}

所感・評判

使い勝手は悪くない感じ。コンパイル速度にも問題があるらしいが現状そんなに課題を感じない。 ちょっとレイアウトがごちゃごちゃしているのが好みによるかもしれないが。

今の所一番気になるのは - 無料版だと文章を秘匿できない ということ。Reference

ちゃんとした論文を書く頃にはOverleafは卒業してもらうか課金してもらう感じになるだろう。

Sharelatexの設定方法

Sharelatexはそもそもopenソースになっており,自前でサーバを立てて作業することが可能になっている。

日本語設定(platex使用)

設定ボタンからLatexを選択すれば Overleafの時と同様に日本語の設定が可能だ。 というわけで上の章を見て。

日本語設定とテンプレ(XeLatex使用)

設定ボタンからXeLatexを選択。documentclassで \documentclass[10pt,xelatex,ja=standard]{bxjsarticle} のように選択すればいいらしい。 なお,個人的にはフォントに違和感がある。

\documentclass[10pt,a4paper,oneside,twocolumn,fleqn,xelatex,ja=standard]{bxjsarticle}
\usepackage[utf8]{inputenc}

\usepackage{geometry}
\geometry{left=25mm,right=25mm,top=25mm,bottom=25mm}

%本文
\begin{document}

\twocolumn[
    \begin{flushright}
        日付とか書くスペース
    \end{flushright}
    \centering{
        \LARGE{タイトル}
    }
    \section*{
        Abstract
    }
    \raggedright{
    Write abstract here.
    }
    \vspace{2ex}
]


\section{Introduction}
日本語と欧文フォントに違和感。

\end{document}

出力結果はこんなん。 f:id:ossyaritoori:20180509182106p:plain

なお,秘匿性についてはOverleafよりはマシそうである。 tex.stackexchange.com

どっちがいいの?

初心者の練習用としてはどっちでも良さそう。@2018年5月所感

platexに慣れているのでOverleafの方が直感的に使えそうな気もするが,友人が勧めてくるのはsharelatex。この2つは統合されようとしているらしい。 フォントとかの設定に違和感もあるがここに拘れるやつはそもそもローカルの環境構築に苦戦しないだろう

個人的批評

ここで紹介したほかにはCloud latexというサービスもあるがまだ?ベータらしい。 www2.math.ritsumei.ac.jp

文書の秘匿性を重視するなら今後は - sharelatex を推していくことになるんだろうか。

結局最終的にOverleafと同様の手順でplatex使えたのでsharelatex勧めます。

GoogleMapから地図をダウンロード(緯度経度を指定)

今後はてな記法やめてMarkdownで書きます。 GoogleMapを緯度経度で指定した範囲切り抜いて保存したいんですけど意外とかゆい所に手が届かないんですねー。 いろんな手法をまとめてみました。 (書いてて途中で飽きたのでいつか書き直します。) 関係ないけどGPSとか特定の緯度経度の点を地図と重ねたいならここを使うと良いでしょう。

GoogleMapから地図をダウンロードする方法

GoogleMapから画像をダウンロードしたくなる時ってありますよね。 調べた結果以下の3つの候補があります。 一番上が一番手軽な方法で徐々にめんどくさくなります。

スクリーンショット

これはなにかとよく使う基本技能ですね。 http://121ware.com/qasearch/1007/doc/answer/image/017/017976/017976h.png

MacとかLinuxを使えるリテラシーがある人はこの辺は適当なソフト使うなりググるなりしてください。

GoogleのMymap機能を使う

Google公式で画像のダウンロード機能があります。 これはスクリーンショットより高精度な画像を取得できるのでとても便利です。 この項はここの和訳です。

  1. 次のMy Maps Google websiteのURLを開く。
  2. 新しい地図の作成 を選択する。Googleアカウントへのログインを要求されるでしょう。
  3. GoogleMapと同様に場所を調べて良い感じに調整
  4. レイヤーを追加を押した後に黄色く塗りつぶした3点リードのメニューを開き「地図の印刷」を選択。 f:id:ossyaritoori:20180425212009p:plain 最終的にPDFやPNGで吐き出せます。

フリーソフトを使う

調べきれてないのでなんかあったら教えてください。

GoogleMapDownloader

名前そのまんまです。 googlemapdownloader.weebly.com

わかりやすい解説(英語)もあり,安定して使うならこっちかなぁという感じです。 www.youtube.com

結局使ってないのですが感想あったらコメントでください。 多分結構使いやすそうです。

GoogleAPIを叩いて画像を入手する

Google様の機能を使うとこの手のことは簡単にできます。 なるべく簡単な順に列挙していくつもりです。

Keyを入手しよう(要Googleアカウント)

大前提として「鍵(キー)」という個人認証手段的なものが必要です。 Googleにサインインしていれば例えば以下のページにいって「キー」の取得を押してぽちぽち進めれば鍵を入手できます。 Simple Map  |  Google Maps JavaScript API  |  Google Developers

なくすとアレなのできちんとメモしておきましょう。 f:id:ossyaritoori:20180425205536p:plain

URLを直に打って画像を入手

Google Static Mapsというのがあります。 Google Static Maps デベロッパー ガイド  |  Google Static Maps API  |  Google Developers 以下のコードをURL欄に打ち込むと該当する地域が表示され右クリックでダウンロードできます。

https://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=600x300&maptype=roadmap&markers=color:blue%7Clabel:S%7C40.702147,-74.015794&markers=color:green%7Clabel:G%7C40.711614,-74.012318&markers=color:red%7Clabel:C%7C40.718217,-73.998284&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk

またGoogle Maps Tile APIというものを見るに有望そうな関数が存在しました。JSで書くので僕もよくわかってないんですが… developers.google.com

ここでは次のようなリクエストを呼んで東西南北の範囲を指定できるのでこれは確実にCroppingできるでしょうね。

https://www.googleapis.com/tile/v1/viewport
  ?session=session token
  &zoom=zoom
  &north=north&south=south&east=east&west=west
  &key=YOUR_API_KEY

なおzoomというのはZoomレベルというやつでして0-23まであり,0が一番でかいです。(地球全体うつすレベル。) Zoomレベルと実際の値がどう対応しているのか計算方法をここの人がやってくれています。

Pythonスクリプトでダウンロード

とりあえず以下のスクリプが有効でした。(依存パッケージあり) A python script to download high resolution Google map images given a longitude, latitude and zoom level. (Works with Python 3) · GitHub

しかし,これはどうも中心の緯度経度を与えてそれが含まれているタイルを取得してきて統合というような動きのようです。 さっきのAPIの知識を使ってちょろっと書き換えれば境界クロッピングも行けそうなもんですが…

JavaScriptで書く

JS全く書けないのでコピペのつなぎ合わせで次のコードが有効であることを確認しました。 Xmin,Xmax,Ymin,Ymaxの所に経度と緯度の下限上限を入れておいてね。

var map;
function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    center: {lat: -34.397, lng: 150.644},
    zoom: 8
  });
  var southWest = new google.maps.LatLng(Ymin,Xmin);
    var northEast = new google.maps.LatLng(Ymax,Xmax);
    var bounds = new google.maps.LatLngBounds(southWest,northEast);
    map.fitBounds(bounds);
}

これで表示されることには表示されるんですが,,,ダウンロードの手法がまだわかりません笑 だれか実装してw

総括

2018年記事作成時にはとりあえずマーカを着けて手動で画像をトリミングをした後に調べましたが有望そうなのはフリーソフトくらいでしょうか。 座標を指定してダウンロードするにはJavaScriptやそのGoogleAPIの方に熟達したほうが良いかもしれません。

わかった?こと?

どうもGoogleMapは地図画像を0-23までの24種類のスケーリングで保持していてそれぞれの画像は256×256で保存されている?ようです。(←所感により間違っている可能性有) あとは緯度経度からメルカトル図法の地図に座標変換して,対応する画像をサーチして…とかやっているんでしょうかねぇ。 GoogleMapと戯れた食後でした。