smellman's Broken Diary

クソみたいなもんです

BBoxを簡単に習得するやつ作った

Make Bounding Box Query Parameter

よくBBoxで検索とかするんだけど、Query作るのが結構面倒だったのでさくっとこのクエリだけ作るものを作成してみた。

select * from planet_osm_point where ST_Transform(way,4326) && ST_MakeEnvelope(138.44970703125,35.0120020431607,140.537109375,35.84008157153468,4326) limit 10;

上記の例は手元にOSMのデータをいれたものだけど、ST_MakeEnvelopeのやつが簡単に作れるようになったので個人的には作業が捗る。

Frog Pocket / Come On Primate Single

FolkとBreakcoreを見事に融合しているアーティスト、Frog Pocketが珍しくシングルとして楽曲をリリースしました。

1曲目の Come On Primate Show Your Teeth! は最初のギターとバイオリンによる(ちょっと重たい)ノスタルジックな感じから考えられないようなむちゃくちゃなBreakcore
しかし、ドラムの音に引っ張られすぎることがなく絶妙なバランスでバイオリン vs ドラムみたいな無茶苦茶な構図という Frog Pocketの代表的な音作りが堪能できる一曲です。

2曲目は Foghair は対照的にとてもシンプル...のわりには音の厚さに圧倒されるんだけど、いわゆる普通のフォークっぽい作品です。いや、違うけど。

さて、今回のシングルはなんといっても面白いのが1曲目のタイトルです。
「Come On Primate Show Your Teeth!」はPlanet-Muで出したアルバムとほぼ同一のタイトル名です。
「ほぼ」というのがポイントで、Planet-Muの方は Primates なので、たった一文字違いです。
ジャケットの画像もどっかで見たことあると思ったら、Planet-MuのCome On Primates Show Your Teeth! のジャケットをたんに燃やした時のやつっぽい。

8年前のアルバムのネタを持ってくるとは結構凝ってるなぁというか俺よく普通に気づいたなこれw

何はともあれ、シングルリリースなどがあるとアルバムも期待できるので良いリリースを今後も期待します。

2014年の音楽を振り返ってみる

年末なので、とりあえず、今年一年リリースされた音楽を振り返ってみようと思います。

DJKurara vs KenKoTaiji / Dark Individuality Split

DJKuraraさんとKenkoTaijiさんによるスプリット。
凶悪なガバキックとこれまた凶悪なアーメンが炸裂する傑作です。
リリースされた時はまじでびびりましたね。

チームしゃちほこ - いいくらし / Team Syachihoko - E-Kurashi [OFFICIAL VIDEO] - YouTube

今年最も聞いたTB-303です。
TB-303がアイドルと融合して変な曲が出来上がったことはとても良いと思う。

Venetian Snares / My Love Is A Bulldozer

今年の最も嬉しかったことは、念願のVenetian Snaresのライブに参加出来たことです。
去年、イギリスに行った時にロンドンに日帰りすれば参加できたのに...という日があり、悔しい思いをしていたのですが、
翌年にあっさり念願が叶うことになるとは。でも長野遠い。
というわけで、ライブでだいぶ気持ちが上がったうえでの念願のニューアルバムリリースです。
相変わらず楽しい楽曲だらけでした。
たぶん、アルバム通して聞いたのはこれが一番かも。

Aphex Twin / Syro

13年間は長かったけど、待った甲斐があった。
テクノというジャンルで知らない人はほとんどいないんじゃないかと思われるAphex Twinのニューアルバムです。
マーケティングにTorを使うとかテクノロジー的にも面白いことがいっぱいあったんだけど、
リリースされたアルバムも最高に良かった。
生きててよかったと思うアルバムでした。

Trackermatte / Wasteland Boutique

去年から活動してるTrackermatteという方なんですが、まったく詳細なことは知りません。
ただ、音はめちゃくちゃ良いです。
とりあえずアルバム全部買うといいと思います。

Igorrr & Ruby My Dear / Maigre

ちゃっかりNHKデビューしたIgorrrがレーベルメイトのRuby My Dearと組んで出した作品。
現段階のAd Noiseam頂上決戦みたいな構図なんだけど、Igorrrのバロック系の音とRuby My Dearのメロディックブレイクコアがまじでやばい融合してて危険案件。
ちなみに、 Ruby My Dearのことを「るびま」って略すのでRubyist Magazineとややこしくなってるというのが最近の悩みです(汗

DJ Donna Summer / Hard Edits 2014

ここもちゃっかり案件なんだけど、ちゃっかりというか突然大復活したCock Rock DiscoのDJ Donna SummerことJason Forrestがやはり突然ぶっこんできたニューアルバム。
とは言え、いろんな楽曲をマッシュアップしたというネタなので基本的にやばい。
相変わらずえげつない感じで楽しすぎる。
あと、何故かCock Rock DiscoとかJason Forrestの作品の大半がフリーダウンロードになっていたりする。
DEV/NULLとかわりとオススメなのでチェックしてみると良いかもしれない。

もうちょっと書きたいけど、そろそろ夕飯なので終了。
来年もいい音楽に恵まれますように。

東京の鉄道路線図SVGをさっそくタイル化してみた


東京の鉄道路線図SVGを作りました&パブリックドメインで配布します - Liner Note

このような面白い記事がありましたので、さっそく鉄道路線SVGを利用してタイル化してみました。

やっている事自体は僕が前回書いたゲームタイルの話の延長だったりします。

ソースなどは以下の所にあります。

smellman/railstilemap · GitHub

簡単に言うと、Phantomjs版はzoomFactorを変えつつ256x256のスクリーンショットをずらして取っていて、Ruby+rsvg2+ImageMagick版はrsvg2で拡大縮小した画像を生成して、256x256のサイズに切り取れるようなサイズの空っぽの画像を作ってそこにぺたって貼り付けてから256x256で分割して並べ直してる。

Ruby+rsvg2+Imagemagickの方は前回のプログラムをちょっとrsvg2が使えるように加工したっていう感じです。

ゲームタイル的な何かについて

FOSS4G Advent Calendar 2014 の5日目です。

今回は、ゲームタイルと呼ばれる何かについて話そうと思います。

ソーシャルストーキングが得意なみなさんなら僕が先月イベントで話したネタだとわかるはずです。
はい。
そうです。
使い回しです。

さて、ゲームタイルという何かですが、別に名前があるわけではないです。

平たく言うと L.CRS.Simple の話です。

Leafletの CRS.Simple.js の先頭にこんなのがあります。

/*
* A simple CRS that can be used for flat non-Earth maps like panoramas or game maps.
*/

ここにゲームマップって書いてあるよね。以上。

というわけで早速ゲームマップを動かしてみましょう。

とりあえず画像を拾ってきます。「ドラクエ 地図 画像」とかで検索するとそれっぽいのが拾えます。ただし、それを出してしまうとスクウェア・エニックスなだけに問題がありそうなので、今回は高野さんで代用します。

次に画像処理ですが、ぶっちゃけ Using Leaflet.js with non-geographic imagery - Oliver Marriott にある処理を行います。
ただし、total_tilesとか入力するのは面倒なので全て自動化してしまいます。

自動化したスクリプトこちら からゲットして下さい。

あとはflickrから落としてきた高野さんを食わせます。

高野さんタイル

おっと、この高野さんは長方形なので余計な横幅がひどく目立ちます!

というわけで正方形の高野さんをフォトショップなどで作成してからタイルを作成します。

正方形の高野さんタイル

ここから技術的な解説をします。

まずL.CSR.Simpleでは 2 の zoom レベル乗が縦横それぞれの長さとなります。
zoom レベルが0であれば1x1, zoomレベルが8であれば256x256, zoomレベルが12であれば4096x4096という範囲になります。

そしてタイルが256x256というサイズなので、zoomレベル12の時は縦横16x16の画像を作成するということになります。

ただし、長方形の画像が入力された場合は端っこが切れてしまいます。
単にzoomレベル12で15x14みたいな数しか出力されないというだけならいいのですが、
端っこの方の画像が256x256よりも小さい画像になってしまうと無理やり256x256のサイズで表示しようとしてしまい画像が無理やり引き伸ばされてしまいます。

今回はこれをキレイにするために縦横がそれぞれ256の倍数になっている画像をわざと生成して、それを元画像と合体させてからタイルの切り出しをしています。
なお、この処理をしても綺麗な高野さんは生成されません。

L.CSR.Simpleを使ってもlatlngの値は普通の地図と同じように90 -90,180 -180の範囲を採ります。
しかしながら単純に画像を処理しているのでこれらの値を使うのはとても大変です。

そこで利用するのがmap.unprojectです。
この関数はタイル上のx, y座標をlatlngに変換します。

例えば 2048x2048 (maxZoom 11) のタイルを表示するときに300, 200ぐらいの座標を中心にもっていく場合はこんな感じでやります。

var map = L.map('map', {
    maxZoom: 11,
    minZoom: 8,
    crs: L.CRS.Simple
}).setView([0, 0], 0);
map.setView(map.unproject([300, 200], 11));

GeoJSONもlatlngではなく、x, y座標で記述することもできます。
ただし、取り込みの際に coordsToLatLng で変換ルールを記述する必要があります。

具体的にはこんな感じで動かします。

var geojson = {
    "type":"Feature",
    "geometry": {
        "type":"LineString",
        "coordinates":[[200,300],[400,400]]
    },
    "properties":{}
}; 
var geojson_layer = L.geoJson(geojson, {
    coordsToLatLng: function (newcoords) {
        return (map.unproject([newcoords[0], newcoords[1]], 11));
}});

これを駆使すれば高野さんにいくらでもイタズラすることができます。

以上です。

明日はGUNMA GIS GEEKこと @_shimizu さんです。

千葉市ごみ分別辞典検索 2014年12月版アップデート

千葉市:ごみ分別事典(50音順)がアップデートされたので千葉市ごみ分別辞典検索をバージョンアップしました。

ちなみについさっきまで千葉市ごみ分類辞典と間違って書いていました。

まぁ、いつものことです。