http://wayfarerweb.com/js/mapbox.js
以下のサイトのような、
(1)「画像をアップロード」
(2)「アップロードした画像をブラウザ上でリサイズ・移動」
(3)「リサイズ・移動した値をPHPのグラフィックライブラリ(GD)に送り、元画像を変形、表示」
という仕組みを作りたいと思っています。
http://originalcanbadge.com/
PHP部分は作れそうなのですが、(2)から(3)へ数値を渡す部分で困っています。
Mapbox.jsを読んでみていますが、どこの変数が画像の移動ピクセル数や拡大比率になっているのか読み取ることができません。
ここの下部のサンプルでは、操作パネルのボタンで数ピクセルずつ動かすことが出来ているので、ここで操作したときの数値がどこの変数に代入されているのかが知ることが出来ればヒントになりそうです..
http://wayfarerweb.com/jquery/plugins/mapbox/
参考になりそうなサイトや、Mapbox.js内の変数を読み解くカギを教えていただけないでしょうか。
callBefore: function(layer, xcoord, ycoord, viewport) {}, // this callback happens before dragging of map starts callAfter: function(layer, xcoord, ycoord, viewport) {}, // this callback happens at end of drag after map is released "mouseup" beforeZoom: function(layer, xcoord, ycoord, viewport) {}, // callback before a zoom happens afterZoom: function(layer, xcoord, ycoord, viewport) {}, // callback after zoom has completed
このあたりの仕組みを使えばいいのでは。
$("#viewport2").mapbox({ 省略 callAfter: function(layer, xcoord, ycoord, viewport) { alert('x:'+xcoord+', '+'y:'+ycoord) } });
のようにすればドラッグが終了した時点での座標を得られるはずです。
もっといいプラグインがありそうですが…
callBefore: function(layer, xcoord, ycoord, viewport) {}, // this callback happens before dragging of map starts callAfter: function(layer, xcoord, ycoord, viewport) {}, // this callback happens at end of drag after map is released "mouseup" beforeZoom: function(layer, xcoord, ycoord, viewport) {}, // callback before a zoom happens afterZoom: function(layer, xcoord, ycoord, viewport) {}, // callback after zoom has completed
このあたりの仕組みを使えばいいのでは。
$("#viewport2").mapbox({ 省略 callAfter: function(layer, xcoord, ycoord, viewport) { alert('x:'+xcoord+', '+'y:'+ycoord) } });
のようにすればドラッグが終了した時点での座標を得られるはずです。
もっといいプラグインがありそうですが…
0.7はどこかでafterZoom属性がデフォルトに上書きされちゃうみたいです。
http://wayfarerweb.com/jquery/plugins/mapbox/
からダウンロードできるバージョンを上記の修正を行い使ったほうがよさそうです。
「拡大縮小操作をしたときの拡大比率」を求めているようなのでさらに補足。
version 0.7のafterZoom: function(level, layer, xcoord, ycoord, viewport) {}
の引数のlevelが拡大比率のようです。
afterZoomが上書きされるバグは特定できていない状態で、mapbox.jsを直接書き換えながら確認したところ、
zoomを行うと、levelは0~3で変化しました。layerSplit: 4と対応していると思います。
がんばって0.7のバグを修正するか、0.6betaにlebel部分のコードを移植するかどちらかでしょうね…
Google Mapみたいに画像を拡大したり縮小したり移動したりできるプラグインを発見しました。英語サイトしか見つからなかったので翻訳を兼ねてメモしておきます。たぶんですがあまりにもバカデカイ画像ファイルだと容量的に問題あるんでしょうけど、解像度が非常に高く引き伸ばしてもかなり鮮明に映っているような画像を細部まで見せたい時は結構便利かもしれないです。しかしこんな機能を自分のサイトに実装できる時代になってしまったというのもスゴイ話ですね。 サンプル
プラグインの準備とダウンロード
プラグイン名は、Mapbox、フルネームはMapbox: Zoomable jQuery Map Pluginです。
http://wayfarerweb.com/jquery/plugins/mapbox/
このプラグインは、拡張機能としてマウスホイールをくるくるやってあげることで拡大縮小ができるようにMouse Wheel Extensionプラグインも同時に読み込んであげます。なのでまずは、以下のjQueryプラグインをダウンロードします。
Mapbox プラグイン ダウンロード
Mouse Wheel Extensionプラグイン ダウンロード
ダウンロードしたらjQueryを使えるようにします。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="./script/jquery.mousewheel.js"></script>
<script type="text/javascript" src="./script/jquery.mapbox.js"></script>
私はGoogleが提供してくれているjQueryライブラリーを読み込んでしまっています。現在現時点で1.4.1が一番新しいはずです。それからダウンロードしたプラグインを読み込みます。任意のディレクトリから読み込んで設定してください。これで必要なプラグインとライブラリーの準備完了です。
CSSの設定
拡大縮尺比率にもよりますが、ここでは解説ページとちょっと比率を変えてやってみます。最小サイズが500px*500pxの正方形です。勿論スタイルシートは各デザインに合わせて調整してください。
HTMLの設定
次にHTMLの設定例ですが、ここでは先のCSSと連動して#viewportのブロックを作ってあげます。見ての通り最小サイズはbackgroundとして配置し拡大画像をdivで設定してゆきます。ここでは4つの画像をデフォルト->2倍->2倍->1.5倍としてあります。ここらの比率は適当でいいみたいです。この画像のレイヤーは少なくとも2階層ないとダメだと言っています。当たり前の話ですが最低2階層ないと拡大縮小の意味がなくなってしまうので...。
注意点は、
もうすぐ回答受付を終了してしまいますが、
Mapboxで拡大縮小操作をしたときの拡大比率を得られる方法がわかりましたら、ご回答をお願いしたいです。
>質問者様へ
この回答の下に表示されるポイントを配分しないにチェックを入れれば、ポイント配分なしにできますよ。
layerSplit: 4, // how many times to split each layer as a zoom level
の部分が怪しいと思い、
もしかしたらlayerSplit: 4だと
zoomやbackが呼び出された時の動作が100%・200%・400%・800%のわかりやすい4段階になっちゃったりなんかして!と思いいじってみましたが、そんなうまい話はありませんでした。
0.7はどこかでafterZoom属性がデフォルトに上書きされちゃうみたいです。
2012/10/09 18:17:47http://wayfarerweb.com/jquery/plugins/mapbox/
からダウンロードできるバージョンを上記の修正を行い使ったほうがよさそうです。
「拡大縮小操作をしたときの拡大比率」を求めているようなのでさらに補足。
2012/10/10 07:28:41version 0.7のafterZoom: function(level, layer, xcoord, ycoord, viewport) {}
の引数のlevelが拡大比率のようです。
afterZoomが上書きされるバグは特定できていない状態で、mapbox.jsを直接書き換えながら確認したところ、
zoomを行うと、levelは0~3で変化しました。layerSplit: 4と対応していると思います。
がんばって0.7のバグを修正するか、0.6betaにlebel部分のコードを移植するかどちらかでしょうね…