source: subversion/sites/other/tilesAtHome/Browse/index.php @ 3655

Last change on this file since 3655 was 2723, checked in by ojw, 13 years ago

fix mapnik link

File size: 7.6 KB
Line 
1<?php
2  $x = $_GET["x"];
3  $y = $_GET["y"];
4  $z = $_GET["z"];
5  $tileset = $_GET["tileset"];
6 
7 
8  if(array_key_exists("lat", $_GET)){
9    list($x,$y,$z) = ll2xyz($_GET["lat"], $_GET["lon"]);
10  }
11  $valid = 1;
12  if($z < 0 || $z > 18)
13    $valid = $z = 0;
14   
15  $Max = pow(2,$z);
16  if($x < 0 || $x >= $Max)
17    $valid = 0;
18  if($y < 0 || $y >= $Max)
19    $valid = 0;
20 
21  if(!$valid || ($x+$y+$z == 0)){
22      // Default start view
23      $z = 9;
24      $x = 255;
25      $y = 170;
26      }
27 
28  $Grid = 3;
29  $Centre = floor(($Grid + 1) / 2)-1;
30
31 
32  $Title = sprintf("OpenStreetMap tile browser (%d,%d at zoom %d)",$x,$y,$z);
33  $Robots = "<meta name=\"robots\" content=\"nofollow,noindex\">";
34  print("<html><head><title>$Title</title>\n<link rel=\"stylesheet\" href=\"styles.css\">\n$Robots\n</head>\n<body>\n");
35 
36  TableStart();
37 
38  # Top row:
39  print "<tr>";
40  print TableImg("gfx/out.png", LinkTile($x/2,$y/2,$z-1), 29, 29);
41  for($i = 0; $i < $Grid; $i++){
42    print TableImg(($i == $Centre ? "gfx/N.png" : "gfx/EW.png"), LinkTile($x,$y-2,$z), 256, 29);
43    }
44  print TableImg("gfx/in.png", LinkTile($x*2,$y*2,$z+1), 29, 29);
45  print "</tr>";
46 
47  # Rows:
48  for($iy = 0; $iy < $Grid; $iy++)
49  {
50    $RelY = $iy - $Centre;
51    print "<tr>";
52    print TableImg(($iy == $Centre ? "gfx/W.png" : "gfx/NS.png"), LinkTile($x-2,$y,$z), 29, 256);
53    for($ix = 0; $ix < $Grid; $ix++)
54      {
55      $RelX = $ix - $Centre;
56      print TableLinkedImage($x + $RelX, $y + $RelY, $z, 256, 256);
57      }
58    print TableImg(($iy == $Centre ? "gfx/E.png" : "gfx/NS.png"), LinkTile($x+2,$y,$z), 29, 256);
59    print "</tr>";
60  }
61
62  # Bottom row:
63  print "<tr>";
64  print TableImg("gfx/C.png", "", 29, 29);
65  for($i = 0; $i < $Grid; $i++){
66    print TableImg(($i == $Centre ? "gfx/S.png" : "gfx/EW.png"), LinkTile($x,$y+2,$z), 256, 29);
67    }
68  print TableImg("gfx/C.png", "", 29, 29);
69  print "</tr>";
70     
71  list($W, $E) = ProjectL($x, $z);
72  list($N, $S) = Project($y, $z);
73 
74  $Lat = ($N+$S)/2;
75  $Long = ($E+$W)/2;
76  $URL = sprintf("http://openstreetmap.org/index.html?lat=%f&amp;lon=%f&amp;zoom=%d", 
77    $Lat, 
78    $Long, 
79    12);
80  $TileSizeDegrees = ($N-$S);
81  $TileSizeKm = 6356 * $TileSizeDegrees / 360;
82  $MapSizeKm = $TileSizeKm * $Grid;
83  $MapSizeMile = $MapSizeKm / 1.609;
84 
85  $ZoomOut = LinkTile($x/2,$y/2,$z-1);
86  $ZoomIn = LinkTile($x*2,$y*2,$z+1);
87 
88  $LatLongURL = sprintf(
89    "./?lat=%1.3f&lon=%1.3f", 
90    $Lat, 
91    $Long);
92   
93  $LatLongHTML = sprintf(
94    "Location: <a href=\"%s\">%f, %f</a>", 
95    $LatLongURL,
96    $Lat, 
97    $Long);
98 
99  $TileDetailsURL = sprintf(
100    "../Tiles/tile.php/%d/%d/%d.png_details",
101    $z,
102    $x,
103    $y);
104 
105  $PrintableURL = sprintf(
106    "http://almien.co.uk/OSM/BigMap/view.php?x=%d&amp;y=%d&amp;z=%d&amp;size=%d",
107    $x,
108    $y,
109    $z,
110    9);
111 
112  $DataURL = sprintf(" http://www.openstreetmap.org/api/0.3/map?bbox=%f,%f,%f,%f",
113    $W,$S,$E,$N);
114 
115  $Tools1HTML = sprintf(
116    "<a href=\"%s\">slippy map</a> (<a href=\"%s\">zoom out</a>, <a href=\"%s\">zoom in</a>) <a href=\"%s\">tile details</a>",
117    $URL,
118    $ZoomOut,
119    $ZoomIn,
120    $TileDetailsURL);
121 
122  $Tools2HTML = sprintf(
123    "<a href=\"%s\">Printable version</a>, <a href=\"%s\">Data</a>",
124    $PrintableURL,
125    $DataURL);
126   
127  printf("<tr><td colspan=\"%d\" class=\"tbl\">%s - %s</td></tr>\n",
128    $Grid + 2,
129    $LatLongHTML,
130    $Tools1HTML);
131  printf("<tr><td colspan=\"%d\" class=\"tbl\">%s</td></tr>\n",
132    $Grid + 2,
133    $Tools2HTML);
134 
135  printf("<tr><td colspan=\"%d\" class=\"tbl\">Display tileset: %s</td></tr>\n",
136    $Grid + 2,
137    implode(", ", array(
138      TilesetLink(0,"Tiles@home"), 
139      TilesetLink(1,"Mapnik"),
140      TilesetLink(2,"Cycle"),
141      TilesetLink(3,"Maplint"),
142      TilesetLink(4,"Sea"))));
143 
144  if($z >= 12){
145    printf("<tr><td colspan=\"%d\" class=\"tbl\">%s</td></tr>\n",
146      $Grid + 2,
147      UpdateForm($x,$y,$z));
148  }
149 
150  TableEnd();
151 
152  printf("<p class=\"copy\">Copyright &copy; %s, various <a href=\"%s\">OpenStreetMap</a> contributors.\n<b>Some rights reserved</b>.\nLicensed as Creative Commons <a href=\"%s\">CC-BY-SA 2.0</a></p>\n",
153    date("Y"),
154    "http://www.openstreetmap.org/",
155    "http://creativecommons.org/licenses/by-sa/2.0/");
156 
157  # Optional form, to let you type in lat/long
158  if(0){
159    printf("<p><form action=\"./\" method=\"get\">\n");
160    printf("Lat/long: <input type=\"text\" name=\"lat\" value=\"%1.3f\" size=\"8\">,\n", $Lat);
161    printf("<input type=\"text\" name=\"lon\" value=\"%1.3f\" size=\"8\">\n", $Long);
162    printf("<input type=\"submit\" value=\"Go\">\n");
163    printf("</form></p>\n");
164  }
165 
166  function UpdateForm($X,$Y,$Z){
167    if($Z < 12) return("");
168    while($Z > 12){
169      $X = floor($X / 2);
170      $Y = floor($Y / 2);
171      $Z--;
172    }
173    $Html = "<form action=\"../NeedRender/\" method=\"get\">\n";
174    $Html .= "<input type=\"hidden\" name=\"src\" value=\"user_req\">\n";
175    $Html .= "<input type=\"hidden\" name=\"priority\" value=\"1\">\n";
176    $Html .= "<input type=\"hidden\" name=\"x\" value=\"$X\">\n";
177    $Html .= "<input type=\"hidden\" name=\"y\" value=\"$Y\">\n";
178    $Html .= "<input type=\"submit\" value=\"Request update\">\n";
179    $Html .= "</form>\n";
180    return($Html);
181    }
182  function TilesetLink($Num,$Name){
183    global $x,$y,$z;
184    return(sprintf("<a href=\"%s\">%s</a>", LinkTile($x,$y,$z,$Num), $Name));
185   
186  }
187  function MoreLink($More){ 
188    global $x,$y,$z;
189    return(LinkTile($x,$y,$z) . "&amp;$More=yes");
190  }
191  function TableEnd(){ print "</table>"; }
192  function TableStart(){ print "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">"; }
193 
194  function TableLinkedImage($x,$y,$z,$w,$h){
195    return(TableImg(ImageURL($x,$y,$z), LinkTile($x,$y,$z),$w,$h));
196  }
197  function ImageURL($x,$y,$z){
198    global $tileset;
199    if($tileset == "1")
200      return(sprintf("http://tile.openstreetmap.org/%d/%d/%d.png", $z,$x,$y));
201   
202    if($tileset == "2")
203      return(sprintf("../Tiles/cycle.php/%d/%d/%d.png", $z,$x,$y));
204   
205    if($tileset == "3")
206      return(sprintf("../Tiles/maplint.php/%d/%d/%d.png", $z,$x,$y));
207     
208    if($tileset == "4")
209      return(sprintf("../Tiles/landsea.php/%d/%d/%d.png", $z,$x,$y));
210     
211    return(sprintf("../Tiles/tile.php/%d/%d/%d.png",$z,$x,$y));
212  }
213  function LinkTile($X,$Y,$Z,$linkTileset=-1){
214    global $tileset;
215    if($linkTileset == -1)
216      $linkTileset = $tileset;
217    return(sprintf("./?x=%d&amp;y=%d&amp;z=%d&amp;tileset=%d",$X,$Y,$Z,$linkTileset));
218  }
219  function TableRow($Blocks){
220    return("<tr><td>".implode("</td><td>", $Blocks) . "</td></tr>");
221  }
222  function TableImg($Img="",$URL="",$w,$h){
223    $Html = "<img src=\"$Img\" border=\"0\" width=\"$w\" height=\"$h\"/>";
224    if($URL)
225      $Html = "<a href=\"$URL\">$Html</a>";
226    $Html = "  <td>$Html</td>\n";
227    return($Html);
228  }
229
230  function ll2xyz($Lat, $Long){
231    $z = 12;
232    $Size = pow(2,$z);
233    $pi = 3.1415926535;
234    $x = floor($Size * ($Long + 180) / 360);
235    $y = floor($Size * ($pi -ProjectF($Lat)) / (2 * $pi));
236    printf("<!-- translating %f,%f to %1.3f,%1.3f,%1.3f -->", $Lat, $Long, $x,$y,$z);
237    return(array($x,$y,$z));
238  }
239 
240function ProjectF($Lat){
241  $Lat = deg2rad($Lat);
242  $Y = log(tan($Lat) + (1/cos($Lat)));
243  return($Y);
244}
245function Project($Y, $Zoom){
246  $LimitY = ProjectF(85.0511);
247  $RangeY = 2 * $LimitY;
248 
249  $Unit = 1 / pow(2, $Zoom);
250  $relY1 = $Y * $Unit;
251  $relY2 = $relY1 + $Unit;
252 
253  $relY1 = $LimitY - $RangeY * $relY1;
254  $relY2 = $LimitY - $RangeY * $relY2;
255   
256  $Lat1 = ProjectMercToLat($relY1);
257  $Lat2 = ProjectMercToLat($relY2);
258  return(array($Lat1, $Lat2)); 
259}
260function ProjectMercToLat($MercY){
261  return(rad2deg(atan(sinh($MercY))));
262}
263function ProjectL($X, $Zoom){
264  $Unit = 360 / pow(2, $Zoom);
265  $Long1 = -180 + $X * $Unit;
266  return(array($Long1, $Long1 + $Unit)); 
267}
268?>
269
270</body>
271</html>
Note: See TracBrowser for help on using the repository browser.