1
0
mirror of https://github.com/klokantech/tileserver-php.git synced 2025-08-23 14:43:30 +02:00

72 Commits

Author SHA1 Message Date
Petr Pridal
f9e801849e Implementation of MapBox vector tiles (MBTiles pbf) serving #42 2015-09-05 04:44:45 +02:00
Petr Pridal
e66e577d5d Merge pull request #52 from klokantech/large-mbtiles
Faster check for grids in large mbtiles file. Closes #51.
2015-08-13 13:58:16 +02:00
Petr Pridal
ffedfde75e Faster check for grids in large mbtiles file. Issue #51. 2015-08-12 18:01:28 +02:00
Petr Pridal
dd8d884bc6 Update README.md 2015-01-08 22:58:22 +01:00
Petr Pridal
8b4a5142e8 Update README.md 2014-12-05 12:27:55 +01:00
Dalibor Janák
53b379cd67 Empty tiles should have for @2x layers 512x512px Fixes #39 2014-08-15 01:01:35 +02:00
Petr Pridal
2bf8bf6d4b A bug introduced in #38 fixed (missing protocol in the WMTS Resource URL) 2014-08-12 17:23:41 +02:00
Petr Pridal
e4454b12be Merge pull request #38 from kurt-hectic/master
Protocol (such as HTTPS vs HTTP) of the request is used in the metadata
2014-08-12 17:13:15 +02:00
Timo Proescholdt
8002dbbb7d service metadata takes into account request protocol 2014-08-04 17:47:47 +02:00
dala
d4121d86d5 Router: Add support for @ in names of layers 2014-07-23 15:32:10 +02:00
dala
ea6e176ab3 Path to app problem fixed 2014-07-23 15:25:25 +02:00
Dalibor Janák
b13b8d98c8 Merge pull request #34 from Fil/patch-2
Autodetect minzoom, maxzoom and format for mbtiles
2014-07-23 13:42:04 +02:00
Dalibor Janák
f08d72262d CORS for tiles. 2014-06-27 09:19:26 +02:00
Dalibor Janák
4250eff554 Merge pull request #32 from Fil/patch-1
Check which .mbtiles files are readable
2014-06-23 14:44:02 +02:00
Fil
34ffddb765 Autodetect minzoom, maxzoom and format for mbtiles
* `format` is detected via JPEG's magic number `FFD8`
* `minzoom` and `maxzoom` are `min(zoom_level)` and `max(zoom_level)`
2014-06-20 23:15:01 +02:00
Fil
5d2662a6a3 Check which .mbtiles files are readable
In my setup some .mbtiles are links to an external hard drive - don't fail when the external drive is not connected. (Also this would allow to manage "publishing a map" via unix permission.)
2014-06-20 12:24:09 +02:00
dala
8dec7469f1 Bad links in the test were fixed. 2014-06-05 22:04:18 +02:00
dala
8170e02397 Strict standards error in PHP 5.4+ on function declarations Fixes #30 - Classes in server renamed. 2014-06-05 21:54:40 +02:00
dala
779e320dec Fixed problem with line break in MBtiles metadata. 2014-06-05 21:46:00 +02:00
dala
e226ae2cc3 URL encoding in tilejson. Problem with backslashes in url fixed. #29 2014-06-04 09:55:25 +02:00
Petr Pridal
61c866a521 Update README.md 2014-05-29 09:10:23 +02:00
Petr Pridal
987f01c85e Block direct downloading of .mbtiles by default #8 2014-05-28 08:33:49 +02:00
Petr Pridal
ed19c0a414 Update README.md 2014-05-28 08:19:44 +02:00
Petr Pridal
04a9abf170 Update README.md 2014-05-28 08:09:56 +02:00
Petr Pridal
c3e9b41110 Update README.md 2014-05-21 12:36:32 +02:00
Petr Pridal
6c840820f0 Link to a live demo at http://tileserver.maptiler.com/ 2014-05-21 12:35:42 +02:00
Petr Pridal
d4c1996815 Updated README.md, restructuring - closes #28 2014-05-21 11:06:23 +02:00
Petr Pridal
3181142368 Refactoring of .htaccess 2014-05-21 10:31:37 +02:00
Petr Pridal
5fca96fd91 Merge pull request #27 from klokantech/v1
Merge v1.0 branch
2014-05-19 21:56:01 +02:00
Dalibor Janák
08b77f4bf4 Tileserver-php now running without .htaccess "Fixes #23" 2014-05-19 19:47:11 +02:00
Dalibor Janák
cba3048506 Issue Malformed UTFGrid (?) fixed. Fixes #26 2014-05-19 18:58:54 +02:00
Dalibor Janák
ed5618886f In file names are not allowed numbers. 2014-05-19 18:01:11 +02:00
Dalibor Janák
cd5cd44e75 Some changes of router for better running without htaccess. 2014-05-19 17:55:00 +02:00
Dalibor Janák
4cd86eefc3 TileJSON url passed to the constructor closes #24 2014-05-01 10:25:33 +02:00
Dalibor Janák
c953b0cecb Empty index.json missing [ #22 2014-04-29 09:22:19 +02:00
Dalibor Janák
3042384d13 Options object passed to the constructor for tileserver-js. 2014-04-28 17:34:38 +02:00
Dalibor Janák
8478f7dc7d WMTS KVP in htaccess 2014-04-28 16:29:41 +02:00
Dalibor Janák
656ffba9df Test file deleted. 2014-04-28 16:20:46 +02:00
Dalibor Janák
4d6ee2c714 Problems with response speed have been fixed. 2014-04-28 14:24:25 +02:00
Dalibor Janák
0f059f4fb7 Problems with WMTS have been fixed. 2014-04-28 14:12:51 +02:00
Dalibor Janák
2461a184a8 Add grids to metadata.json "Fixies #1" 2014-04-25 11:37:42 +02:00
Dalibor Janák
1f1dd22227 Increase the speed with mbtiles. 2014-04-25 10:22:02 +02:00
Dalibor Janák
9bbb1bce05 Httacess updates. 2014-04-24 17:08:15 +02:00
Dalibor Janák
b6470bd448 Better router. TileServer now uses .js and .css files from maptiler.com. 2014-04-24 14:56:01 +02:00
Dalibor Janák
2dfb1952aa Tileserver now supports *.json with callback. 2014-04-23 17:01:08 +02:00
Dalibor Janák
4a4a2ee348 Problems with old php versions have been fixed. 2014-04-23 16:08:09 +02:00
Dalibor Janák
f93f5e8b45 Problems with path url have been fixed. Global config variable have been added. 2014-04-23 14:30:27 +02:00
Dalibor Janák
56bfb34889 Fixed wmts/tms problems. 2014-04-14 12:29:03 +02:00
Dalibor Janák
212bc74fed Enabled as default html page with tileserver-js 2014-04-11 11:08:04 +02:00
Dalibor Janák
296a752e28 Cleaning of the PHP - router, object code, same functionality Fixes #14 Fixes #17 Fixes #19 2014-04-11 10:51:19 +02:00
Dalibor Janák
324129f8f8 Update README.md
UTFgrid
2014-03-26 10:00:01 +01:00
Dalibor Janák
59c2d03552 Added UTFgrid functionality on url {layer}.mbtiles/{z}/{x}/{y}.grid.json returns jsonp with grid and also callback is supported 2014-03-26 09:36:44 +01:00
Dalibor Janák
bd8c6b286f Added basic support for UTFgrid for url {server}/{layer}.mbtiles/{z}/{x}/{y}.grid 2014-03-25 10:10:06 +01:00
Petr Pridal
8fa1bfcbab Updated links to MapTiler in README 2014-01-31 08:18:01 +01:00
Petr Pridal
41dd3ec847 Fixing typo in metadata "sheme" -> "scheme". 2013-11-12 16:24:32 +01:00
Petr Pridal
b7b41e9725 Added screenshot to readme 2013-08-28 14:19:06 +02:00
Petr Pridal
ff7c48f0b0 Added the interactive user interface made 2013-08-26 15:29:59 +02:00
Petr Pridal
780e1c6796 Fixed DOCTYPE header 2013-04-26 08:57:32 +02:00
Petr Pridal
fcf88d62c0 Added CORS headers for cross side AJAX requests and WebGL textures 2013-04-26 08:40:24 +02:00
Petr Pridal
ad902c1a46 Fixed warning for missing files on older php. 2013-04-25 23:52:19 +02:00
Petr Pridal
d241d32716 Update README.md 2013-02-08 10:40:20 +01:00
Petr Pridal
4eee2225db TMS TileMap Metadata with type="InvertedTMS" too 2013-01-11 16:20:25 +01:00
Petr Pridal
121308fbf8 Update README.md 2012-09-11 09:41:11 +03:00
Petr Pridal
1aeb3bdb8c Fix of the Gaia client - it displays now all layers and correctly load the WGS84 ones too. 2012-08-12 23:55:20 +02:00
Petr Pridal
82414cb082 Removed duplicate file - a typo during commit. 2012-08-12 20:34:40 +02:00
Petr Pridal
0d4d50ab9c Initial .mbtiles implementation. 2012-08-12 20:28:23 +02:00
Petr Pridal
efcb733670 The initial commit for 0.1pre. 2012-08-12 16:47:34 +02:00
Petr Pridal
184a363778 Fixed missing tag in the /tms root metadata. 2012-08-12 16:46:14 +02:00
Petr Pridal
edce8b391b Performace chapter related to multiple domains. 2012-08-12 16:36:19 +02:00
Petr Pridal
754de66927 Default baseUrl is http://localhost/ 2012-08-12 16:23:48 +02:00
Petr Pridal
ab4980c06b The initial commit for 0.1pre. 2012-08-12 15:47:27 +02:00
Petr Pridal
555154b2d8 Update README.md 2012-08-11 00:27:36 +03:00
3 changed files with 1831 additions and 3 deletions

78
.htaccess Normal file
View File

@@ -0,0 +1,78 @@
# tileserver.php integration with Apache via .htaccess
#check htaccess functionality
DirectoryIndex tileserver.php
RewriteEngine on
# Option: some hostings require RewriteBase e.g. 1&1.com
#RewriteBase /
#RewriteBase /directory/
# Option: some hostings require -MultiViews e.g. 1&1.com
#Options -MultiViews
# Option: Restrictions for data crawlers
#Options -Indexes
# Option: CORS header for cross-domain origin access to all data
#<ifModule mod_headers.c>
# Header set Access-Control-Allow-Origin *
#</ifModule>
# Block direct downloading of .mbtiles
<FilesMatch "\.mbtiles$">
Order Allow,Deny
Deny from all
</FilesMatch>
# Mapping of the WMTS standardized URLs to real files and XML capabilities to tileserver.php
# WMTS RESTful
# ------------
# The file can be accessed directly:
# Example: http://www.tileserver.com/grandcanyon/10/192/401.png
## map /wmts/layer/[ANYTHING]z/x/y.ext -> /layer/z/x/y.ext (WMTS ignoring tilematrixset,style,..)
## BTW This is used only by Gaia which ignores the <ResourceURL template="...">
#RewriteRule ^wmts/([\w\d\._-]+)/.+?(\d+)/(\d+)/(\d+)\.(\w+)$ $1/$2/$4/$3.$5 [N]
## Example: http://www.tileserver.com/wmts/grandcanyon/style/tilematrixset/10/192/401.png
#
## map /layer/[ANYTHING]z/x/y.ext -> /layer/z/x/y.ext (WMTS ignoring tilematrix,style,..)
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([\w\d\._-]+)/.+?(\d+)/(\d+)/(\d+)\.(\w+)$ $1/$2/$3/$4.$5 [N]
## Example: http://www.tileserver.com/grandcanyon/style/tilematrixset/10/192/401.png
## WMTS KVP
## --------
## map the /?key=value&... -> /layer/z/x/y.ext KVP getTile queries directly to files
#
## format passed as mime-extension, cleaning formats (jpeg->jpg)
#RewriteCond %{QUERY_STRING} ^(.*)format=image/jpeg(.*)$ [NC]
#RewriteRule ^(.*)$ $1?%1format=jpg%2 [N]
#RewriteCond %{QUERY_STRING} ^(.*)format=jpeg(.*)$ [NC]
#RewriteRule ^(.*)$ $1?%1format=jpg%2 [N]
#RewriteCond %{QUERY_STRING} ^(.*)format=image/png(.*)$ [NC]
#RewriteRule ^(.*)$ $1?%1format=png%2 [N]
#
## variable order of keys: TODO: sort the same way as mime-extension to fixed order
#RewriteCond %{QUERY_STRING} ^.*request=gettile.*layer=([\w\d\._-]+).*tilematrix=(\d+).*tilerow=(\d+).*tilecol=(\d+).*format=(\w+).*$ [NC]
#RewriteRule ^ %1/%2/%3/%4.%5 [N]
#RewriteCond %{QUERY_STRING} ^.*request=gettile.*layer=([\w\d\._-]+).*format=(\w+).*tilematrix=(\d+).*tilerow=(\d+).*tilecol=(\d+).*$ [NC]
#RewriteRule ^ %1/%3/%5/%4.%2 [N]
#RewriteCond %{QUERY_STRING} ^.*request=gettile.*layer=([\w\d\._-]+).*tilematrix=(\d+).*tilecol=(\d+).*tilerow=(\d+).*format=(\w+).*$ [NC]
#RewriteRule ^ %1/%2/%4/%3.%5 [N]
## Example: http://www.tileserver.com/wmts?request=getTile&layer=grandcanyon&tileMatrix=10&tilerow=192&tilecol=401&format=png
## Example: http://www.tileserver.com/wmts?service=WMTS&request=GetTile&version=1.0.0&layer=ne2geo&style=&format=image/jpeg&TileMatrixSet=WGS84&TileMatrix=1&TileRow=2&TileCol=2
# rewrite .jpeg -> .jpg
RewriteRule ^(.+).jpeg$ $1.jpg [L]
# Not modified HTTP 302
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(tileserver\.php)
RewriteRule ^(.*)$ tileserver.php?/$1 [L,QSA]

262
README.md
View File

@@ -1,4 +1,260 @@
tileserver.php
==============
TileServer PHP: MapTiler and MBTiles maps via WMTS
==================================================
Easy to install OGC WMTS compliant map tile server for pre-rendered maps made with MapTiler / TileMill / MBTiles
This server distributes maps to desktop, web, and mobile applications from
a standard Apache+PHP web hosting.
Try a live demo at: http://tileserver.maptiler.com/
It is a free and open-source project implementing OGC WMTS standard for
pre-rendered map tiles made with [MapTiler](http://www.maptiler.com/), GDAL2Tiles,
or available as MBTiles files.
It is the easiest and cheapest way how to serve zoomable maps in a
standardized way - practically from any ordinary web hosting.
It is easy to install - just copy the project files to a PHP-enabled
directory along with your map data.
It comes with an online interface showing the list of the maps and step-by-step guides for online mapping libraries (Google Maps API, Leaflet, OpenLayers, OL3, MapBox JS, ArcGIS JS) and various desktop GIS software:
![tileserver-screenshot](https://f.cloud.github.com/assets/59284/1041807/a040160c-0fdb-11e3-8941-ab367b2a648d.png)
This project is developed in PHP, not because it is the best language for
development of web applications, but because it maximally simplify the
deployment on large number of web hosting providers including various free
web hostings.
Tiles are served directly by Apache with mod_rewrite rules as static files
and therefore are very fast and with correct HTTP caching headers.
Only XML metadata are delivered via PHP.
MBTiles are served via PHP, and are therfore slower, unless they are unpacked with mbutil.
[MapTiler](http://www.maptiler.com/) can render GeoTIFF, ECW, MrSID, GeoPDF into compatible map tiles. JPEG, PNG, GIF and TIFF with scanned maps or images without geolocation can be turned into standard map layers with the visual georeferencing functionality (http://youtu.be/eJxdCe9CNYg).
[![MapTiler - mapping tiles](https://cloud.githubusercontent.com/assets/59284/3037911/583d7810-e0c6-11e3-877c-6a7747b80dd3.jpg)](http://www.maptiler.com/)
Requirements:
-------------
- Apache webserver (with mod_rewrite / .htaccess supported)
- PHP 5.2+
(or anther webserver implementing mod_rewrite rules and PHP)
Installation:
-------------
Download the project files as a [zip archive](https://github.com/klokantech/tileserver-php/archive/master.zip) or source code from GitHub and unpack it into a web-hosting of your choice.
If you access the web address relevant to the installation directory,
the TileServer.php Server should display you a welcome message and further
instructions.
Then you can upload to the web hosting your mapping data - a directory with
tiles rendered with [MapTiler](http://www.maptiler.com/).
Tiles produced by open-source GDAL2Tiles or MapTiler and tiles in .mbtiles
files can be easily converted to required structure (XYZ with top-left origin
and metadata.json file). The open-source utility [mbutil](https://github.com/mapbox/mbutil) produces
exactly the required format.
Direct reading of .mbtiles files is supported, but with decreased performance
compared to the static files in a directory. The advantage is easier data management,
especially upload over FTP or similar protocols.
Supported protocols:
--------------------
- OpenGIS WMTS 1.0.0
The Open Geospatial Consortium (OGC) Web Map Tile Service (WMTS)
Both KVP and RESTful version 1.0.0:
http://www.opengeospatial.org/standards/wmts/
Target is maximal compliance to the standard.
Exposed at http://[...]/wmts
- OSGeo TMS 1.0.0
The OSGeo Tile Maps Service, but with inverted y-coordinates:
http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification
This means request compatible with OpenStreetMap tile servers.
Target is "InvertedTMS" implementation used by the ArcBruTile client
which is available from http://arcbrutile.codeplex.com/ and uses
flipped y-axis.
Exposed at http://[...]/tms
- TileJSON.js
Metadata about the individual maps in a ready to use form for web
clients following the standard http://mapbox.com/developers/tilejson/
and with support for JSONP access.
Exposed at http://[...]/layer.jsonp
- Direct access with XYZ tile requests (to existing tiles in a directory
or to .mbtiles)
Compatible with Google Maps API / Bing SDK / OpenStreetMap clients.
Exposed at http://[...]/layer/z/x/y.ext
- MapBox UTFgrid request (for existing tiles in .mbtiles with UTFgrid support). Callback is supported
Example https://www.mapbox.com/demo/visiblemap/
Specification https://github.com/mapbox/utfgrid-spec
Exposed at http://[...]/layer/z/x/y.grid.json
To use the OGC WMTS standard point your client (desktop or web) to the URL
of 'directory' where you installed tileserver.php project with suffix "wmts".
For example: http://www.example.com/directory/wmts
If you have installed the project into a root directory of a domain, then the address is: http://www.example.com/wmts
The supported WMTS requests includes:
GetCapabilities RESTful/KVP:
http://[...]/1.0.0/WMTSCapabilities.xml
http://[...]?service=wmts&request=getcapabilities&version=1.0.0
GetTile RESTful/KVP:
http://[...]/layer/[ANYTHING-OPTIONAL][z]/[x]/[y].[ext]
http://[...]?service=wmts&request=getTile&layer=[layer]&tilematrix=[z]&tilerow=[y]&tilecol=[y]&format=[ext]
Other example requests are mentioned in the .htaccess.
Performance from the web clients
--------------------------------
It is highly recommended to map several domain names to the service, such as:
http://a.example.com/, http://b.example.com/, http://c.example.com/.
This can be done with DNS CNAME records pointing to your hosting.
The reason for this is that traditionally browsers will not send more then two
simultaneous http request to the same domain - with multiple domains for the
same server you can better saturate the network and receive the maps faster.
Performance
-----------
In case the data are available in a form of directory with XYZ tiles, then
Apache webserver is serving these files directly as WMTS RESTful or KVP.
This means performance is excellent, maps are delivered very fast and large
number of concurrent visitors can be handled even with quite a low-end
hardware or cheap/free web hosting providers.
Mod_rewrite rules are utilized to ensure the HTTP requests defined in the OCG
WMTS standard are served, and Apache preserve standard caching headers & eTag.
The performance should be significantly better then performance of any other
tile caching project (such as TileCache.org or GeoWebCache).
Performance graph for "apache static" comparing other tile caching projects
is available online at:
http://code.google.com/p/mod-geocache/wiki/PreliminaryBenchmark
Limits of actual implementation
-------------------------------
With intention, in this moment the project supports only:
- Mercator tiles (a la OpenStreetMap) and Geodetic tiles (WGS84 unprojected)
with known and described tiling scheme.
- All tiles must be 256x256 pixels.
- We enforce and require XYZ (top-left origin) tiling schema (even for TMS).
Password protection
-------------------
HTTP Simple Authentication can be easily added to the server.
Edit the .htaccess and add these lines:
AuthUserFile /full/path/to/.htpasswd
AuthType Basic
AuthName "Secure WMTS"
Require valid-user
Create a file called .htpasswd with user:password format.
You can use a command-line utility:
$ htpasswd -c .htpasswd [your-user-login]
Or an online service:
http://www.htaccesstools.com/htpasswd-generator/
HTTPS / SSL support
-------------------
TileServer.php can run without any problems over HTTPS, if required.
Microsoft Windows web-hosting
-----------------------------
The TileServer.php should run on Windows-powered webservers with Apache
installation if PHP 5.2+ and mod_rewrite are available.
With the IIS webserver hosting, you may need PHP and IIRF module
(http://iirf.codeplex.com/) and alter appropriately the rewrite rules.
Credits / Contributors
----------------------
Project developed initially by Klokan Technologies GmbH, Switzerland in
cooperation with National Oceanic and Atmospheric Administration - NOAA, USA.
- Petr Pridal - Klokan Technologies GmbH <petr.pridal@klokantech.com>
- Jason Woolard - NOAA <jason.woolard@noaa.gov>
- Jon Sellars - NOAA <jon.sellars@noaa.gov>
- Dalibor Janak - Klokan Technologies GmbH <dalibor.janak@klokantech.com>
Tested WMTS/TMS clients
-----------------------
- QuantumGIS Desktop 1.9+ - open with Layer->Add WMS layer
http://www.qgis.org/
- ESRI ArcGIS Desktop 10.1+ - native WMTS implementation supported
http://www.esri.com/software/arcgis/arcgis-for-desktop
- ESRI ArcGIS Online - loading via WMTS protocol
http://www.arcgis.com/
- ArcBruTiles plugin for ArcGIS 9.3+ - via TMS endpoint
http://arcbrutile.codeplex.com/
- OpenLayers WMTS Layer - including parsing GetCapabilities
http://www.openlayers.org/
- GAIA - native WMTS (issues with 3857 to be fixed)
http://www.thecarbonproject.com/gaia.php
- MapBox.js - the loading of maps via TileJSON, interaction layer supported
https://www.mapbox.com/mapbox.js
BSD License
-----------
Copyright (C) 2015 Klokan Technologies GmbH (http://www.klokantech.com/)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

1494
tileserver.php Normal file

File diff suppressed because it is too large Load Diff