ministryofweb / php-osm-tiles
A library to convert map tile numbers to coordinates and vice versa.
Installs: 2 561
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 4
Forks: 0
Open Issues: 0
Requires
- php: ^8.1
Requires (Dev)
- ergebnis/composer-normalize: ^2.13
- friendsofphp/php-cs-fixer: ^2.18
- php-parallel-lint/php-parallel-lint: ^1.2
- phpmd/phpmd: ^2.9
- phpstan/phpstan: ^0.12.81
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.7
- vimeo/psalm: ^5.0
README
This library helps to convert OpenStreetMap (OSM) map tile numbers to geographical coordinates and vice versa.
Installation
Using Composer, just add it to your composer.json
by running:
composer require ministryofweb/php-osm-tiles
Compatibility
The PHP OSM Tiles library requires PHP >= 8.1.
If support for older PHP versions is needed, the PHP OSM Tiles library can be installed at version 2.0 (PHP 7.3, PHP 7.4 and PHP 8.0), 1.0 (PHP 7.1 and PHP 7.2) or version 0.1.0 (PHP 7.0).
Usage/Examples
Convert from geographical coordinates to map tile numbers
<?php use MinistryOfWeb\OsmTiles\Converter; use MinistryOfWeb\OsmTiles\LatLng; $converter = new Converter(); $point = new LatLng(52.5, 13.4); $zoom = 13; $tile = $converter->toTile($point, $zoom); printf('/tiles/%d/%d/%d.png', $zoom, $tile->x, $tile->y);
The code above produces the output below:
/tiles/13/4400/2687.png
Convert from map tile numbers to geographical coordinates
<?php use MinistryOfWeb\OsmTiles\Converter; use MinistryOfWeb\OsmTiles\Tile; $converter = new Converter(); $tile = new Tile(4400, 2687, 13); $point = $converter->toLatLng($tile); printf('%.5f, %.5f', $point->lat, $point->lat);
The code above produces the output below:
52.50953, 13.35938
Get Bounds of a Tile
It's possible to get the coordinates for the Tiles north-western, north-eastern, south-eastern and south-western nodes:
<?php use MinistryOfWeb\OsmTiles\LatLng; use MinistryOfWeb\OsmTiles\Tile; use MinistryOfWeb\OsmTiles\TileBounds; $tile = Tile::fromLocation(new LatLng(52.5, 13.5)); echo 'South-eastern point for tile is located at: ' . TileBounds::getSouthEast($tile)->lat . ', ' . TileBounds::getSouthEast($tile)->lng . PHP_EOL;
The code above produces the output below:
South-eastern point for tile is located at: 52.496159531097, 13.51318359375
Run Tests
make test
or
./vendor/bin/phpunit
Run all CI tools
make ci