source: subversion/applications/rendering/wms/class.wireframe.php

Last change on this file was 9330, checked in by isortega, 11 years ago

WMS now features basic osmarender support (only z17), as well as more bugs.

File size: 4.8 KB
Line 
1<?php
2
3/// @author Iván Sánchez Ortega <ivan@sanchezortega.es>
4
5/**
6    OSM WMS ("OpenStreetMap Web Map Service")
7    Copyright (C) 2008, Iván Sánchez Ortega
8
9    This program is free software: you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation, either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.
21*/   
22
23/// Wireframe class
24/// Lots of TODOs here - at some time, this will be a full-blown WMS conformant server.
25/// TODO: reproject the queried area into EPSG:4236
26/// TODO: reproject the data from OSM API into the queried coordinate system.
27/// TODO: rely the data parsing/downloading to some backend class
28/// TODO: fix for near-180 longitudes
29/// TODO: error messages
30
31
32
33class wireframe /* extends layer */
34{
35
36static public function GetCapabilities()
37{
38// return "
39//       <Layer queryable='0' opaque='0'>
40//         <Name>wireframe</Name>
41//         <Title>OSM Wireframe</Title>
42//         <EX_GeographicBoundingBox>
43//           <westBoundLongitude>-180</westBoundLongitude>
44//           <eastBoundLongitude>180</eastBoundLongitude>
45//           <southBoundLatitude>-90</southBoundLatitude>
46//           <northBoundLatitude>90</northBoundLatitude>
47//         </EX_GeographicBoundingBox>
48//         <Style>
49//           <Name>Default</Name>
50//           <Title>Default</Title>
51//         </Style>
52//       </Layer>
53// ";
54
55// Capabilities for WMS 1.1.0
56return "
57      <Layer queryable='0' opaque='0'>
58        <Name>wireframe</Name>
59        <Title>OSM Wireframe</Title>
60        <Style>
61          <Name>Default</Name>
62          <Title>Default</Title>
63        </Style>
64      </Layer>
65";
66
67
68//      <BoundingBox SRS='EPSG:4326' minx='-180' miny='-90' maxx='180' maxy='90' />
69//      <BoundingBox SRS='EPSG:32630' minx='-1050000' miny='3000000' maxx='1150000' maxy='5000000' />
70
71
72}
73
74
75static public function GetMap($bbox,$crs,$height,$width,$format)
76{
77        // Backend class should be able to return PHP arrays (nodes/ways), string, URL.
78//      list($left,$bottom,$right,$top) = explode(',',$bbox);
79       
80//      backend_api::get_parsed_data($bbox,$nodes,$ways);
81//      backend_osmxapi::get_parsed_data($bbox,$nodes,$ways);
82//      $backend = new backend_osmxapi;
83//      $backend->get_parsed_data($bbox,$nodes,$ways);
84
85        datafactory::get_parsed_data($bbox,$crs,$nodes,$ways,$relations);
86       
87        /// Convert the node's coordinates into X-Y, related to (0,0) and the final image size
88       
89        list($left,$bottom,$right,$top) = explode(',',$bbox);   // Numbers are OK if the backend hasn't thrown an error yet.
90       
91        $x_factor = $width  / ($right - $left)  ;
92        $y_factor = $height / ($top   - $bottom);
93
94        foreach($nodes as &$node)
95        {
96                // Lat
97                $node[0] = $height - ($node[0]-$bottom) * $y_factor;
98               
99                // Lon
100                $node[1] = ($node[1]-$left) * $x_factor;
101        }
102       
103//      foreach($nodes as $id=>$node)
104//      {
105//              echo "$id: {$node[0]},{$node[1]}\n";
106//      }
107//      print_r($nodes);
108       
109//      echo "x-f: $x_factor; y-f: $y_factor; bbox: $bbox\n\n";
110       
111       
112        /// Prepare GD stuff for the image
113       
114        $im = imagecreate ( $width , $height );
115       
116        if (isset($_REQUEST['BGCOLOR']))
117        {
118                sscanf ($_REQUEST['BGCOLOR'],"0x%02X%02X%02X",$red,$green,$blue);
119                $backgroundcolor = imagecolorallocate ( $im , $red,$green,$blue );
120        }
121        else
122        {
123                $backgroundcolor = imagecolorallocate ( $im , 0 , 0 , 0 );      // Black
124        }
125       
126        if ($_REQUEST['TRANSPARENT'])
127                imagecolortransparent( $im , $backgroundcolor );
128       
129        $nodecolor = imagecolorallocate ( $im , 255 , 0 , 0 );  // Red
130        $waycolor  = imagecolorallocate ( $im , 0 , 0 , 255 );  // Blue
131       
132       
133        foreach($ways as $way)
134        {
135                $first = true;
136                foreach($way['nodes'] as $node_ref)
137                {
138                        list ($y,$x) = $nodes[$node_ref];
139                        if ($first)
140                                $first = false;
141                        else
142                                imageline( $im , $oldx , $oldy , $x , $y , $waycolor );
143                        $oldx = $x; $oldy = $y;
144                }
145        }
146       
147        foreach($nodes as $node)
148        {
149                list ($y,$x,$ts) = $node;
150//              if (!empty($ts))
151                        imagerectangle( $im , $x-1 , $y-1 , $x+1 , $y+1 , $nodecolor );
152//              else
153//              {
154//                      imagerectangle( $im , $x-1 , $y-1 , $x+1 , $y+1 , $nodecolor );
155//                      imagerectangle( $im , $x-3 , $y-3 , $x+3 , $y+3 , $nodecolor );
156//              }
157        }
158       
159       
160        // imagepng($im,'output.png');
161        if ($_REQUEST['FORMAT'] == 'image/png')
162        {
163                header('Content-type: image/png');
164                imagepng($im);
165        }
166        if ($_REQUEST['FORMAT'] == 'image/jpeg')
167        {
168                header('Content-type: image/jpeg');
169                imagejpeg($im);
170        }
171        if ($_REQUEST['FORMAT'] == 'image/gif')
172        {
173                header('Content-type: image/gif');
174                imagegif($im);
175        }
176       
177}
178
179}
Note: See TracBrowser for help on using the repository browser.