-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtoTile.php
49 lines (44 loc) · 1.07 KB
/
toTile.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
/**
* Convert a longitude (degrees) to tile ID (floating comma) on a given zoom level)
*
* @param long longitude
*
* @param zoom zoom level
*
* @return tile X index (floating point)
*/
function lonToTile($long, $zoom){
return (($long + 180) / 360) * pow(2, $zoom);
}
/**
* Convert a latitude (degrees) to tile ID (floating comma) on a given zoom level)
*
* @param long latitude
*
* @param zoom zoom level
*
* @return tile Y index (floating point)
*/
function latToTile($lat, $zoom){
return (1 - log(tan($lat * pi()/180) + 1 / cos($lat* pi()/180)) / pi()) /2 * pow(2, $zoom);
}
/**
* Return Mercator scale factor
*/
function mercatorFactor($lat) {
$latRad = ($lat / 180.0) * M_PI;
return 1.0 / cos($latRad);
}
/**
* Get map scale in pixel per meter
*/
function pixelPerMeter($lat, $zoom, $tileSize) {
$earth_radius = 6378137.0;
// tile width at equator
$eqTileWidth = ($earth_radius * 2 * pi()) / pow(2, $zoom);
// scale at equator
$eqPixelWidth = $eqTileWidth / 256.0;
return 1 / ($eqPixelWidth / mercatorFactor($lat));
}
?>