OpenLayers マルチサーバーで高速表示?

OpenLayersで地図画像を表示させる時には、タイル画像を表示させているが、そのタイル画像をサーバーからダウンロードしてくるのが遅いと、表示に掛かる時間が遅いように思える。

そこで、サーバーから同時並行的にダウンロードを行う方法として、複数のサーバーから並行して取り出すことにする。

単純に対象となるURLを配列に入れて指定するだけ。

さて、まだ試していないが、これくらいなら試してみる価値ありですね。

試してみたら、速い!

でもCPUコア食うねぇ~w
負荷設計なども考慮して使わないと、たくさんの人が見に来るサーバだと大変かも知れない。

諸刃の剣ですね。

 

R データフレームの中身に直接アクセス?分解?

タイトルは非常に悩みました。なんと書けばパッと見てわかるか?と思ったのですが、無理ですね。

データフレーム(data.frame)の列要素を直接指定してアクセスする方法について記述します。

# data.frameを作成します。

> tx <- c(1,2,3,4,5,6,7,8,9)
> ty <- c(9,8,7,5,6,2,4,1,3)
> df <- data.frame(X=tx,Y=ty)
> df
X Y
1 1 9
2 2 8
3 3 7
4 4 5
5 5 6
6 6 2
7 7 4
8 8 1
9 9 3

#通常だと、この様に「データフレイム名$配列名」でアクセスします。
> df$X
[1] 1 2 3 4 5 6 7 8 9
> df$Y
[1] 9 8 7 5 6 2 4 1 3

# たくさん使うときは不便なので、attachをします。
> attach(df)

#要素に直接アクセスできます。
> X
[1] 1 2 3 4 5 6 7 8 9
> Y
[1] 9 8 7 5 6 2 4 1 3

#最後には開放するには

>detach(df)

以上

R data.tableで任意の列を抽出したい(名前で)

お恥ずかしいですが、Rでまたもや嵌った。

dd

—   X     Y   Z
1:123  456  555
2:345  443 666

こんなデータテーブルを使った。

ここで、欲しいのはXとZの列だけを抽出したい。(コピーしたい)
単純に
dd[,c(“X”,”Y”)]

とやると・・・・

[1] “X”  “Y”

と表示され、中身が伴わない。

オプションがあるなんて気が付かなった。

dd[,c(“X”,”Y”),with=F]
—   X    Z
1:123   555
2:345   666

ついでに
list <- c(“X”,”Z”)

dd[,list,with=F]
—   X    Z
1:123   555
2:345   666

思った通りに出来た!
オプション気が付かないです。
多分、これで列の入れ替えも出来るようになりますね。

 

 

 

レーダー用語PAR

元々レーダーを扱っていたこともあって、最近少しだけ違和感を覚えるPARについて。

私の知っているPARと略称で示されるレーダーには2つある。

フェーズドアレイレーダー:Phased Array Radar
精測進入レーダー:precision approach radar

個人的に馴染みが深いPARは精測侵入レーダーなのですが・・・・
私の頭の中では、

フェーズドアレイレーダー → フェーズドアレイ
精測進入レーダー     → PAR

となっています。

精測進入レーダーはあまり使われていることが少ないレーダーです。
自衛隊のある空港では、これがありますが、普通の民間空港には存在しません。
非常に特徴のあるレーダーで、縦方向と横方向のレーダービームを使用してレーダー反射を取り込み、これを表示装置では1画面に表示しています。
そのため、縦方向のレーダーと横方向のレーダーを同時に見て、進入してくる航空機の位置を把握する必要があります。
管制する側も難しいんでしょうね。
表示させるのも難しいんですけどねw

大阪伊丹空港 PAR(精測進入レーダー)
伊丹空港のレーダーサイト


どこかわからないけど、精測進入レーダー

 

 

R フォルダー毎に処理を繰り返す。

R言語でフォルダー毎に処理を繰り返す方法について説明します。

面倒なのでプログラムを以下に

# ディレクトリリストを作成
dir_list <- list.dirs(recursive=T)

#関係するフォルダーを抽出(…/abcで終わるフォルダーを抽出
abc_dirs <- dir_list[c(grep(“\\/abc$”,dir_list))]

for(dir_name in abc_dirs){

# ここでフォルダー毎の処理を行う。

}

対象となるフォルダー数を確認して、フォルダーのリストをグリグリ回そうと思ったのですが、意外と面倒だったので、抽出したフォルダーリストをそのまま使いました。

以下はファイル毎に処理をしたい場合に、ファイルのリストを

all_list <- list.files(“.”,recursive=T,pattern=”sample.csv”)
# abcフォルダーのcsvのみを抽出する。
csv_files <- file_list[c(grep(“/abc/”,all_list))]

#————————————
# フォルダーの分割リストを作る
#   aaa/bbb/ccc/abc/sample.csv => “aaa” “bbb” “ccc” “abc”  “sample.csv”
#————————————

# あとでフォルダー名の一部を使いたいので分解して保存しておく

flist_split <- strsplit(csv_files,”/”)

dst_fname <- paste(“../xyz”,”.csv”,sep=””)

#————————————
# csvを読込む
#————————————
i <- 1
for (fname in dbf_files){
src_csv <- read.csv(fname)

tmp <- src_csv[,c(“COL1″,”COL5”)]

# フォルダー名の一部をCOL_Xに設定しているだけ。
# 単にどこのフォルダーのデータかをカラムに入れたかった
tmp$COL_X <- flist_split[[i]][1]

# 順番を並び替えている

dst_csv <- tmp[,c(“COL1″,”COL_X”,”COL5″)]

#  テキスト形式で書き出してみた。

write(t(dst_csv),dst_fname,ncolumns=3,sep=”,”,append=T)
i <- i + 1
}

write文で本来ならばwrite.csvで一気に書き込みたいところだったのですが、文字列に”aaaaa”とダブルクォーテーションマークが入ってしまうのを避けるため、この様な方法を取ってみました。
他に良い案があれば良かったのですが、初心者なのでこれで一応OKです。

参考になるんだろうか?

とにかく、備忘録です。

P.S. 上記のプログラムは都合によりプログラムの一部のみを記載しております。
ライブラリが足りないなどの場合は適宜ライブラリを追加してやってください。
また、プログラム掲載時に多少変更を加えています。
間違ってしまっている場合もあるかと思いますので動作の保証は致しません。

R 文字列の分割と使い方

R言語で文字列の分割は出来たのだが、その後の使い方が解り難かったので書いておく。
Rの基本的書き方なんでしょうね。

> str1 <- “abs/svf/sss”
> str2 <- strsplit(str1,”/”)
> str2
[[1]]
[1] “abs” “svf” “sss”

分割した要素の一部を取り出すには、以下の様に指定する。
(1番目に分割された文字列を指定した場合)

> str2[[1]][1]
[1] “abs”

リストの中身を指定する方法が解らなくて、他言語と違うと悩みますね。

OpenLayersでタイル画像のキャッシュを消したい!!(追記:ダメだった)

OpenLayers 2.13.1の環境で、一度表示されたタイル画像が邪魔になる場合がある。
開発途中などで、画像を差替えたりする場合には良く発生する為、ごっそりタイル画像を更新した場合などは、ブラウザのキャッシュクリアを行っていた。
この操作は、ブラウザ毎に設定があったり、消したくないキャッシュまでクリアしなければならず面倒だし不便。

そこで、以下のファンクションを呼び出すことで、タイルキャッシュだけをクリアしてしまおうというのが今回の狙い!

追記:単純にこれだけやっても上手く消えないことが判明・・・
どうやって使うか解らないのだが・・・ということで、誰かがアドバイスしてくれるのを期待するが、参考にしないでください。

これで上手く出来そうなんだけど・・・やってみる!!

レイヤを指定してクリアできると嬉しいのだが、そこまでの機能は無いみたい。OL3で実現では出来るのかな?

余談・・・・

まだOL3は使ったことが無い。
ドラスティックに変わり過ぎてしまって、OpenLayers 2.xとは全く異なってしまっている。
コンバートするとかいうより、完全に書き換えが必要となる雰囲気である。
もう少し安定した事例が発表されるまで待つつもりだけど・・・業界の流れにも注目したいところである。

TigerVNCをLinux上で起動して、Windowsから接続する。

TigerVNCのインストール方法については割愛する。

1.環境

環境としては、

・Linux(CentOS 6.5)側にTigerVNCサーバをインストール済み。
・Windows 8.1側にTigerVNCのサーバーとクライアントをインストール済み

以前にインストール方法の記録を書いたと思ったのだが、書いてなかったみたい(^^ゞ。その内、書くことにして今回はインストール後の使用方法のみとする。

2.VNCサーバー側

2.1 起動方法

時折使う、TigerVNCの起動コマンドを以下に備忘録として書き残す。
勝手に起動していると、セキュリティ上気になるので、個人的には必要な時に必要なだけサーバーやクライアントを起動しているので、よく忘れるw

まず、TeraTermなどのターミナル端末を使って、Linux側で以下のコマンドを実行する。
TigerVNCの起動コマンドはこれだです。

> vncserver :1 -geometry 1600×900

:1はnumberとだけなっておりますが、vncserverが起動されている番号になるのでしょう。ある意味で、VNCのIDの様なものとでも覚えておけば良いと勝手に思っています。

 

2.2 その他の確認コマンド

起動方法以外によく使うコマンドは以下の通りです。

1)Help

vncserver –helpでヘルプ見れます。

# vncserver –help

usage: vncserver [:<number>] [-name <desktop-name>] [-depth <depth>]
[-geometry <width>x<height>]
[-pixelformat rgbNNN|bgrNNN]
[-fp <font-path>]
[-fg]
<Xvnc-options>…

vncserver -kill <X-display>

vncserver -list

2)起動リスト
vncserverの起動状況を一覧で確認することが出来ます。

vncserver -list

TigerVNC server sessions:

X DISPLAY # PROCESS ID
:1 10950
:3 27447

上記の場合は、1と3のX DISPLAYが与えられており、:1もしくは:3でvncserverへアクセスすることが可能であることが判ります。

3)VNCサーバーを個別に殺す

そのままkillです。

vncserver -kill :3
Killing Xvnc process ID 27447
Xvnc process ID 27447 already killed

なんか既に殺された後の様なメッセージが帰ってきましたが・・・
listを確認してみると・・・

vncserver -list

TigerVNC server sessions:

X DISPLAY # PROCESS ID
:1 10950

:3が消えているので、無事殺されていることが判りました。

以上でサーバー側の説明は終わりです。

3.クライアント側

クライアント側はWindows 8.1を使用しています。
Vistaや7でも動いているので同じだと思います。

TigerVNC Viewer  でアクセス先を指定して接続しパスワード入力でログイン完了!ちなみに、TightVNC Viewer for Windowsでもほぼ同じです。

xxx.xxx.xxx.xxxには、もちろんIPアドレスもしくはサーバー名を指定。
:1は、vncserver起動時に指定したパラメタと同じ値を指定する。

これでデスクトップ画面が表示されたら成功です。
画面サイズが小さかったり大きかったりする場合は、サーバー起動時の-geometryオプションのサイズを調整して適当なサイズにします。
なので、適当なサイズが見つかるまでに、Killしたり起動したり繰り返しですねw

取りあえず、本当に備忘録です。

以上