| 82 | | return urllib.urlopen(reader.capabilities_url(self.url)) |
|---|
| 83 | | |
|---|
| 84 | | |
|---|
| | 86 | return urlopen(reader.capabilities_url(self.url)) |
|---|
| | 87 | |
|---|
| | 88 | def getmap(self, layers=None, styles=None, srs=None, bbox=None, |
|---|
| | 89 | format=None, size=None, transparent=False, bgcolor='#FFFFFF', |
|---|
| | 90 | exceptions='application/vnd.ogc.se_xml', |
|---|
| | 91 | method='Get'): |
|---|
| | 92 | """Request and return an image from the WMS.""" |
|---|
| | 93 | md = self.capabilities |
|---|
| | 94 | base_url = md.getOperationByName('GetMap').methods[method]['url'] |
|---|
| | 95 | request = {'version': self.version, 'request': 'GetMap'} |
|---|
| | 96 | |
|---|
| | 97 | # check layers and styles |
|---|
| | 98 | assert len(layers) > 0 |
|---|
| | 99 | request['layers'] = ','.join(layers) |
|---|
| | 100 | if styles: |
|---|
| | 101 | assert len(styles) == len(layers) |
|---|
| | 102 | request['styles'] = ','.join(styles) |
|---|
| | 103 | else: |
|---|
| | 104 | request['styles'] = '' |
|---|
| | 105 | |
|---|
| | 106 | # size |
|---|
| | 107 | request['width'] = str(size[0]) |
|---|
| | 108 | request['height'] = str(size[1]) |
|---|
| | 109 | |
|---|
| | 110 | request['srs'] = str(srs) |
|---|
| | 111 | request['bbox'] = ','.join([str(x) for x in bbox]) |
|---|
| | 112 | request['format'] = str(format) |
|---|
| | 113 | request['transparent'] = str(transparent).upper() |
|---|
| | 114 | request['bgcolor'] = '0x' + bgcolor[1:7] |
|---|
| | 115 | request['exceptions'] = str(exceptions) |
|---|
| | 116 | |
|---|
| | 117 | data = urlencode(request) |
|---|
| | 118 | if method == 'Post': |
|---|
| | 119 | u = urlopen(base_url, data=data) |
|---|
| | 120 | else: |
|---|
| | 121 | u = urlopen(base_url + data) |
|---|
| | 122 | |
|---|
| | 123 | # check for service exceptions, and return |
|---|
| | 124 | if u.info().gettype() == 'application/vnd.ogc.se_xml': |
|---|
| | 125 | se_xml = u.read() |
|---|
| | 126 | se_tree = etree.fromstring(se_xml) |
|---|
| | 127 | raise ServiceException, \ |
|---|
| | 128 | str(se_tree.find('ServiceException').text).strip() |
|---|
| | 129 | return u |
|---|
| | 130 | |
|---|
| | 131 | |
|---|