def _get_feature_info_for_popup(request, params, isExtended=False, isIframe=False): feature, vector_model = next(_get_features(params)) layerModel = get_bod_model(params.lang) # TODO Remove this ugly hack layer = next(get_layers_metadata_for_params( params, request.db.query(layerModel), layerModel, layerIds=[params.layerId if params.layerId != 'ch.bfs.gebaeude_wohnungs_register_preview' else 'ch.bfs.gebaeude_wohnungs_register'] )) options = {} if 'feature' in feature: options.update(feature.pop('feature')) else: options.update(feature) # Regular html popup don't return a geometry if 'properties' in options: if hasattr(options, 'extra'): options['properties'].update(options['properties'].extra) options['bbox'] = options.extra['bbox'] options['attributes'] = options.pop('properties') options.update({ 'featureId': options.get('featureId') or options.get('id'), # For grid layer 'attributes': options['attributes'], 'scale': options.get('scale'), 'attribution': layer.get('attributes')['dataOwner'], 'fullName': layer.get('fullName'), 'vector_model': vector_model, 'isExtended': isExtended, 'isIframe': isIframe }) return options
def _identify(request): params = _get_features_params(request) if params.layers == 'all': model = get_bod_model(params.lang) query = params.request.db.query(model) layerIds = [] for layer in get_layers_metadata_for_params(params, query, model): layerIds.append(layer['layerBodId']) else: layerIds = params.layers models = [ models_from_name(layerId) for layerId in layerIds if models_from_name(layerId) is not None ] if models is None: raise exc.HTTPBadRequest('No GeoTable was found for %s' % ' '.join(layerIds)) maxFeatures = 50 features = [] for feature in _get_features_for_extent(params, models, maxFeatures=maxFeatures): f = _process_feature(feature, params) features.append(f) if len(features) > maxFeatures: break return {'results': features}
def _identify(request): params = IdentifyServiceValidation(request) response = {'results': []} # Determine layer types # Grid layers are serverless layersDB = [] layersGrid = [] isScaleDependent = has_buffer(params.imageDisplay, params.mapExtent, params.tolerance) scale = get_scale(params.imageDisplay, params.mapExtent) if isScaleDependent else None if params.layers == 'all': model = get_bod_model(params.lang) query = params.request.db.query(model) for layer in get_layers_metadata_for_params(params, query, model): layerBodId = layer['layerBodId'] models = models_from_bodid(layerBodId, scale=scale, srid=params.srid) if models: layersDB.append({layerBodId: models}) else: gridSpec = get_grid_spec(layerBodId) if gridSpec and params.geometryType == 'esriGeometryPoint': layersGrid.append({layerBodId: gridSpec}) else: for layerBodId in params.layers: gridSpec = get_grid_spec(layerBodId) if gridSpec: if params.geometryType not in ('esriGeometryPoint', 'esriGeometryEnvelope'): raise exc.HTTPBadRequest( 'Only esriGeometryPoint or esriGeometryEnvelope' 'are supported for geometryType parameter for grid like data' ) layersGrid.append({layerBodId: gridSpec}) else: models = models_from_bodid(layerBodId, scale=scale, srid=params.srid) # The layer has a model but not at the right scale if models is not None and len(models) == 0: return response # There is no model for this layer elif models is None: raise exc.HTTPBadRequest('No GeoTable was found for %s' % layerBodId) layersDB.append({layerBodId: models}) featuresGrid = _identify_grid(params, layersGrid) featuresDB = _identify_db(params, layersDB) response['results'] = featuresGrid + featuresDB return response
def _identify(request): params = IdentifyServiceValidation(request) response = {'results': []} # Determine layer types # Grid layers are serverless layersDB = [] layersGrid = [] isScaleDependent = has_buffer(params.imageDisplay, params.mapExtent, params.tolerance) scale = get_scale(params.imageDisplay, params.mapExtent) if isScaleDependent else None if params.layers == 'all': model = get_bod_model(params.lang) query = params.request.db.query(model) for layer in get_layers_metadata_for_params(params, query, model): layerBodId = layer['layerBodId'] models = models_from_bodid(layerBodId, scale=scale, srid=params.srid) if models: layersDB.append({layerBodId: models}) else: gridSpec = get_grid_spec(layerBodId) if gridSpec and params.geometryType == 'esriGeometryPoint': layersGrid.append({layerBodId: gridSpec}) else: for layerBodId in params.layers: gridSpec = get_grid_spec(layerBodId) if gridSpec: if params.geometryType not in ('esriGeometryPoint', 'esriGeometryEnvelope'): raise exc.HTTPBadRequest( 'Only esriGeometryPoint or esriGeometryEnvelope' 'are supported for geometryType parameter for grid like data') layersGrid.append({layerBodId: gridSpec}) else: models = models_from_bodid(layerBodId, scale=scale, srid=params.srid) # The layer has a model but not at the right scale if models is not None and len(models) == 0: return response # There is no model for this layer elif models is None: raise exc.HTTPBadRequest('No GeoTable was found for %s' % layerBodId) layersDB.append({layerBodId: models}) featuresGrid = _identify_grid(params, layersGrid) featuresDB = _identify_db(params, layersDB) response['results'] = featuresGrid + featuresDB return response
def _get_feature_info_for_popup(request, params, isExtended=False, isIframe=False): feature, vector_model = next(_get_features(params)) layerModel = get_bod_model(params.lang) # TODO Remove this ugly hack layer = next( get_layers_metadata_for_params( params, request.db.query(layerModel), layerModel, layerIds=[ params.layerId if params.layerId != 'ch.bfs.gebaeude_wohnungs_register_preview' else 'ch.bfs.gebaeude_wohnungs_register' ])) options = {} if 'feature' in feature: options.update(feature.pop('feature')) else: options.update(feature) # Regular html popup don't return a geometry if 'properties' in options: if hasattr(options, 'extra'): options['properties'].update(options['properties'].extra) options['bbox'] = options.extra['bbox'] options['attributes'] = options.pop('properties') options.update({ 'featureId': options.get('featureId') or options.get('id'), # For grid layer 'attributes': options['attributes'], 'scale': options.get('scale'), 'attribution': layer.get('attributes')['dataOwner'], 'fullName': layer.get('fullName'), 'vector_model': vector_model, 'isExtended': isExtended, 'isIframe': isIframe, 'time': params.time }) return options
def _identify(request): params = _get_features_params(request) if params.layers == 'all': model = get_bod_model(params.lang) query = params.request.db.query(model) layerIds = [] for layer in get_layers_metadata_for_params(params, query, model): layerIds.append(layer['layerBodId']) else: layerIds = params.layers models = [ models_from_bodid(layerId) for layerId in layerIds if models_from_bodid(layerId) is not None ] if models is None: raise exc.HTTPBadRequest('No GeoTable was found for %s' % ' '.join(layerIds)) maxFeatures = 201 features = [] feature_gen = _get_features_for_filters(params, models, maxFeatures=maxFeatures, where=params.where) while True: try: feature = next(feature_gen) except InternalError as e: raise exc.HTTPBadRequest( 'Your request generated the following database error: %s' % e) except StopIteration: break else: f = _process_feature(feature, params) features.append(f) if len(features) >= maxFeatures: break return {'results': features}
def extendedhtmlpopup(request): params = _get_feature_params(request) params.returnGeometry = True feature, vectorModel = next(_get_features(params)) layerModel = get_bod_model(params.lang) layer = next( get_layers_metadata_for_params(params, request.db.query(layerModel), layerModel, layerIds=[params.layerId])) feature.update({'attribution': layer.get('attributes')['dataOwner']}) feature.update({'fullName': layer.get('fullName')}) feature.update({'extended': True}) response = _render_feature_template(vectorModel, feature, request, True) if params.cbName is None: return response return response.body
def extendedhtmlpopup(request): params = _get_feature_params(request) params.returnGeometry = True feature, vectorModel = next(_get_features(params)) layerModel = get_bod_model(params.lang) layer = next(get_layers_metadata_for_params( params, request.db.query(layerModel), layerModel, layerIds=[params.layerId] )) feature.update({'attribution': layer.get('attributes')['dataOwner']}) feature.update({'fullName': layer.get('fullName')}) feature.update({'extended': True}) response = _render_feature_template(vectorModel, feature, request, True) if params.cbName is None: return response return response.body
def _identify(request): params = _get_features_params(request) if params.layers == 'all': model = get_bod_model(params.lang) query = params.request.db.query(model) layerIds = [] for layer in get_layers_metadata_for_params(params, query, model): layerIds.append(layer['layerBodId']) else: layerIds = params.layers models = [ models_from_bodid(layerId) for layerId in layerIds if models_from_bodid(layerId) is not None ] if models is None: raise exc.HTTPBadRequest('No GeoTable was found for %s' % ' '.join(layerIds)) maxFeatures = 201 features = [] feature_gen = _get_features_for_filters(params, models, maxFeatures=maxFeatures, where=params.where) while True: try: feature = next(feature_gen) except InternalError as e: raise exc.HTTPBadRequest('Your request generated the following database error: %s' % e) except StopIteration: break else: f = _process_feature(feature, params) features.append(f) if len(features) >= maxFeatures: break return {'results': features}