Exemple #1
0
    def test_filter_max_features(self):
        myfilters = [{
            'attribute': 'POP_MAX',
            'operator': '>=',
            'value': '100'
        }]
        result = webgisfilter(
            self.url, 'Places',
            maxfeatures=50, filters=myfilters
        )
        self.assertEqual(len(result['features']), 50,
            "161 places found with population bigger then 100")

        last_feature = result['features'][-1]

        result = webgisfilter(
            self.url, 'Places',
            maxfeatures=50, startindex=49, filters=myfilters
        )

        self.assertEqual(len(result['features']), 50,
            "161 places found with population bigger then 100")

        first_feature = result['features'][0]

        self.assertEqual(first_feature['id'], last_feature['id'])
Exemple #2
0
    def test_filter_prague(self):

        prague_filter = [
        {
            'attribute': 'NAME',
            'operator': '~',
            'value': 'Prague'
        }
        ]

        result = webgisfilter(self.url, 'Places', filters=prague_filter)

        self.assertEqual(len(result['features']), 1, "Prague found")
Exemple #3
0
def filterdata(request):
    """Handle filter requrest - using OGC WFS service

    The request body should look like:

    {
        'layer': 'Places',
        'maxfeatures': 1000,
        'startindex': 0,
        'bbox': [0, 1, 2, 3],
        'filters': [{
            'attribute': 'NAME',
            'value': 'Prague',
            'operator': '='
        }]
    }

    sent as HTTP POST request
    """
    # TODO: use check_project_access
    if request.method == 'POST':
        project = request.GET['PROJECT']
        project = get_last_project_version(project) + '.qgs'
        url = settings.GISQUICK_MAPSERVER_URL
        params = {'MAP': abs_project_path(project)}
        mapserv = '{}?{}'.format(url, urllib.parse.urlencode(params))
        filter_request = json.loads(request.body.decode('utf-8'))

        layer_name = filter_request['layer']
        maxfeatures = startindex = bbox = filters = None

        if 'maxfeatures' in filter_request:
            maxfeatures = filter_request['maxfeatures']
        if 'startindex' in filter_request:
            startindex = filter_request['startindex']
        if 'bbox' in filter_request:
            bbox = filter_request['bbox']
        if 'filters' in filter_request:
            filters = filter_request['filters']

        result = webgisfilter(mapserv,
                              layer_name,
                              maxfeatures=maxfeatures,
                              startindex=startindex,
                              bbox=bbox,
                              filters=filters)

        return HttpResponse(json.dumps(result),
                            content_type="application/json")
    else:
        raise Exception('No inputs specified, use POST method')
Exemple #4
0
    def test_filter_equal(self):

        myfilters = [
        {
            'attribute': 'NAME',
            'operator': '=',
            'value': 'Prague'
        }
        ]
        fes = get_filter_fes(myfilters)

        self.assertTrue(isinstance(fes, PropertyIsEqualTo), "PropertyIsEqualTo")

        result = webgisfilter(self.url, 'Places', filters=myfilters)
        self.assertEqual(len(result['features']), 1, "Prague found")
Exemple #5
0
 def _test_bbox(self):
     bbox = [15, 50, 16, 51]
     result = webgisfilter(self.url, 'Places', bbox=bbox)
     self.assertEqual(len(result['features']), 3, '3 features returned bbox')
Exemple #6
0
 def _test_paging(self):
     result = webgisfilter(self.url, 'Places', 30, 30)
     self.assertEqual(len(result['features']), 30, '30 features returned')
Exemple #7
0
    def test_basic(self):

        result = webgisfilter(self.url, 'Places')
        self.assertTrue(result, 'WFS Response')
        self.assertEqual(len(result['features']), 161, '161 places found')
        self.assertFalse('geometry' in result['features'][0], 'Geometry cleared')