====== GéoInf17 : Evaluation - partie 1 ====== Barème : ~ équipondéré. ===== 1) Initialisation de vue cartographique ===== **(A)** Présenter les deux approches permttant de définir la vue initiale d'une application de cartographie en ligne : * indiquer les méthodes de l'API OpenLayers utilisées pour chacune des deux approches * expliquer la différence pour l'utilisateur final. ---- 2 approches en effet : * approche se basant sur une enveloppe géographique dont l'étendue est défini par un tableau [minx, miny, maxx, maxy] (par exemple [-18, 37, 38, 57]) * méthodes utilisées : ol.View.fit, ol.Map.setView * quelque-soit la taille et le ratio de la fenêtre d'exécution de l'application, cette approche garantie que cette étendue est complètement rendue visible à l'utilisateur. Mais l'effet de bord est que l'échelle peut varier. * approche se basant sur un point de centrage de la carte (par exemple [10, 47]) et un niveau de zoom * méthodes utilisées : ol.View.setCenter, ol.View.setZoom * c'est en quelque-sorte l'inverse de la première approche - quelque-soit la taille et le ratio de la fenêtre d'exécution de l'application, cette approche garantie que l'échelle de visualisation est toujours la même, pour tous les utilisateurs. L'effet de bord est l'étendue de ce qui est visible peut varier. La première approche est utile quand il s'agit de toujours montrer à l'utilisateur un ensemble d'éléments cartographiques dispersés dans une enveloppe géographique. La seconde est utile quand cette dispersion n'existe pas, et que par exemple il s'agit de centrer la carte sur un point précis (ex. la localisation de l'utilisateur), souvent au plus près (grande échelle). ---- **(B)** Ci-après le code d'une application de cartographie en ligne dont la vue n'est pas initialisée explicitement. Il présente le tableau ''possibleViews'' qui offre plusieurs paramètres* pour initialiser cette vue : compléter la fonction ''initRandom'' pour définir une initialisation qui soit aléatoire parmi les 3 possibilités offertes par ce tableau. (*) longitude/latitude en EPSG:4326 ! ol3 - Exa1A
---- http://www.mediamaps.ch/oltuto/Exa1B.html ---- ===== 2) Ordonnancement de couches ===== L'application ci-dessous n'est pas terminée. La personne qui était en charge du développement a été affectée à un autre projet et c'est à vous de prendre le relais. ol3 - EXA1 - Baselayer & overlay ordering
{{ :geoinf17:lyrswitch.png?nolink|}} Néanmoins, cette personne vous laisse la sympatique "liste à faire" suivante : **(A)** Il faudrait mettre un peu d'ordre dans toutes ces couches (certaines sont cachées en l'état actuel) et définir lesquelles sont des couches de base (baselayer) ou de superposition (overlay). Note bien que j'utilise le layerswitcher très pratique de l'exemple [[geoinf17:ol3tuto#ex4dun_controle_layerswitcher_plus_souple|Ex4D]]. En effet, j'ai activé ce layerswitcher (cf balises script et link css) pour facilité la distinction baselayer/overlay, et en plus il insère un menu de contrôle dans l'IHM. Il s'utilise comme suit : * toutes les couches sont considérées de type "overlay" par défaut, * en ajoutant à la création d'une couche ''ol.layer'' le paramètre "type" avec la valeur "base" (''type: "base"''), celle-ci est alors considérée comme une "baselayer". **(B)** Il faudrait aussi définir un bon style pour la couche Summits. Je pensais à une forme de triangle, disons de couleur rouge. C'est possible avec ''[[http://openlayers.org/en/v3.19.1/apidoc/ol.style.RegularShape.html|ol.style.RegularShape]]'', à toi de voir. **(C)** Il faudrait encore améliorer l'affichage de la couche Wildruhezonen de sorte que les zones soient transparentes à 50% (on verrait alors les courbes de niveau en transparence). Mais comment faire ? ---- http://www.mediamaps.ch/oltuto/Exa2A-B-C.html ---- ===== 3) Cartographie avec CartoCSS ===== On part du résultat [[http://www.mediamaps.ch/oltuto/Ex4E_2.html|Ex4E_2.html]] de l'exemple [[geoinf17:ol3tuto#ex4epilotage_de_style_par_le_client_cartocss|Ex4E]] qui personnalise une représentation des districts de Suisse avec les instructions cartographiques CartoCSS définies dans ce fichier http://www.mediamaps.ch/oltuto/sld/g4districts.mss. Pour rappel : * un sélecteur filtré est utilisé (''[ak='VD']'') pour appliquer un style différent pour les districts vaudois * voir aussi la géotable sous-jacente https://ogo.carto.com/tables/g4districts98/public * sans oublier la documentation CartoCSS si besoin https://carto.com/docs/carto-engine/cartocss/properties **(A)** Adapter les instructions CartoCSS pour distinguer les districts qui ont répondu NON à l'adhésion à l'UE à plus de 75% (à colorer en rouge) des autres districts (à colorer en vert). Utiliser la colonne ''uemars2001'' de la géotable sous-jacente. {{:geoinf17:districts1.png?nolink&200|}} ---- #g4districts98 { polygon-fill: green; [uemars2001 > 75] { polygon-fill: red; } } ---- **(B)** Adapter les instructions CartoCSS pour distinguer en plus, les districts qui ont répondu NON à plus de 80%, puis les districts qui ont répondu NON à plus de 85% {{:geoinf17:districts2.png?nolink&200|}} ---- #g4districts98 { polygon-fill: green; [uemars2001 > 75] { polygon-fill: yellow; } [uemars2001 > 80] { polygon-fill: orange; } [uemars2001 > 85] { polygon-fill: red; } } ---- ===== 4) Un peu de Spatial SQL ===== ==== Préparation ==== * Se connecter à votre compte CARTO (https://carto.com) * Sélectionner **Your datasets** dans le menu **Maps** (dans la barre bleu supérieure) * Cliquer **NEW DATASET** * Cliquer **CREATE EMPTY DATASET** * Renommer la géotable avec le nouveau nom ''montest'' en sélectionnant **Rename dataset** dans le menu supérieur (3 points verticaux) - répondre **Ok rename it!** * Activer le mode console **SQL** avec l'interrupteur **METADATA** (en bas-gauche) * Remplacer le contenu de la console par les instructions suivantes et exécuter par un **Ctrl-S** (ou bouton **APPLY**) INSERT INTO montest (the_geom, name, description) VALUES (ST_GeometryFromText('POINT(6.64763 46.78106)', 4326), 'pieton1', 'Simon'); INSERT INTO montest (the_geom, name, description) VALUES (ST_GeometryFromText('POINT(6.64465 46.78159)', 4326), 'pieton2', 'Henri'); INSERT INTO montest (the_geom, name, description) VALUES (ST_GeometryFromText('POINT(6.64890 46.77856)', 4326), 'pieton3', 'Adonaldo'); INSERT INTO montest (the_geom, name, description) VALUES (ST_GeometryFromText('POINT(6.64764 46.78042)', 4326), 'pieton4', 'Paula'); INSERT INTO montest (the_geom, name, description) VALUES (ST_GeometryFromText('LINESTRING(6.64547 46.78299,6.65159 46.78078)', 4326), 'route1', 'De la patinoire au badminton'); INSERT INTO montest (the_geom, name, description) VALUES (ST_GeometryFromText('LINESTRING(6.64841 46.77851,6.65108 46.78337)', 4326), 'route2', 'De la plage vers le Sud'); ==== Questions ==== Voici donc une géotable ''montest'' prête pour quelques questions de manipulations géospatiales : **(A)** Quelle est la longueur de chaque entité de type ''ST_LineString'' de la table ? - ''ST_Length'' ---- select ST_Length(the_geom), description from montest where ST_GeometryType(the_geom) = 'ST_LineString' ---- **(B)** Quelles sont les coordonnées du point d'intersection entre la route1 et la route2 ? - ''ST_Intersection'' ---- select ST_AsText(ST_Intersection(the_geom, (select the_geom from montest where name = 'route2'))) from montest where name = 'route1' ---- **(C)** A quelle distance sont les deux piétons les plus proches ? - ''ST_Distance'' ---- select A.name as aname, B.name as bname, ST_Distance(A.the_geom, B.the_geom) as dist from montest A, montest B where A.name <> B.name and A.name like 'pieton%' and B.name like 'pieton%' order by dist limit 1 ---- {{:geoinf17:cartosql.png?nolink|}}