source: subversion/applications/rendering/parking/osray/osray_server.py @ 22233

Last change on this file since 22233 was 22189, checked in by kdrangmeister, 9 years ago

Added WMS Support

  • Property svn:mime-type set to text/plain
File size: 9.3 KB
Line 
1# -*- coding: utf-8 -*-
2
3import string, cgi, time
4from os import curdir, sep
5from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
6import urlparse
7import osray
8from osray_geom import *
9import math
10
11options = {'height': 100, 'dsn': 'dbname=gis', 'width': 100, 'prefix': 'planet_osm', 'quick': False, 'hq': False}
12#options['bbox']='9.94861 49.79293,9.96912 49.80629' # Europastern
13#options['bbox']='9.92498 49.78816,9.93955 49.8002' # Innenstadt
14options['bbox']='9.9630547 49.8471708,9.968461999999999 49.8504638' #Technopark
15#options['bbox']='12.13344 54.08574,12.14387 54.09182' # Rostock
16#options['bbox']='12.03344 53.98574,12.24387 54.19182' # Rostock-xx
17#options['bbox']='2.822157 41.983275,2.827371 41.987123' # Girona River
18#options['bbox']='8.9771580802 47.2703623267,13.8350427083 50.5644529365' # bayern
19#options['bbox']='-43.1806 -22.91442,-43.17034 -22.90488' # Rio
20# for tile names and coordinates:
21# http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
22
23class osrayHandler(BaseHTTPRequestHandler):
24
25    def do_GET(self):
26        try:
27            theurl = self.path
28            if theurl == "/favicon.ico":
29                self.send_response(200)
30                self.end_headers()
31                self.wfile.write("")
32                return
33            urlcomponents = urlparse.urlparse(theurl)
34            print urlcomponents
35            baseurl = urlcomponents[2]
36            print "parse=",urlparse.urlparse(theurl)
37            print "base=",baseurl
38            urlqs = urlparse.urlparse(theurl)[4]
39            print "URL qs:", urlqs
40            queryparams = urlparse.parse_qs(urlqs)
41            print queryparams
42
43            #options['bbox']=scale_bbox(options['bbox'],float(2**-1))
44
45            print "baseagain=",baseurl
46
47            if baseurl=="/wms": # example URL http://localhost/osray/povtile/16/34576/22282.png
48                print "Handling WMS Request with parameters:", queryparams
49# example queryparams {
50#ignore:
51#'LAYERS': ['land'],
52#'SERVICE': ['WMS'],
53#'FORMAT': ['image/png'],
54#'REQUEST': ['GetMap'],
55#'SRS': ['EPSG:3857'],
56#'VERSION': ['1.1.1'],
57#'EXCEPTIONS': ['application/vnd.ogc.se_xml'],
58#'TRANSPARENT': ['FALSE']}
59#use:
60#'WIDTH': ['2048'],
61#'HEIGHT': ['2048'],
62#'BBOX': ['0,0,20037508.3392,20037508.3392'],
63                options['width']=queryparams['WIDTH'][0]
64                options['height']=queryparams['HEIGHT'][0]
65                bbox_SRS3857 = queryparams['BBOX'][0]
66                print "BBOX=",bbox_SRS3857
67                bbox_SRS3857 = bbox_format_3_to_1_comma(bbox_SRS3857)
68                options['hq']=False
69                options['bbox']=bbox_SRS3857
70                options['srs']='3857'
71                print "--- calling osray"
72                osray.main(options)
73                print "--- calling osray ends"
74                f = open(curdir + sep + 'scene-osray.png')
75                print "--- send_response"
76                self.send_response(200)
77                print "--- send_header"
78                self.send_header('Content-type','image/png')
79                print "--- send_end_headers"
80                self.end_headers()
81                print "--- send_write"
82                self.wfile.write(f.read())
83                print "--- close"
84                f.close()
85                return
86
87            if baseurl.startswith("/povtile/"): # example URL http://localhost/osray/povtile/16/34576/22282.png
88                if baseurl.endswith(".png"):
89                    zxy = baseurl[9:-4].split('/')
90                    if(len(zxy)==3):
91                        print "zxy=",zxy
92                        zoom = float(zxy[0])
93                        xtile = float(zxy[1])
94                        ytile = float(zxy[2])
95                        bbox = num2bbox(xtile,ytile,zoom)
96                        print bbox
97                        options['bbox']=bbox
98                        options['width']=256
99                        options['height']=256
100                        options['hq']=True
101                        print "--- calling osray"
102                        osray.main(options)
103                        print "--- calling osray ends"
104                        f = open(curdir + sep + 'scene-osray.png')
105                        print "--- send_response"
106                        self.send_response(200)
107                        print "--- send_header"
108                        self.send_header('Content-type','image/png')
109                        print "--- send_end_headers"
110                        self.end_headers()
111                        print "--- send_write"
112                        self.wfile.write(f.read())
113                        print "--- close"
114                        f.close()
115                        return
116                        # PLEASE IMPLEMENT HERE - FIXME
117           
118            if baseurl=="/big.png":
119                if queryparams.has_key('width'):
120                    options['width']=queryparams['width'][0]
121                if queryparams.has_key('height'):
122                    options['height']=queryparams['height'][0]
123                if queryparams.has_key('hq'):
124                    options['hq']=(str(queryparams['hq'][0])=='1')
125                print "--- calling osray"
126                osray.main(options)
127                print "--- calling osray ends"
128                f = open(curdir + sep + 'scene-osray.png')
129                print "--- send_response"
130                self.send_response(200)
131                print "--- send_header"
132                self.send_header('Content-type','image/png')
133                print "--- send_end_headers"
134                self.end_headers()
135                print "--- send_write"
136                self.wfile.write(f.read())
137                print "--- close"
138                f.close()
139                return
140            print "URL was ", theurl
141            urlqs = urlparse.urlparse(theurl)[4]
142            print "URL qs:", urlqs
143            queryparams = urlparse.parse_qs(urlqs)
144            print queryparams
145            self.send_response(200)
146            self.send_header('Content-type', 'text/html')
147            self.end_headers()
148            self.wfile.write("hey, today is the" + str(time.localtime()[7]))
149            self.wfile.write(" day in the year " + str(time.localtime()[0]))
150            return
151        except IOError:
152            self.send_error(404, 'File Not Found: %s' % self.path)
153
154
155"""
156    def do_POST(self):
157        global rootnode
158        try:
159            ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
160            if ctype == 'multipart/form-data':
161                query = cgi.parse_multipart(self.rfile, pdict)
162            self.send_response(301)
163           
164            self.end_headers()
165            upfilecontent = query.get('upfile')
166            print "filecontent", upfilecontent[0]
167            self.wfile.write("<HTML>POST OK.<BR><BR>");
168            self.wfile.write(upfilecontent[0]);
169           
170        except :
171            pass
172"""
173
174def main():
175    try:
176        server = HTTPServer(('', 8087), osrayHandler)
177        print 'started osray server...'
178        server.serve_forever()
179    except KeyboardInterrupt:
180        print 'shutting down server'
181        server.socket.close()
182
183if __name__ == '__main__':
184    main()
185
186"""
187ParseResult(scheme='', netloc='', path='/wms', params='', query='BBOX=0,0,20037508.3392,20037508.3392&EXCEPTIONS=application/vnd.ogc.se_xml&FORMAT=image/png&HEIGHT=2048&LAYERS=land&REQUEST=GetMap&SERVICE=WMS&SRS=EPSG:3857&STYLES=&TRANSPARENT=FALSE&VERSION=1.1.1&WIDTH=2048', fragment='')
188parse= ParseResult(scheme='', netloc='', path='/wms', params='', query='BBOX=0,0,20037508.3392,20037508.3392&EXCEPTIONS=application/vnd.ogc.se_xml&FORMAT=image/png&HEIGHT=2048&LAYERS=land&REQUEST=GetMap&SERVICE=WMS&SRS=EPSG:3857&STYLES=&TRANSPARENT=FALSE&VERSION=1.1.1&WIDTH=2048', fragment='')
189base= /wms
190URL qs: BBOX=0,0,20037508.3392,20037508.3392&EXCEPTIONS=application/vnd.ogc.se_xml&FORMAT=image/png&HEIGHT=2048&LAYERS=land&REQUEST=GetMap&SERVICE=WMS&SRS=EPSG:3857&STYLES=&TRANSPARENT=FALSE&VERSION=1.1.1&WIDTH=2048
191{'LAYERS': ['land'], 'WIDTH': ['2048'], 'SERVICE': ['WMS'], 'FORMAT': ['image/png'], 'REQUEST': ['GetMap'], 'HEIGHT': ['2048'], 'SRS': ['EPSG:3857'], 'VERSION': ['1.1.1'], 'BBOX': ['0,0,20037508.3392,20037508.3392'], 'EXCEPTIONS': ['application/vnd.ogc.se_xml'], 'TRANSPARENT': ['FALSE']}
192baseagain= /wms
193URL was  /wms?BBOX=0,0,20037508.3392,20037508.3392&EXCEPTIONS=application/vnd.ogc.se_xml&FORMAT=image/png&HEIGHT=2048&LAYERS=land&REQUEST=GetMap&SERVICE=WMS&SRS=EPSG:3857&STYLES=&TRANSPARENT=FALSE&VERSION=1.1.1&WIDTH=2048
194URL qs: BBOX=0,0,20037508.3392,20037508.3392&EXCEPTIONS=application/vnd.ogc.se_xml&FORMAT=image/png&HEIGHT=2048&LAYERS=land&REQUEST=GetMap&SERVICE=WMS&SRS=EPSG:3857&STYLES=&TRANSPARENT=FALSE&VERSION=1.1.1&WIDTH=2048
195{'LAYERS': ['land'], 'WIDTH': ['2048'], 'SERVICE': ['WMS'], 'FORMAT': ['image/png'], 'REQUEST': ['GetMap'], 'HEIGHT': ['2048'], 'SRS': ['EPSG:3857'], 'VERSION': ['1.1.1'], 'BBOX': ['0,0,20037508.3392,20037508.3392'], 'EXCEPTIONS': ['application/vnd.ogc.se_xml'], 'TRANSPARENT': ['FALSE']}
196localhost - - [04/Jul/2010 22:04:44] "GET /wms?BBOX=0,0,20037508.3392,20037508.3392&EXCEPTIONS=application/vnd.ogc.se_xml&FORMAT=image/png&HEIGHT=2048&LAYERS=land&REQUEST=GetMap&SERVICE=WMS&SRS=EPSG:3857&STYLES=&TRANSPARENT=FALSE&VERSION=1.1.1&WIDTH=2048 HTTP/1.1" 200 -
197"""
Note: See TracBrowser for help on using the repository browser.