Ajout d’une vue paramétrique de SQL base Layer

La manière traditionnelle d’utiliser les données de la base de données soutenu consiste à configurer une table ou une vue de base de données comme un nouveau calque dans GeoServer. Commençant par GeoServer 2.1.0 l’utilisateur peut également créer un nouveau calque en spécifiant une requête SQL brute, sans avoir à réellement créer une vue dans la base de données. Le SQL peut aussi être paramétrée, et les valeurs de paramètre transmises ainsi qu’une demande WMS ou WFS.

** Création d’une vue SQL simple **

  1. Afin de créer une vue SQL, l’administrateur peut entrer dans la : guilabel: “Ajouter une nouvelle ressource” de le : guilabel : page de « Couches ».

    ../../../_images/sqlviews_addlayer.png
  2. Après la sélection d’une base de données soutenu stocker une liste de tables et les vues disponibles pour publication apparaîtra, mais au fond d’if un nouveau lien,: guilabel: « Configure le nouveau mode SQL », apparaîtra :

    ../../../_images/sqlviews_postgrestore.png
    ../../../_images/sqlviews_addsqllayer.png
  3. Cliquant sur le lien : guilabel: « Configure le nouveau mode SQL » ouvrira une nouvelle page où l’instruction SQL peut être spécifiée :

    ../../../_images/sqlviews_plainsql_params.png

    Configuration de vue SQL simple

    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 toute instruction SQL qui peut être valablement exécutée dans le cadre d’une sous-requête dans les clauses FROM, c’est-à-dire ‘’ sélectionnez * de (<the sql=”” view=”“>) [aussi] vtable’‘. Cela est vrai pour la plupart des instructions SQL, mais syntaxiques spécifiques pourraient être nécessaires pour appeler sur une procédure stockée selon la base de données. En outre, toutes les colonnes retournées par l’instruction SQL doivent avoir un nom, dans certaines bases de données aliasing est requis lors de l’appel des noms des fonctions</the>

  4. Une fois qu’une instruction SQL valide a été spécifié presse la : guilabel : lien « Actualiser » de la table d’attributs pour obtenir la liste de la fonction d’attributs de type :

    ../../../_images/sqlviews_plainsql_refresh.png

    Note

    GeoServer fera son possible pour déterminer automatiquement le type de géométrie et le srid natif, mais ils devraient toujours être doubles vérifié et corrigé par la suite. Est essentiel d’avoir des requêtes spatiales fonctionnent réellement d’avoir en particulier le SRID droit (id de référence spatial). Dans nombreuses bases de données spatiales le SRID est égal au code EPSG pour le système de référence spatiale spécifique, mais qui n’est pas toujours vrai (par exemple, Oracle a un certain nombre de codes non EPSG SRID).

  5. Spécifier un SRID valide.

    ../../../_images/sqlviews_plainsql_refresh_srid.png

    Forcer manuellement 4326 SRID dans ce cas

    Note

    Si vous désirez les ID de fonction stable pour les fonctionnalités de la vue une ou plusieurs colonnes fournissant une identification unique pour les fonctionnalités doivent être vérifiés dans la colonne ‘’ code d’identification ‘’. Toujours s’assurer que ces attributs génèrent une clé unique en fait, ou de filtrage et les clients de WFS seront mishbehave.

  6. Une fois que la requête et les informations d’attribut sont définies presse : guilabel: « Enregistrer » et la page de configuration habituelle nouvelle couche seront affiché. Cette page aura un lien vers un éditeur en mode SQL au bas de l’onglet ‘’ données ‘’ :

    ../../../_images/sqlviews_plainsql_featuretype.png
  7. Assurez-vous que le CRS est ‘’ EPSG:4326’’ et ** écrire manuellement ** ‘’ (-180,-90,180,90)’’ les valeurs dans la : guilabel : sections “Boîtes de délimitation”.

    ../../../_images/sqlviews_plainsql_bbox.png
  8. Cliquez sur : guilabel: “Enregistrer” lorsque vous avez terminé.

À ce stade la nouvelle couche WMS est publiée avec GeoServer.

** Création d’une vue SQL paramétrique **

Avertissement

Comme une règle de base utiliser la substitution de paramètres SQL uniquement si la fonctionnalité requise ne peut être obtenue par des moyens plus sûrs, comme le filtrage dynamique (CQL filtres) ou de substitution de paramètres SLD. Utiliser uniquement les paramètres SQL en dernier recours, paramètres incorrectement validés peuvent ouvrir la porte aux « attaques par injection SQL <http: en.wikipedia.org/wiki/sql_injection=”“>’ _.</http:>

Une vue SQL paramétrique est basée sur une requête SQL contenant des paramètres dont les valeurs peuvent être dynamiquement le long des requêtes WMS ou WFS. Un paramètre est lié par les signes %, peut avoir une valeur par défaut et doit toujours avoir une expression régulière de validation.

  1. Afin de créer un SQL paramétrique vue effectue les étapes 1 et 2 comme avant et puis insérez les paramètres suivants :

    ../../../_images/sqlviews_parametricsql_params.png

    Configuration de vue SQL paramétrique

    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 %’’ et ‘’ % MAX_OBS_YEAR %’‘.

  2. Cliquez sur le : guilabel: « Suppose que les paramètres de SQL ». GeoServer créera automatiquement les champs avec le LSE paramètres dans la vue :

    ../../../_images/sqlviews_parametricsql_guess_params.png

    Note

    Toujours fournir des valeurs par défaut pour chaque paramètre afin de laisser le travail de couche correctement et aussi s’assurer que l’expression régulière pour valider les valeurs sont correctes.

    Exemples d’Expressions régulières :

    • ‘’ ^[d.+-eE]+$’’ va vérifier que la valeur du paramètre est composée d’éléments valides pour un flottant point nombre, éventuellement en notation scientifique, mais ne vérifie pas que la valeur fournie est en réalité un nombre à virgule flottante valide

    • ``[^;’] +’’ va vérifier la valeur du paramètre ne contient-elle pas de guillemets ou semicolumn, prévenir les attaques par injection sql commun, sans réellement imposer beaucoup sur la structure de valeur de paramètre

  3. Remplir certaines valeurs par défaut pour les paramètres, afin que GeoServer peut exécuter la requête et examinez les résultats dans les prochaines étapes. Valeur 0 ‘’ MIN_OBS_YEAR’’ et ‘’ MAX_OBS_YEAR’’ à l’horizon 2020.

  4. : guilabel: « Actualiser » les attributs, de vérifier le SRID de géométrie et de publier la couche comme auparavant. Également assigner le style ‘’ storm_track_interval’’ à la couche comme Style par défaut.

    ../../../_images/sqlviews_parametricsql_publishing.png
  5. Cliquez sur le : guilabel: « OpenLayers » sur le : guilabel: « Aperçu de calque » liste pour : guilabel: « v_storm_track_interval » couche.

  6. À première vue vous ne verrez rien puisque la couche utilise les paramètres par défaut pour les années d’observation. Spécifiez deux ans pour la vue en ajoutant ce paramètre à la fin de la demande de GetMap :

    ‘’ & viewparams = MIN_OBS_YEAR:2000 ; MAX_OBS_YEAR:2000’‘

    Vous devriez obtenir une requête comme ceci :

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

Vous êtes maintenant en mesure de voir les ouragans du vue paramétrique et choisir aussi dynamiquement l’intervalle d’années d’observation d’intérêt.

../../../_images/sqlviews_parametricsql_preview.png

Aperçu de SQL View OL paramétrique