Example #1
0
    def GetFeatureInfo(self, r, kwargs):
        parms = GetFeatureInfoMixin.Parameters.create(kwargs).cleaned_data

        y = parms['i']
        x = parms['j']

        bbox = parms['bbox']
        width = parms['width'] * 1.0
        height = parms['height'] * 1.0

        wherex = bbox[0] + x / width * (bbox[2] - bbox[0])
        wherey = bbox[1] + (height - y) / height * (bbox[3] - bbox[1])
        if 'filter' in kwargs and kwargs['filter']:
            parms['filter'] = json.loads(kwargs['filter'])
        else:
            parms['filter'] = common.get_filter_params(kwargs)

        for k, v in kwargs.items():
            if k not in parms:
                parms[k.lower()] = v
        info = self.adapter.get_feature_info(wherex, wherey, **parms)

        if parms['callback']:
            return HttpResponse("{callback}({json})".format(
                callback=parms['callback'], json=json.dumps(info)))
        elif parms['format'] == 'application/json' or r.META[
                'HTTP_ACCEPT_LANGUAGE'] == 'application/json':
            return HttpResponse(json.dumps(info),
                                content_type='application/json')
        else:
            elt = etree.Element('FeatureInfoResponse')
            for i, layer in enumerate(info.keys()):
                for feature in info[layer]:
                    fields = etree.SubElement(elt, "FIELDS")
                    for k, v in feature.items():
                        try:
                            fields.set(k, unicode(v))
                        except:
                            fields.set(k, '')

            return HttpResponse(etree.tostring(elt, xml_declaration=True),
                                content_type='application/vnd.ogc.wms_xml')
Example #2
0
    def GetFeatureInfo(self, r, kwargs):
        print json.dumps({k : str(v) for k, v in r.META.items()}, indent=4)
        parms = GetFeatureInfoMixin.Parameters.create(kwargs).cleaned_data

        y = parms['i']
        x = parms['j']

        bbox = parms['bbox']
        width = parms['width']*1.0
        height = parms['height']*1.0

        wherex = bbox[0] + x/width*(bbox[2]-bbox[0])
        wherey = bbox[1] + (height-y)/height*(bbox[3]-bbox[1])
        if 'filter' in kwargs and kwargs['filter']:
            parms['filter'] = json.loads(kwargs['filter'])
        else:
            parms['filter'] = common.get_filter_params(kwargs)

        for k,v in kwargs.items():
            if k not in parms:
                parms[k.lower()] = v
        info = self.adapter.get_feature_info(wherex, wherey, **parms)

        if parms['callback']:
            return HttpResponse("{callback}({json})".format(callback=parms['callback'], json=json.dumps(info)))
        elif parms['format'] == 'application/json' or r.META['HTTP_ACCEPT_LANGUAGE'] == 'application/json':
            return HttpResponse(json.dumps(info), mimetype='application/json')
        else:
            elt = etree.Element('FeatureInfoResponse')
            for i, layer in enumerate(info.keys()):
                for feature in info[layer]:
                    fields = etree.SubElement(elt, "FIELDS")
                    for k, v in feature.items():
                        try:
                            fields.set(k, unicode(v))
                        except:
                            fields.set(k, '')
            
            return HttpResponse(etree.tostring(elt, xml_declaration=True), mimetype='application/vnd.ogc.wms_xml')
Example #3
0
    def GetFeatureInfo(self, r, kwargs):
        parms = GetFeatureInfoMixin.Parameters.create(kwargs).cleaned_data

        x = parms.cleaned_data['i']
        y = parms.cleaned_data['j']
        bbox = parms.cleaned_data['bbox']
        width = parms.cleaned_data['width']*1.0
        height = parms.cleaned_data['height']*1.0

        wherex = bbox[0] + x/width*(bbox[2]-bbox[0])
        wherey = bbox[1] + y/height*(bbox[3]-bbox[1])
        if 'filter' in kwargs:
            parms.cleaned_data['filter'] = json.loads(kwargs['filter'])
        else:
            parms.cleaned_data['filter'] = common.get_filter_params(kwargs)

        info = self.adapter.get_feature_info(wherex, wherey, **parms.cleaned_data)

        if parms.cleaned_data['callback']:
            return HttpResponse("{callback}({json})".format(callback=parms.cleaned_data['callback'], json=json.dumps(info)))
        elif parms.cleaned_data['format'] == 'application/json':
            return HttpResponse(json.dumps(info), mimetype='application/json')
        else:
            raise common.OWSException.at('GetFeatureInfo', "Feature info format not supported")
Example #4
0
    def GetFeatureInfo(self, r, kwargs):
        parms = GetFeatureInfoMixin.Parameters.create(kwargs).cleaned_data

        x = parms.cleaned_data['i']
        y = parms.cleaned_data['j']
        bbox = parms.cleaned_data['bbox']
        width = parms.cleaned_data['width']*1.0
        height = parms.cleaned_data['height']*1.0

        wherex = bbox[0] + x/width*(bbox[2]-bbox[0])
        wherey = bbox[1] + y/height*(bbox[3]-bbox[1])
        if 'filter' in kwargs:
            parms.cleaned_data['filter'] = json.loads(kwargs['filter'])
        else:
            parms.cleaned_data['filter'] = common.get_filter_params(kwargs)

        info = self.adapter.get_feature_info(wherex, wherey, **parms.cleaned_data)

        if parms.cleaned_data['callback']:
            return HttpResponse("{callback}({json})".format(callback=parms.cleaned_data['callback'], json=json.dumps(info)))
        elif parms.cleaned_data['format'] == 'application/json':
            return HttpResponse(json.dumps(info), mimetype='application/json')
        else:
            raise common.OWSException.at('GetFeatureInfo', "Feature info format not supported")