Ajouter en SQL Parametric View based Layer¶
La manière traditionnelle d’utiliser des données sauvé dans des bases de données est de configurer une table ou une vue de base de données comme un nouveau layer dans GeoServer. A partir de GeoServer 2.1.0, l’utilisateur peut également créer un nouveau layer en spécifiant une requête SQL brut, sans avoir à créer effectivement une vue dans la base de données. Le SQL peut également être paramétré, et les valeurs des paramètres adoptée en même temps qu’une demande WMS ou WFS.
Création d’une vue SQL plaine
Afin de créer une vue SQL, l’administrateur peut entrer dans le Add a new resource de la page Layers.
Lors de la sélection d’un database backed store une liste de tables et vues disponibles pour publication paraîtra, mais au fond de celui-ci un nouveau lien paraîtra, Configure new SQL view:
En sélectionnant le lien Configure new SQL view ouvrira une nouvelle page où l’instruction SQL peut être spécifiée:
SELECT st.obs_year, st.storm_num, st.storm_name, min(st.obs_datetime) AS storm_start, max(st.obs_datetime) AS storm_end, max(st.wind) AS max_wind, st_makeline(st.geom) AS the_route FROM ( SELECT storm_obs.storm_num, storm_obs.storm_name, storm_obs.wind, storm_obs.press, storm_obs.obs_datetime, date_part('year'::text, storm_obs.obs_datetime) AS obs_year, storm_obs.geom FROM storm_obs ORDER BY date_part('year'::text, storm_obs.obs_datetime), storm_obs.storm_num, storm_obs.obs_datetime) st GROUP BY st.obs_year, st.storm_num, st.storm_name ORDER BY st.obs_year, st.storm_num
Note
La requête peut être n’importe quelle instruction SQL qui peut être valablement exécuté dans le cadre d’une sous-requête dans la clause FROM, qui est
select * from (<the sql view>) [as] vtable
. Cela est vrai pour la plupart des instructions SQL, mais la syntaxe spécifique pourrait être nécessaire de faire appel sur une procédure stockée en fonction de la base de donnéesNote
GeoServer fera de son mieux pour trouver automatiquement le type de géométrie et lasrid native, mais ils doivent toujours être vérifiés une deuxième fois et finalement corrigé. En particulier ayant le droit SRID (spatial Identifiant de référence) est la clé pour avoir des requêtes spatiales fonctionnent réellement. Dans de nombreuses bases de données spatiales du SRID est égal au code EPSG pour le système de référence spatiale spécifique, mais ce n’est pas toujours le cas (par exemple, Oracle dispose d’un certain nombre de codes EPSG SRID non).
Spécifiez un SRID valide.
Une fois la requête et les informations d’attributs sont définis appuyez Save et la page de configuration des nouveaux layers apparaîtra. la page aura un lien vers un éditeur de vue SQL au bas de
Data
tabAssurez-vous que le CRS est
EPSG:4326
and write manually(-180,-90,180,90)
des valeurs dans les sections Bounding Boxes.Cliquez Save.
A ce stade, le nouveau WMS layer est publié avec GeoServer.
Création d’un paramétrique vue SQL
Attention
En règle générale, utilisez les paramètres de substitution SQL uniquement si la fonctionnalité requise ne peut être obtenue avec des moyens plus sûrs, telles que le filtrage dynamique (filtres CQL) ou la substitution de paramètres SLD. N’utilisez que des paramètres SQL comme un dernier recours, paramètres mal validées peuvent ouvrir la porte à des attaques par injection SQL.
Une vue paramétrique SQL est basé sur une requête SQL contenant des paramètres dont les valeurs peuvent être dynamiquement fournit avec demandes WMS or WFS. Un paramètre est lié par des signes %, peut avoir une valeur par défaut, et doit toujours avoir une expression régulière de validation.
Afin de créer une vue paramétrique SQL exécutez les étapes 1 et 2 comme avant et puis insérez les paramètres suivants:
SELECT date_part('year'::text, t1.obs_datetime) AS obs_year, t1.storm_num, t1.storm_name, t1.wind, t2.wind AS wind_end, t1.press, t2.press AS press_end, t1.obs_datetime, t2.obs_datetime AS obs_datetime_end, st_makeline(t1.geom, t2.geom) AS geom FROM storm_obs t1 JOIN ( SELECT storm_obs.id, storm_obs.storm_num, storm_obs.storm_name, storm_obs.wind, storm_obs.press, storm_obs.obs_datetime, storm_obs.geom FROM storm_obs) t2 ON (t1.obs_datetime + '06:00:00'::interval) = t2.obs_datetime AND t1.storm_name::text = t2.storm_name::text WHERE date_part('year'::text, t1.obs_datetime) BETWEEN %MIN_OBS_YEAR% AND %MAX_OBS_YEAR% ORDER BY date_part('year'::text, t1.obs_datetime), t1.storm_num, t1.obs_datetime
Note
La requête définit deux paramètres
%MIN_OBS_YEAR%
and%MAX_OBS_YEAR%
.Cliquez Guess parameters from SQL. GeoServer créera automatiquement les champs avec les paramètres spécifiés dans la vue:
Note
Toujours fournir des valeurs par défaut pour chaque paramètre afin de laisser le layer fonctionner correctement et être aussi sûr que l’expression régulière pour la validation des valeurs sont correctes.
Exemples d’expressions régulières:
^[\d\.\+-eE]+$
va vérifier que la valeur du paramètre est composé des éléments valables pour un nombre à virgule flottante, finalement en notation scientifique, mais ne vérifie pas que la valeur fournie est en fait un nombre à virgule flottante valide[^;']+
va vérifier la valeur du paramètre ne contient pas de citations ou semicolumn, prévenir les attaques communes d’injection sql, sans réellement imposer beaucoup sur la structure de la valeur du paramètre
Remplissez quelques valeurs par défaut pour les paramètres, de sorte que GeoServer peut exécuter la requête et vérifier les résultats dans les prochaines étapes. Régler
MAX_OBS_YEAR
à 2020 etMIN_OBS_YEAR
à 0.Actualiser les attributs, consultez le SRID de la géométrie et de publier la couche comme avant. Attribuer également le style
storm_track_interval
au layer comme style par défaut.Cliquez sur OpenLayers sur la liste Layer Preview pour v_storm_interval layer.
À première vue, vous ne verrez rien puisque le layer utilise les paramètres par défaut pour les années d’observation. Spécifiez deux ans pour la vue en ajoutant le paramètre à la fin de la Demande de GetMap:
viewparams=MIN_OBS_YEAR:2000;MAX_OBS_YEAR:2000
Vous devriez obtenir une telle demande:
http://localhost:8083/geoserver/geosolutions/wms?service=WMS&version=1.1.0&request=GetMap&layers=geosolutions:v_storm_track_interval&styles=&bbox=-180.0,-90.0,180.0,90.0&width=660&height=330&srs=EPSG:4326&format=application/openlayers&viewparams=MIN_OBS_YEAR:2000;MAX_OBS_YEAR:2000
Maintenant, vous êtes capable de voir les ouragans de la vue paramétrique et également choisir dynamiquement l’interval d’intérêt des années d’observation.