Ума не приложу, откуда у меня на сервере этот код, но он, зараза, изумительно хорош. Помогает передавать файлы mbtiles в лефлет или OL. Загружаете файл exampleFile.mbtiles на сервер, прописываете необходимые пути и у вас отображаются нужные тайлы.
Файл MBTiles можно получить из QGIS или скачать для примера образец.
HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!DOCTYPE html> <html> <head> <title>PHP Map Server</title> <meta charset="utf-8" /> <link rel="stylesheet" href=".../leaflet.css"/> <script src=".../leaflet.js"></script> <script src=".../script.js"></script> </head> <body> <div id="map"></div> </body> </html> |
JavaScript (файл script.js)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | let map = new L.Map("map",{ zoomControl:false, zoom: 10, center: [55.741126, 37.489289] }) let mapquestOSM = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '...'}).addTo(map) let mbTiles = new L.tileLayer('tileserver/mbtiles.php?db=exampleFile.mbtiles&z={z}&x={x}&y={y}',{ tms: true, attribution: '...', opacity: 1.0 }).addTo(map) let baseLayers = {"OpenStreetMap": mapquestOSM,} let overlays = {"Local MBTiles File": mbTiles,} layersControl = new L.Control.Layers(baseLayers, overlays).addTo(map) |
PHP (файл tileserver/mbtiles.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?php $zoom = $_GET['z']; $column = $_GET['x']; $row = $_GET['y']; $db = $_GET['db']; try { // Open the database $conn = new PDO("sqlite:$db"); // Query the tiles view and echo out the returned image $sql = "SELECT * FROM tiles WHERE zoom_level = $zoom AND tile_column = $column AND tile_row = $row"; $q = $conn->prepare($sql); $q->execute(); $q->bindColumn(1, $zoom_level); $q->bindColumn(2, $tile_column); $q->bindColumn(3, $tile_row); $q->bindColumn(4, $tile_data, PDO::PARAM_LOB); while($q->fetch()) { header("Content-Type: image/png"); echo $tile_data; } } catch(PDOException $e) { print 'Exception : '.$e->getMessage(); } ?> |