def gettile(self, base_url=None, layer=None, style=None, format=None, tilematrixset=None, tilematrix=None, row=None, column=None): """Request a tile from a WMTS server """ data = self.buildTileRequest(layer, style, format, tilematrixset, tilematrix, row, column) if base_url is None: base_url = self.url try: get_verbs = filter(lambda x: x.get('type').lower() == 'get', self.getOperationByName('GetTile').methods) if len(get_verbs) > 1: # Filter by constraints base_url = next(x for x in filter(list, ([pv.get('url') for const in pv.get('constraints') if 'kvp' in map(lambda x: x.lower(), const.values)] for pv in get_verbs if pv.get('constraints'))))[0] elif len(get_verbs) == 1: base_url = get_verbs[0].get('url') except StopIteration: pass u = openURL(base_url, data, username = self.username, password = self.password) # check for service exceptions, and return if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = unicode(se_tree.find('ServiceException').text).strip() raise ServiceException(err_message, se_xml) return u
def read(self, url): u = openURL(url, '', method='Get', username=self.username, password=self.password) self._parse(etree.fromstring(u.read()))
def readString(self, st): """Parse a WMTS capabilities document, returning an elementtree instance string should be an XML capabilities document """ if not isinstance(st, str): raise ValueError("String must be of type string, not %s" % type(st)) return etree.fromstring(st)
def read(self, service_url): """Get and parse a SOS capabilities document, returning an elementtree instance service_url is the base url, to which is appended the service, version, and request parameters """ request = self.capabilities_url(service_url) u = self._open(request) return etree.fromstring(u.read())
def read(self, service_url): """Get and parse a TMS capabilities document, returning an elementtree instance """ u = openURL(service_url, '', method='Get', username=self.username, password=self.password) return etree.fromstring(u.read())
def read(self, url): """Get and parse a WFS capabilities document, returning an instance of WFSCapabilitiesInfoset Parameters ---------- url : string The URL to the WFS capabilities document. """ request = self.capabilities_url(url) u = urlopen(request) return etree.fromstring(u.read())
def read(self, service_url): """Get and parse a WMTS capabilities document, returning an elementtree instance service_url is the base url, to which is appended the service, version, and request parameters """ getcaprequest = self.capabilities_url(service_url) #now split it up again to use the generic openURL function... spliturl=getcaprequest.split('?') u = openURL(spliturl[0], spliturl[1], method='Get', username = self.username, password = self.password) return etree.fromstring(u.read())
def getcapabilities(self): """Request and return capabilities document from the WMS as a file-like object. NOTE: this is effectively redundant now""" reader = WMSCapabilitiesReader(self.version, url=self.url, un=self.username, pw=self.password) u = self._open(reader.capabilities_url(self.url)) # check for service exceptions, and return if u.info().gettype() == "application/vnd.ogc.se_xml": se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = str(se_tree.find("ServiceException").text).strip() raise ServiceException(err_message, se_xml) return u
def downloadMeta(self): """ Download BAG source file metadata from PDOK Atom feed URL. """ # Fetch and parse XML Atom file rsp = requests.get(self.atom_url) xml_str = rsp.content node = etree.fromstring(xml_str) node = stripNS(node) # Extract metadata self.extract_datum = node.xpath("//feed/entry/updated/text()")[0].split("T")[0] self.extract_fsize = long(node.xpath("//feed/entry/link/@length")[0]) self.extract_url = node.xpath("//feed/entry/link/@href")[0]
def downloadMeta(self): """ Download BAG source file metadata from PDOK Atom feed URL. """ # Fetch and parse XML Atom file rsp = requests.get(self.atom_url) xml_str = rsp.content node = etree.fromstring(xml_str) node = stripNS(node) # Extract metadata self.extract_datum = node.xpath("//feed/entry/updated/text()")[0].split('T')[0] self.extract_fsize = long(node.xpath("//feed/entry/link/@length")[0]) self.extract_url = node.xpath("//feed/entry/link/@href")[0]
def getcapabilities(self): """Request and return capabilities document from the WMS as a file-like object. NOTE: this is effectively redundant now""" reader = WMSCapabilitiesReader( self.version, url=self.url, un=self.username, pw=self.password ) u = self._open(reader.capabilities_url(self.url)) # check for service exceptions, and return if u.info().gettype() == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = str(se_tree.find('ServiceException').text).strip() raise ServiceException(err_message, se_xml) return u
def gettile(self, base_url=None, layer=None, style=None, format=None, tilematrixset=None, tilematrix=None, row=None, column=None): """Request a tile from a WMTS server """ data = self.buildTileRequest(layer, style, format, tilematrixset, tilematrix, row, column) if base_url is None: base_url = self.getOperationByName('GetTile').methods['Get']['url'] u = openURL(base_url, data, username = self.username, password = self.password) # check for service exceptions, and return if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = unicode(se_tree.find('ServiceException').text).strip() raise ServiceException(err_message, se_xml) return u
def getcapabilities(self): """Request and return capabilities document from the SOS as a file-like object. NOTE: this is effectively redundant now""" reader = SOSCapabilitiesReader( self.version, url=self.url, un=self.username, pw=self.password, to=self.timeout) u = self._open(reader.capabilities_url(self.url), timeout=self.timeout) # check for service exceptions, and return if u.info().gettype() == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) raise ServiceException( str(se_tree.find('ExceptionReport').text).strip()) return u
def readString(self, st): if not isinstance(st, str): raise ValueError("String must be of type string, not %s" % type(st)) self._parse(etree.fromstring(st))
def read(self, service_url): """Get and parse a TMS capabilities document, returning an elementtree instance """ u = openURL(service_url, '', method='Get', username = self.username, password = self.password) return etree.fromstring(u.read())
def gettile(self, base_url=None, layer=None, style=None, format=None, tilematrixset=None, tilematrix=None, row=None, column=None, **kwargs): """Return a tile from the WMTS. Returns the tile image as a file-like object. Parameters ---------- base_url : string Optional URL for request submission. Defaults to the URL of the GetTile operation as declared in the GetCapabilities response. layer : string Content layer name. style : string Optional style name. Defaults to the first style defined for the relevant layer in the GetCapabilities response. format : string Optional output image format, such as 'image/jpeg'. Defaults to the first format defined for the relevant layer in the GetCapabilities response. tilematrixset : string Optional name of tile matrix set to use. Defaults to the first tile matrix set defined for the relevant layer in the GetCapabilities response. tilematrix : string Name of the tile matrix to use. row : integer Row index of tile to request. column : integer Column index of tile to request. **kwargs : extra arguments anything else e.g. vendor specific parameters Example ------- >>> url = 'http://map1c.vis.earthdata.nasa.gov/wmts-geo/wmts.cgi' >>> wmts = WebMapTileService(url) >>> img = wmts.gettile(layer='VIIRS_CityLights_2012',\ tilematrixset='EPSG4326_500m',\ tilematrix='6',\ row=4, column=4) >>> out = open('tile.jpg', 'wb') >>> out.write(img.read()) >>> out.close() """ vendor_kwargs = self.vendor_kwargs or {} vendor_kwargs.update(kwargs) data = self.buildTileRequest(layer, style, format, tilematrixset, tilematrix, row, column, **vendor_kwargs) if base_url is None: base_url = self.url try: get_verbs = filter(lambda x: x.get('type').lower() == 'get', self.getOperationByName('GetTile').methods) if len(get_verbs) > 1: # Filter by constraints base_url = next(x for x in filter(list, ([ pv.get('url') for const in pv.get('constraints') if 'kvp' in map(lambda x: x.lower(), const.values) ] for pv in get_verbs if pv.get('constraints'))))[0] elif len(get_verbs) == 1: base_url = get_verbs[0].get('url') except StopIteration: pass u = openURL(base_url, data, username=self.username, password=self.password) # check for service exceptions, and return if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = unicode(se_tree.find('ServiceException').text) raise ServiceException(err_message.strip(), se_xml) return u
def gettile(self, base_url=None, layer=None, style=None, format=None, tilematrixset=None, tilematrix=None, row=None, column=None, **kwargs): """Return a tile from the WMTS. Returns the tile image as a file-like object. Parameters ---------- base_url : string Optional URL for request submission. Defaults to the URL of the GetTile operation as declared in the GetCapabilities response. layer : string Content layer name. style : string Optional style name. Defaults to the first style defined for the relevant layer in the GetCapabilities response. format : string Optional output image format, such as 'image/jpeg'. Defaults to the first format defined for the relevant layer in the GetCapabilities response. tilematrixset : string Optional name of tile matrix set to use. Defaults to the first tile matrix set defined for the relevant layer in the GetCapabilities response. tilematrix : string Name of the tile matrix to use. row : integer Row index of tile to request. column : integer Column index of tile to request. **kwargs : extra arguments anything else e.g. vendor specific parameters Example ------- >>> url = 'http://map1c.vis.earthdata.nasa.gov/wmts-geo/wmts.cgi' >>> wmts = WebMapTileService(url) >>> img = wmts.gettile(layer='VIIRS_CityLights_2012',\ tilematrixset='EPSG4326_500m',\ tilematrix='6',\ row=4, column=4) >>> out = open('tile.jpg', 'wb') >>> out.write(img.read()) >>> out.close() """ data = self.buildTileRequest(layer, style, format, tilematrixset, tilematrix, row, column, **kwargs) if base_url is None: base_url = self.url try: get_verbs = filter(lambda x: x.get('type').lower() == 'get', self.getOperationByName('GetTile').methods) if len(get_verbs) > 1: # Filter by constraints base_url = next(x for x in filter(list, ([pv.get('url') for const in pv.get('constraints') if 'kvp' in map(lambda x: x.lower(), const.values)] for pv in get_verbs if pv.get('constraints'))))[0] elif len(get_verbs) == 1: base_url = get_verbs[0].get('url') except StopIteration: pass u = openURL(base_url, data, username=self.username, password=self.password) # check for service exceptions, and return if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = unicode(se_tree.find('ServiceException').text) raise ServiceException(err_message.strip(), se_xml) return u
def getmap( self, layers=None, styles=None, srs=None, bbox=None, format=None, size=None, time=None, transparent=False, bgcolor="#FFFFFF", exceptions="application/vnd.ogc.se_xml", method="Get", **kwargs ): """Request and return an image from the WMS as a file-like object. Parameters ---------- layers : list List of content layer names. styles : list Optional list of named styles, must be the same length as the layers list. srs : string A spatial reference system identifier. bbox : tuple (left, bottom, right, top) in srs units. format : string Output image format such as 'image/jpeg'. size : tuple (width, height) in pixels. transparent : bool Optional. Transparent background if True. bgcolor : string Optional. Image background color. method : string Optional. HTTP DCP method name: Get or Post. **kwargs : extra arguments anything else e.g. vendor specific parameters Example ------- >>> img = wms.getmap(layers=['global_mosaic'], ... styles=['visual'], ... srs='EPSG:4326', ... bbox=(-112,36,-106,41), ... format='image/jpeg', ... size=(300,250), ... transparent=True, ... ) >>> out = open('example.jpg', 'wb') >>> out.write(img.read()) >>> out.close() """ base_url = self.getOperationByName("GetMap").methods[method]["url"] request = {"version": self.version, "request": "GetMap"} # check layers and styles assert len(layers) > 0 request["layers"] = ",".join(layers) if styles: assert len(styles) == len(layers) request["styles"] = ",".join(styles) else: request["styles"] = "" # size request["width"] = str(size[0]) request["height"] = str(size[1]) request["srs"] = str(srs) request["bbox"] = ",".join([repr(x) for x in bbox]) request["format"] = str(format) request["transparent"] = str(transparent).upper() request["bgcolor"] = "0x" + bgcolor[1:7] request["exceptions"] = str(exceptions) if time is not None: request["time"] = str(time) if kwargs: for kw in kwargs: request[kw] = kwargs[kw] data = urlencode(request) u = openURL(base_url, data, method, username=self.username, password=self.password) # check for service exceptions, and return if u.info()["Content-Type"] == "application/vnd.ogc.se_xml": se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = unicode(se_tree.find("ServiceException").text).strip() raise ServiceException(err_message, se_xml) return u
def getmap(self, layers=None, styles=None, srs=None, bbox=None, format=None, size=None, time=None, transparent=False, bgcolor='#FFFFFF', exceptions='application/vnd.ogc.se_xml', method='Get' ): """Request and return an image from the SOS as a file-like object. Parameters ---------- layers : list List of content layer names. styles : list Optional list of named styles, must be the same length as the layers list. srs : string A spatial reference system identifier. bbox : tuple (left, bottom, right, top) in srs units. format : string Output image format such as 'image/jpeg'. size : tuple (width, height) in pixels. transparent : bool Optional. Transparent background if True. bgcolor : string Optional. Image background color. method : string Optional. HTTP DCP method name: Get or Post. Example ------- >>> img = wms.getmap(layers=['global_mosaic'], ... styles=['visual'], ... srs='EPSG:4326', ... bbox=(-112,36,-106,41), ... format='image/jpeg', ... size=(300,250), ... transparent=True, ... ) >>> out = open('example.jpg', 'wb') >>> out.write(img.read()) >>> out.close() """ base_url = self.getOperationByName('GetMap').methods[method]['url'] request = {'version': self.version, 'request': 'GetMap'} # check layers and styles assert len(layers) > 0 request['layers'] = ','.join(layers) if styles: assert len(styles) == len(layers) request['styles'] = ','.join(styles) else: request['styles'] = '' # size request['width'] = str(size[0]) request['height'] = str(size[1]) request['srs'] = str(srs) request['bbox'] = ','.join([str(x) for x in bbox]) request['format'] = str(format) request['transparent'] = str(transparent).upper() request['bgcolor'] = '0x' + bgcolor[1:7] request['exceptions'] = str(exceptions) if time is not None: request['time'] = str(time) data = urlencode(request) if method == 'Post': u = self._open(base_url, data=data) else: u = self._open(base_url + data) # check for service exceptions, and return if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) raise ServiceException, \ str(se_tree.find('ExceptionReport').text).strip() return u
def read(self, url): u = openURL(url, '', method='Get', username = self.username, password = self.password) self._parse(etree.fromstring(u.read()))
def getmap(self, layers=None, styles=None, srs=None, bbox=None, format=None, size=None, time=None, transparent=False, bgcolor='#FFFFFF', exceptions='application/vnd.ogc.se_xml', method='Get', **kwargs ): """Request and return an image from the WMS as a file-like object. Parameters ---------- layers : list List of content layer names. styles : list Optional list of named styles, must be the same length as the layers list. srs : string A spatial reference system identifier. bbox : tuple (left, bottom, right, top) in srs units. format : string Output image format such as 'image/jpeg'. size : tuple (width, height) in pixels. transparent : bool Optional. Transparent background if True. bgcolor : string Optional. Image background color. method : string Optional. HTTP DCP method name: Get or Post. **kwargs : extra arguments anything else e.g. vendor specific parameters Example ------- >>> from owslib.wms import WebMapService >>> from tests.utils import scratch_file >>> wms = WebMapService('http://giswebservices.massgis.state.ma.us/geoserver/wms', version='1.1.1') >>> img = wms.getmap(layers=['massgis:GISDATA.SHORELINES_ARC'],styles=[''], srs='EPSG:4326',bbox=(-70.8, 42, -70, 42.8),size=(300, 300),format='image/jpeg',transparent=True) >>> out = open(scratch_file('massgis_shoreline.jpg'), 'wb') >>> out.write(img.read()) >>> out.close() """ base_url = self.get_operation_by_name('GetMap').methods[method]['url'] request = {'version': self.version, 'request': 'GetMap'} # check layers and styles assert len(layers) > 0 request['layers'] = ','.join(layers) if styles: assert len(styles) == len(layers) request['styles'] = ','.join(styles) else: request['styles'] = '' # size request['width'] = str(size[0]) request['height'] = str(size[1]) request['srs'] = str(srs) request['bbox'] = ','.join([repr(x) for x in bbox]) request['format'] = str(format) request['transparent'] = str(transparent).upper() request['bgcolor'] = '0x' + bgcolor[1:7] request['exceptions'] = str(exceptions) if time is not None: request['time'] = str(time) if kwargs: for kw in kwargs: request[kw]=kwargs[kw] data = urlencode(request) u = openURL(base_url, data, method, username = self.username, password = self.password) # check for service exceptions, and return if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = unicode(se_tree.find('ServiceException').text).strip() raise ServiceException(err_message, se_xml) return u
def getmap(self, layers=None, styles=None, srs=None, bbox=None, format=None, size=None, time=None, transparent=False, bgcolor='#FFFFFF', exceptions='application/vnd.ogc.se_xml', method='Get', **kwargs): """Request and return an image from the WMS as a file-like object. Parameters ---------- layers : list List of content layer names. styles : list Optional list of named styles, must be the same length as the layers list. srs : string A spatial reference system identifier. bbox : tuple (left, bottom, right, top) in srs units. format : string Output image format such as 'image/jpeg'. size : tuple (width, height) in pixels. transparent : bool Optional. Transparent background if True. bgcolor : string Optional. Image background color. method : string Optional. HTTP DCP method name: Get or Post. **kwargs : extra arguments anything else e.g. vendor specific parameters Example ------- >>> img = wms.getmap(layers=['global_mosaic'], ... styles=['visual'], ... srs='EPSG:4326', ... bbox=(-112,36,-106,41), ... format='image/jpeg', ... size=(300,250), ... transparent=True, ... ) >>> out = open('example.jpg', 'wb') >>> out.write(img.read()) >>> out.close() """ base_url = self.getOperationByName('GetMap').methods[method]['url'] request = {'version': self.version, 'request': 'GetMap'} # check layers and styles assert len(layers) > 0 request['layers'] = ','.join(layers) if styles: assert len(styles) == len(layers) request['styles'] = ','.join(styles) else: request['styles'] = '' # size request['width'] = str(size[0]) request['height'] = str(size[1]) request['srs'] = str(srs) request['bbox'] = ','.join([repr(x) for x in bbox]) request['format'] = str(format) request['transparent'] = str(transparent).upper() request['bgcolor'] = '0x' + bgcolor[1:7] request['exceptions'] = str(exceptions) if time is not None: request['time'] = str(time) if kwargs: for kw in kwargs: request[kw] = kwargs[kw] data = urlencode(request) u = openURL(base_url, data, method, username=self.username, password=self.password) # check for service exceptions, and return if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml': se_xml = u.read() se_tree = etree.fromstring(se_xml) err_message = unicode( se_tree.find('ServiceException').text).strip() raise ServiceException(err_message, se_xml) return u
def getfeature(self, typename=None, filter=None, bbox=None, featureid=None, featureversion=None, propertyname=['*'], maxfeatures=None, method='{http://www.opengis.net/wfs}Get'): """Request and return feature data as a file-like object. Parameters ---------- typename : list List of typenames (string) filter : string XML-encoded OGC filter expression. bbox : tuple (left, bottom, right, top) in the feature type's coordinates. featureid : list List of unique feature ids (string) featureversion : string Default is most recent feature version. propertyname : list List of feature property names. '*' matches all. maxfeatures : int Maximum number of features to be returned. method : string Qualified name of the HTTP DCP method to use. There are 3 different modes of use 1) typename and bbox (simple spatial query) 2) typename and filter (more expressive) 3) featureid (direct access to known features) """ base_url = self.getOperationByName('{http://www.opengis.net/wfs}GetFeature').methods[method]['url'] request = {'service': 'WFS', 'version': self.version, 'request': 'GetFeature'} # check featureid if featureid: request['featureid'] = ','.join(featureid) elif bbox and typename: request['bbox'] = ','.join([str(x) for x in bbox]) elif filter and typename: request['filter'] = str(filter) assert len(typename) > 0 request['typename'] = ','.join(typename) request['propertyname'] = ','.join(propertyname) if featureversion: request['featureversion'] = str(featureversion) if maxfeatures: request['maxfeatures'] = str(maxfeatures) data = urlencode(request) if method == 'Post': u = urlopen(base_url, data=data) else: u = urlopen(base_url + data) # check for service exceptions, rewrap, and return # We're going to assume that anything with a content-length > 32k # is data. We'll check anything smaller. try: length = int(u.info()['Content-Length']) have_read = False except KeyError: data = u.read() have_read = True length = len(data) if length < 32000: if not have_read: data = u.read() tree = etree.fromstring(data) if tree.tag == "{%s}ServiceExceptionReport" % OGC_NAMESPACE: se = tree.find(nspath('ServiceException', OGC_NAMESPACE)) raise ServiceException, str(se.text).strip() return StringIO(data) else: if have_read: return StringIO(data) return u