この方法で出力すればOpenLayers3以外(Leafletなど)でも利用可能です。
使用するのは
- TileMill https://www.mapbox.com/tilemill/
- mb-util https://github.com/mapbox/mbutil
1. Shapefileからmbtilesを生成する
LearnOSMに詳しい手順が載っているので、おおまかな手順だけ。
1. TileMillを起動し、New projectから新しいプロジェクトを作成する
2. 適当なFilenameを入力し、Image formatを選択し、Addをクリック
この時、デフォルトの世界地図を利用しない(読み込むShapefile以外必要ない)場合は、Default dataのチェックを外す
3. Editor画面になったら、左下のLayersからAdd layerをクリック
4. Datasourceで読み込みたいShapefileを選択し、Save & Styleをクリック
5. Layerが追加されるので、適宜デザインを調整する(デザインはCartoCSSで記述可能)
6. 右上のExportからMBTilesを選択する
7. 書き出す範囲やズームレベルを以下のような形で選択し、Export
おおまかな容量がZoomの下に表示されるので、参考程度に。
(100GB+とかの場合、出力に結構な時間を要する&ファイルサイズが大きくなるので注意)
2. mbtilesから地図タイルを生成する
今回はTileMillで出力したjapan.mbtilesからjapan/tiles下に"Z/X/Y.png"の形で出力した。
git clone git://github.com/mapbox/mbutil.git cd mbutil python setup.py install mb-util japan.mbtiles japan/tiles
tilesディレクト下の構造を保ったまま、適宜設置する。
3. OL3で開く
ol.min.jsなどを呼び出してあげてから、以下のような感じで。
var map = new ol.Map({ target: 'map', renderer: 'canvas', layers: [ new ol.layer.Tile({ source: new ol.source.XYZ({ url: '/tiles/{z}/{x}/{y}.png' }) }), new ol.layer.Tile({ source: new ol.source.TileWMS({ attributions: [new ol.Attribution({ html: "地図データ © 国土交通省 国土数値情報(行政区域)" })] }) }) ], view: new ol.View({ //中心座標(仮指定) center: ol.proj.transform([134.15, 35.27], 'EPSG:4326', 'EPSG:3857'), zoom: 6 }) });
(OpenLayers 3.11.2で動作確認済み)
WGS84あたりに測地系を揃えてあげれば、QGISなどで作ったShapefileも同じ手法で地図タイルにできるので、色々なデータをOL3で見ると面白い(かも)
0 件のコメント:
コメントを投稿
記事へのコメントはいつも確認している訳ではないので、お返事が遅れる場合があります。
ご質問やご意見は twitter@9SQ へお送り頂けると早くお返事できると思います。