GW期間特にやることもなく、日々Javascriptと格闘しております。
Open Street Mapのカスタマイズを継続しているのですが、やりたい事をひとつ達成すると、またあれがやりたいこれがやりたいと、どんどん欲が出てくるものですね。
###前提・実現したいこと
OSM上に手書きメモを残したいと思っているのですが、まさかOSMに直接記録するわけにもいかないため、Leaflet.jsで一枚レイヤーを作り、その上に記録しようと思っております。これはPHP+GDで動的に実現するつもりですが、現段階では考えないことにします。
とりあえずはデフォルトレイヤー上に画像レイヤーを一枚乗せるところまでいきたいと思っています。
また画像ですが、せっかくなので Zoomify でタイル化したものを使うつもりです。
###発生している問題・エラーメッセージ
参考1、2ともに、「osm」がデフォルトのマップレイヤー、「tegaki」が今回追加する画像レイヤーです。それぞれのレイヤーは切り替え表示が可能で、ここまでは動作することを確認しています。また「lat」「lng」は、Geolocationで取得した現在地情報が入ります。これも動作確認済みです。
問題は「tegaki」レイヤーを表示したときに表示されるタイル画像の位置決めが出来ないんです。参考1も2もサンプルのタイル画像を表示するところまでは出来るのですが、いずれも表示される場所がアフリカ大陸から北極にかけてドドーンと。画像のX軸方向中心はおそらくグリニッジ子午線と思われます。アトランティス大陸があったと言われるあたりですね(汗)デフォルトの座標が緯度経度ゼロのポイントなんでしょうか。
実際に使う画像は町内程度のサイズ、大きくても市内サイズですので、サンプルのタイル画像ほど大きくはなりません。これを任意の位置に持ってこようにも、どこをいじっても画像の位置が変えられないんです。
###参考1 zoomify_layer.jsを使用
javascript
1var osm = L.tileLayer( 2 "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { 3 attribution: "© <a href='http://osm.org/copyright'>OpenStreetMap</a> contributors" 4 } 5); 6 7var imageUrl = 'http://mapy.vugtk.cz/kreibich/zoomify/beroun/', 8 imageSize = { 9 width: 7112, 10 height: 5377 11 }; 12 13var tegaki = new ZoomifyLayer(imageUrl, imageSize); 14 15var map = L.map( 16 "map", { 17 center: [lat, lng], 18 layers: [osm], 19 zoom: 15 20 } 21);
###参考2 L.TileLayer.Zoomify.jsを使用
javascript
1var osm = L.tileLayer( 2 "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { 3 attribution: "© <a href='http://osm.org/copyright'>OpenStreetMap</a> contributors" 4 } 5); 6 7var tegaki = L.tileLayer.zoomify('http://thematicmapping.org/playground/zoomify/books/', { 8 width: 5472, 9 height: 3648, 10 tolerance: 0.8, 11 continuousWorld: true, 12 //bounds: ([140.40, 40],[150, 50]), 13 attribution: 'Photo: Bjørn Sandvik' 14}); 15 16var map = L.map( 17 "map", { 18 center: [lat, lng], 19 layers: [osm], 20 zoom: 15 21 } 22);
###試したこと
リファレンス を読みながら、tilelayerの要素を中心に、位置情報の設定ができそうなところはいろいろいじってみたつもりです。
惜しいところまで来ているとは思うのですが、あと一歩が進みません。もしかしたらJavascriptというよりもライブラリの仕様なのかもしれません。レイヤー画像の位置決めさえ出来ればいいのですが、不可能なようであれば、代替案などアドバイス頂けたらありがたいです。何卒よろしくお願いいたします。
###補足情報(言語/FW/ツール等のバージョンなど)
Leaflet
ZoomifyLayer
Leaflet.Zoomify
###さらに試したこと
この際タイル化した画像じゃなく、ただの画像でもいいやと思い、次のソースを試してみました。
javascript
1var w = 960, 2 h = 720, 3 url = 'mac.jpg'; 4 5var bounds = new L.LatLngBounds([0, 0], [960, 720]); 6 7var tegaki = L.imageOverlay(url, bounds, { 8 continuousWorld: true, 9 crs: L.CRS.Simple 10}); 11
色々調べて「L.CRS.Simple」を使うのではないかと思い、従前のソースのtegaki以下を変更してみました。
結果は変わりませんでした。やはり画像は緯度経度0度付近から始まってしまいます。今回の場合は解像度のせいか、世界地図に縦横比を合わせたみたいに画像が歪んでしまいました。
英語サイトを中心に情報を漁っていますが、自分のように地図レイヤーの上に画像レイヤーを重ねて、切り替えて使いたいという事例には辿り着きませんでした。こういう使い方は一般的ではないのでしょうか。zoomifyを使う場合も含めて、画像レイヤー一枚をleefletで使う事例は多いのですが…知識が浅いせいか応用もききません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/05 13:31 編集
2016/05/05 14:04