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'])
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")
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')
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")
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')
def _test_paging(self): result = webgisfilter(self.url, 'Places', 30, 30) self.assertEqual(len(result['features']), 30, '30 features returned')
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')