﻿{"id":12638,"date":"2024-03-19T10:00:00","date_gmt":"2024-03-19T09:00:00","guid":{"rendered":"https:\/\/www.sigterritoires.fr\/?p=12638"},"modified":"2024-03-28T06:24:47","modified_gmt":"2024-03-28T05:24:47","slug":"mise-a-jour1-base-de-donnees-enc-avec-geopackage-sous-qgis","status":"publish","type":"post","link":"https:\/\/www.sigterritoires.fr\/index.php\/mise-a-jour1-base-de-donnees-enc-avec-geopackage-sous-qgis\/","title":{"rendered":"Mise \u00e0 jour(1) :Base de donn\u00e9es ENC avec Geopackage sous QGis"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em><strong>Apr\u00e8s la publication de la <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/creation-dune-base-de-donnees-geopackage-pour-les-cartes-enc-1ere-partie-constituer-la-base-de-donnees\/\" title=\"Cr\u00e9ation d\u2019une base de donn\u00e9es Geopackage pour les cartes ENC (1\u00e8re partie: constituer la base de donn\u00e9es)\">premi\u00e8re partie du travail sur les Geopackages<\/a>, le travail avec <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/debuter-avec-postgrespostgis\/\">PostgreSQL\/Postgis<\/a> nous a permis une s\u00e9rie d&rsquo;avanc\u00e9es compl\u00e9mentaires. Vous trouverez dans cet article la mise \u00e0 jour de la proc\u00e9dure d&rsquo;import des fichiers <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/cartes-enc-dans-qgis-avec-postgis1\/\">S57<\/a> et dans un article post\u00e9rieur les mises \u00e0 jour des symbologies S57 sous QGis pour les Geopackages.<\/strong><\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mise \u00e0 jour de l&rsquo;import des fichiers S57 : ajout de l&rsquo;attribut \u00ab\u00a0purpose\u00a0\u00bb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans l&rsquo;article original on aborde le probl\u00e8me des doublons lors de la gestion de la base de donn\u00e9es. Ces doublons peuvent \u00eatre de deux types diff\u00e9rents:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>des \u00ab\u00a0vrais\u00a0\u00bb doublons o\u00f9 tous les attributs sont les m\u00eames. Ils sont rares car ils proviennent de la superposition de deux emprises de cartes marines avec une \u00e9chelle tr\u00e8s proche. Par contre ils peuvent aussi r\u00e9sulter d&rsquo;une erreur de rechargement en double d&rsquo;un fichier S57. Ce type de doublon est trait\u00e9 avec le script fourni dans l&rsquo;article d&rsquo;origine qui n&rsquo;est pas mis \u00e0 jour.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>des \u00ab\u00a0faux\u00a0\u00bb doublons o\u00f9 l&rsquo;information de la couche se retrouve en double sans que les identifiants des enregistrements soient forc\u00e9ment identiques.Ils apparaissent quand des zones cartographi\u00e9es \u00e0 diff\u00e9rentes \u00e9chelles sont charg\u00e9es dans la m\u00eame base de donn\u00e9es. Ce type de doublon ne doit pas \u00eatre supprim\u00e9, mais g\u00e9r\u00e9.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dans le script fourni dans l&rsquo;article initial nous ajoutons le nom du fichier et l&rsquo;\u00e9chelle aux tables <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/le-format-geopackage-et-qgis-3\/\">geopackage<\/a>. L&rsquo;utilisation de l&rsquo;\u00e9chelle pour g\u00e9rer les \u00ab\u00a0faux\u00a0\u00bb doublons s&rsquo;av\u00e8re assez compliqu\u00e9e:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans l&rsquo;exemple qui suit, voici le r\u00e9sultat de l&rsquo;affichage des donn\u00e9es brutes pour le Goulet de la Rade de Brest qui se trouve sur deux cartes:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"397\" data-attachment-id=\"12639\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/mise-a-jour1-base-de-donnees-enc-avec-geopackage-sous-qgis\/brute\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?fit=1387%2C860&amp;ssl=1\" data-orig-size=\"1387,860\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"brute\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?fit=640%2C397&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?resize=640%2C397&#038;ssl=1\" alt=\"\" class=\"wp-image-12639\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?resize=1024%2C635&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?resize=300%2C186&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?resize=768%2C476&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?w=1387&amp;ssl=1 1387w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/brute.jpg?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pour la Rade de Brest, les deux cartes se chevauchent. L&rsquo;\u00e9chelle de l&rsquo;une est de 10000 et celle de l&rsquo;autre de 22500.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Outre l&rsquo;\u00e9chelle, il y aune information qui peut s&rsquo;av\u00e9rer tr\u00e8s utile , la finalit\u00e9 (purpose) de la carte. C&rsquo;est une valeur comprise entre 1 et 6 et qui correspond \u00e0 l&rsquo;objectif principal de la carte:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1 : Vue d&rsquo;ensemble<\/li>\n\n\n\n<li>2 : G\u00e9n\u00e9ralit\u00e9s<\/li>\n\n\n\n<li>3 : C\u00f4ti\u00e8re<\/li>\n\n\n\n<li>4 : Approche<\/li>\n\n\n\n<li>5 : Port<\/li>\n\n\n\n<li>6 : Accostage<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Les deux cartes qui se chevauchent dans notre exemple ont deux finalit\u00e9s diff\u00e9rentes, l&rsquo;une a une finalit\u00e9=5 (Port), l&rsquo;autre une finalit\u00e9=6 (Accostage).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si on filtre avec purpose=5, on obtient:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"459\" data-attachment-id=\"12640\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/mise-a-jour1-base-de-donnees-enc-avec-geopackage-sous-qgis\/purpose5\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?fit=1200%2C860&amp;ssl=1\" data-orig-size=\"1200,860\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"purpose5\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?fit=640%2C459&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?resize=640%2C459&#038;ssl=1\" alt=\"\" class=\"wp-image-12640\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?resize=1024%2C734&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?resize=300%2C215&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?resize=768%2C550&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?w=1200&amp;ssl=1 1200w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Et si on filtre avec  purpose=6:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose6.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"426\" data-attachment-id=\"12641\" data-permalink=\"https:\/\/www.sigterritoires.fr\/index.php\/mise-a-jour1-base-de-donnees-enc-avec-geopackage-sous-qgis\/purpose6\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose6.jpg?fit=1212%2C807&amp;ssl=1\" data-orig-size=\"1212,807\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"purpose6\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose6.jpg?fit=640%2C426&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose6.jpg?resize=640%2C426&#038;ssl=1\" alt=\"\" class=\"wp-image-12641\" srcset=\"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose6.jpg?resize=1024%2C682&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose6.jpg?resize=300%2C200&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose6.jpg?resize=768%2C511&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose6.jpg?w=1212&amp;ssl=1 1212w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dans la base de donn\u00e9es du projet avec PostgreSQL\/Postgis, nous avons import\u00e9 4500 fichiers S57. <br>Les valeurs min et max de l&rsquo;\u00e9chelle de toutes les cartes pour l&rsquo;objectif 5 sont 3000 et 60000. Les valeurs min et max de l&rsquo;\u00e9chelle pour l&rsquo;objectif 6 sont 2500 et 15000. On voit bien que les valeurs d&rsquo;\u00e9chelle des cartes les plus d\u00e9taill\u00e9es se retrouvent \u00e0 l&rsquo;int\u00e9rieur des cartes de type 5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici le r\u00e9sultat pour l&rsquo;ensemble des finalit\u00e9s:<\/p>\n\n\n\n<table id=\"tablepress-16\" class=\"tablepress tablepress-id-16\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Purpose<\/th><th class=\"column-2\">min_scale<\/th><th class=\"column-3\">max_scale<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">1<\/td><td class=\"column-2\">325000<\/td><td class=\"column-3\">10000000<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">2<\/td><td class=\"column-2\">100000<\/td><td class=\"column-3\">1534076<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">3<\/td><td class=\"column-2\">50000<\/td><td class=\"column-3\">600000<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">4<\/td><td class=\"column-2\">12500<\/td><td class=\"column-3\">150000<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">5<\/td><td class=\"column-2\">3000<\/td><td class=\"column-3\">60000<\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\">6<\/td><td class=\"column-2\">2500<\/td><td class=\"column-3\">15000<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-16 from cache -->\n\n\n<p class=\"wp-block-paragraph\">Nous proposons donc d&rsquo;ajouter, en plus du nom de fichier et de l&rsquo;\u00e9chelle, la finalit\u00e9, comme attribut des tables geopackage. Cet attribut se retrouve dans la m\u00eame table DSID utilis\u00e9e pour r\u00e9cup\u00e9rer l&rsquo;\u00e9chelle avec le nom de DSID_INTU.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les fichiers .bat d&rsquo;import restent les m\u00eames, sauf que le script Python appel\u00e9 doit \u00eatre le script suivant:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><div class='stb-container stb-style-download stb-caption-box'><div class='stb-caption'><div class='stb-logo'><img class='stb-logo__image' src='data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN\/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz\/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH\/w\/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA\/g88wAAKCRFRHgg\/P9eM4Ors7ONo62Dl8t6r8G\/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt\/qIl7gRoXgugdfeLZrIPQLUAoOnaV\/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl\/AV\/1s+X48\/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H\/LcL\/\/wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93\/+8\/\/UegJQCAZkmScQAAXkQkLlTKsz\/HCAAARKCBKrBBG\/TBGCzABhzBBdzBC\/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD\/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q\/pH5Z\/YkGWcNMw09DpFGgsV\/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY\/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4\/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L\/1U\/W36p\/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N\/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26\/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE\/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV\/MN8C3yLfLT8Nvnl+F30N\/I\/9k\/3r\/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt\/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi\/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a\/zYnKOZarnivN7cyzytuQN5zvn\/\/tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO\/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3\/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA\/0HIw6217nU1R3SPVRSj9Yr60cOxx++\/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3\/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX\/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8\/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb\/1tWeOT3dvfN6b\/fF9\/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR\/cGhYPP\/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF\/6i\/suuFxYvfvjV69fO0ZjRoZfyl5O\/bXyl\/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o\/2j5sfVT0Kf7kxmTk\/8EA5jz\/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5\/wAAgOkAAHUwAADqYAAAOpgAABdvkl\/FRgAADcFJREFUeNrsmnmQXNV1xn\/3Lf1eb9OzdM+qGe2DFgZFIGQIizFGBpRAgQUhmDUOqQI7qYIirtguAgHbyBUbO3FsEpcTIixMICKgsDgskYyNWGwEaLEQoA1mn+np6Z6ZXt9288d9o8E2IhKSUymXXtWrN931+vX97vnOOd93eoSUkt+FQ+N35DgO5DiQ39JhfNCbQojfeC+ia0RtC8\/zKdUclvUspVQus3hJD\/nxMfoGhwkqU3zi\/NV2NF7X+OSjD2WSDem6IJAWgKGJ2kR+fPLiNX+UrZaL45ue+XHViCbo7GijpaWVHdu3kYhH2frGTmzTQAiB5\/u4fvAba\/mgAmUczS4IIfA9j+pUIbpo4bwerLozS1b6FLtjwfJP\/sU3WnNTtVix7JgEAUnLcNPJSAlqw6X+\/W\/0nHrGa8ItbRkZHNjpNjVVP2jzjjoih3VIKE5MGF2zu1bH5yy9WrZ0n5N1zMzOgTFGXxrAK1XA80FK8APwPAuBZdrRxpbGhiWL5i6+qi0psk0L9m1u0ksP\/PzFF5+ORdu8j7ypHxSmD6eWR6nmsmJZz6KTV11y+z6v8Q\/2lURd\/0gOr1gEASBACAUiEBAEClQQQAB4EnyJmUgxb14ny+emJhdEhp7a9Oj6r7z82vbdlqGjadoRUeuIgFimQaXqcO6qVZfPP++P7970zviCvXv2EggDYgkQEiRhFMK\/gzAivgShhfVFqKsPeGDE6jj1lKV8+pTY3lf+\/e9v+4+NTz1sGTpSSpxjDUQHIgL90muuvTl65pV3\/dvz22Pl0QHwqmqBdh1omtp1yftASBUFCUgdhD4DBB00AzQbtCQdJ53IFy9bUHln\/V\/f\/t17f\/BtobbgsIAcdvnVBNql11x7q7HqhrXrt\/bFyq4Ltg1GBHwPnKpa7K9uSUgzDTQLTAuMXzvNOMQbobmTgckodzyvRRfe9J27P3\/TDV8QR7K+w71x1YWrr01ccMOdD768z3Q8D+oaIJoEwwRdA68CgaeiIlA5IoR6rZkKsG6BFlGgtBBErAHqZ0FmNjS3MZ6rcMcjA+aCq+6647I1l15\/TIEsnNu1fPEVf\/61B7b2216tBpapAMTqwIqCpgMBuI56pBAc5JcIgei2AqJH1GnGQhDt0NQJdRnFX1Ekv38\/X3\/kHfvsz962dkn33BXHBIita6k1N976lScOVNvL+TxYEbU4ISBiQaIhBKNB4IAMFO\/F+2hlRn6VVmZ0BkS6E1Jp0CRUJ6A4BrLE8N5e1m+tNt\/wl3d+LaJRd9RAzr\/o4iv3pntW7enPqcV6rtps3QijkoREWi2QAHxXRUDTFRjdACMKhq0iEYlCvAEa2iHTCXXNoAmoFmBqFKbyUKtCRPCL7ft5W19yzqcvv\/yqowLSEDXTs89aff2W\/ZMRKXTQTdUXPE+BMUy104l6RQ3DVGCmaRcJIxCJQTSuSnS8HhrboLkTUs1qBZVxmByFYgGcmqp8AgLf55lt2Uj32Zdc15CwMkcMZLr4nnb2OasGY3NOGslOQuCD1ELa6ApMEIBpQiwO9RlIpsE01FlzYXAA+nphYBgGRqEqoKkDWmere5FQzYcg8uBUQPozC9AE\/UN5ekVHz2lnnPVJAP0QUsY4hPpAB635hGXn7iiaUemEVPJDBaELRR3fn8kBTVfn2ADs3UU608Q5n+gJfq+7q2hEkuweLie39DliXxHIpBSdSuMwOQKlvIoE8mDFRqrK51Wr7B4OYiuWnf4p45n\/3uBJ6R+R1upsb+5KdC1ZPjRUUHmhh7yXngLkS1V28VUuWLb68vwEl328x7vzxst3z25t3O041UKlUsZz\/fqi0Jf+8w5v0Xef7dXdhAVuXtHJdZQqQMxEIwjRiIDBbJFgVueSlkx9+0C20HdEQKxEalb\/hN+RHehXOy+tsGfoICKqZ7ieAumbIAX09XLN6tO9H9y8ZrOpadt937ftaMw2IlHGstmRYGL8vS+ubBwW1eCcbz28UyedVJ9HqggRyhv5vqjogqHcBOX5mXnp1vZ5hwKiHQpdqr5pbtUVLf5oPxRzMDEGk+NQmoRqRckOEYHAAC+AwX46jTJ3XX3udsvQt2u6niyVy9ozzz777qZNmw7ohqEnG9PJ4aHc63+2IrVzaaMLY7kwp3QwNBVhXczQiwC0AK84RWDVZ1pa2+dHxBHI+PbWNM2tbe0emqBcBGmDqIKhQyXs0tN9wTRVjozkuOSiE91ZDfFfOq5re57v33LLLU+88MILL0spWbly5elr1679w3hdg21r3q4LTuk4cdejbxs0N4AIVbEfyn4pFX0DBwIXfJeJsosVT2Yy6frDr1rxRBzTsut8N1C77fvqwbUa1EpQmlDRKYxCIQfj41Aq0t3ZUiqWSmXTjMQefvjhnevWrXs+lUpN1tXVTT700EPPb968eXdbW2scoU0snF0\/RSwOEQNMoapV4IDngF8BWQXpKpCapOh4eGh2Ll84fCD7DvQKTdc06fvKR\/jB+67Tpw+uD46jzkBD001ZLleo1WpaLpcrtbe312zbJpFI0N3d7dRqtXIsFtNsOyo14fqYDkQkmBI0XxUS6QAuCB90qShnGkhdBylFzUMcNrUcX0rfccqGJpTkkHJGemtGqJ1CEWjaYCchoTFWFvHAd+yR0dHKeeedd1JbW9uSe++9902AtWvXLlq2bNlix3EqqWQyvufA1iQTg+CmVNWLWWCb4QZ5SiH4QWjGfBJxG6EJT36Axv7QqpUdHc4m53gqH9BVH9EjKi+08KqHeWInIGPz3N5y5PpPRU7Ij2RfyLS2NS6PRP5kzZo1L5umycqVK0+fNWtWKvC93JSr9Tz3zphFRwvogXKMEUt9l9BnzJgbVsaKT6o+xlilWDhiz54bG+1tCGp5YnUNyECp14NSPIzK9NWwYXYLL40GbHyPkz8zp360f3jorVRjuu6mz33uoqhtS8dxKp7r5QzT6P76gz9esW2kBMuWQtVRKsBH5YOuK2GqaYoJToDWbBExKpPZ4cHeI9ZaTnmqvz1lDqcbGkGG0RBm6BX1UAFbilbJDDTPIuhcxB0bJuwf7qhd0JhuPNOUTiQ3MlgcHx0q6tI1y7XaGV\/6\/mMX3rPuKZtUQjWKmAmJKMQjilo6qslqEiwDYhFaZ6exykO92YH+A0cckYGBwV53vO\/t1ubuxWO5ogq5mAagK2MUTUB9M6RnQTQFEgo5nb\/63jZ7Q2dwxkUrO09ePDc9JUSZ7W\/9PLlhy87ortGqoHOhyoH8BNQnFQBfU0VEhtJfovIDQUeTRXTXuwdGsvm+IwZS8ynk3nvzxRNWrLz4l\/uyGlKbAWPYEK1TIJo6lCdxfZgcA6+Al4rxyr4R8crubTFMPQZVqGYhakDnQtX0KhOQL4Q6TVUmNA1cpXzRNZAawogwP1IJ9r7005\/VoPCRZPxrL2\/ZPD9e3d+STs8oXyOqLG6qBdIdSsK7nuopuUHIj4BbhXQjzOmCznaY1QlzFkBjE1QKKieEptTuVBEcX\/UqXSg6aeHgQkpaMnHmTR048PqLWzZ\/ZD8ykM3vGN31kyc\/fupcVal0G2IpaGiFTDskGxQd8iOQG4CJUaiVlX5ya0oMTjdTNyynTlndE4T0qVSgWFHPCQK1Iss46P1PazYZfOaxJ\/vzk9uPxiF6Gzc8eP\/HMvnd3Yvngx6HhhbIdCiX53gKxNgAFLJQKYemy1eJ7PsKgOMoCaJHVJXzQ60WhHlQqkDFC1\/Lg1ZhTlcjHxt\/8+3HfvTAOlUBjsLqFqbKuzd876v33Hh+V7W+eyEkmpX78zzIj4aRGINqWe289FUTDRuZUsdeOFExwl4B+E44hfTU\/aUK1EJL4AVEklGuaqe28W\/vvGeiWtt9LKYozitbt23c+8R37rvtmh6sTBNM1WAiC+NDSmvVyqoKSVfJjMBXC\/RcpZ2kFyqD0AIYlhoxShlqudDflGpQdiBicV1PM333ffNffvHG9scA51gAkUDuX++779vu0\/c8\/uUL01jOJAz0qSpVK4W764bRCDVT4M6o1yCcFwotVAiWUtL4KipuTUWl4iEcwRXL2ok+\/v3HHvnRA9+SMMYhZMlHGtBVXH\/v3bf\/zZfEk199\/NbzEtiiCoUC+LUQxPTi3VAnTQPxQqc3PXHUFb0MWzU9gSoCpRJmNMpnlreTefIf\/3PdPd\/4ctn19x3zafxB56iLhdf96Q1f6Dr3s9fev3nQ2rOnN1SqMxPSg5NGjbBHmBCJKAOl6+Ec21dj1kACJm1dHVxxctrJPvVP6x754f3frAVyzyEpcjRD7F8bsrSevvKUSy+6\/ubP7yy1LX7u1XdFLptH+o7a5Wm3p2nKHkdCA2boytKGQIUOdQmbMxa00+Pvf+sn6\/\/uH159bdtGCUMfRqdjBWQaTCwZs5atueLKqzM9564+UE51vjNQ1AayExSKJXw3rJZ6CMSyIGqjxywa6uK0ZOLMr9OCzlp\/X\/61p\/\/rqUceWj9RcbYD5f8tJ44lkPcfdS2NqeW\/f9bZq1KzFp0aa1t0QlHEmkfKwnb1mAg0E2maGKaGqbmyJSarca+QLR3Y8XZh385XX\/nZT58dKUy+Dkwd9o9lvyUgB38LMgWts7s6FiTqG+fokVhbfWM6bVh2DCEInGo5n8uO+dXS0FQ+9957fUN7XBg+nNL6fw3k16lnAaErI9TmOEDtcMrpMQFy\/B8GjgM5DuQ4kP+3x\/8MAHWpUzAU7qJ7AAAAAElFTkSuQmCC' alt='img'\/><\/div><div class='stb-caption-content'>update_geopackage_dsid_prp.py<\/div><div class='stb-tool'><\/div><\/div><div class='stb-content'> <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import sys\nfrom osgeo import ogr\n\ndef get_default_scale(geopackage_path, default_enc):\n    # Ouvrir le GeoPackage en mode lecture seule\n    geopackage = ogr.Open(geopackage_path, 0)\n    default_enc = default_enc +'.000'\n\n    if geopackage is not None:\n        # R\u00e9cup\u00e9rer la couche DSID\n        dsid_layer = geopackage.GetLayerByName('DSID')\n\n        # V\u00e9rifier si la couche DSID existe\n        if dsid_layer:\n            # Rechercher la valeur de DSID_CSCL correspondant \u00e0 DSID_DSNM\n            dsid_layer.SetAttributeFilter(f\"DSID_DSNM = '{default_enc}'\")\n            feature = dsid_layer.GetNextFeature()\n            if feature:\n                default_scale = feature.GetField('DSPM_CSCL')\n                \n\n    return default_scale\ndef get_default_purpose(geopackage_path, default_enc):\n    # Ouvrir le GeoPackage en mode lecture seule\n    geopackage = ogr.Open(geopackage_path, 0)\n    default_purpose = '0'\n    default_enc = default_enc +'.000'\n\n    if geopackage is not None:\n        # R\u00e9cup\u00e9rer la couche DSID\n        dsid_layer = geopackage.GetLayerByName('DSID')\n\n        # V\u00e9rifier si la couche DSID existe\n        if dsid_layer:\n            # Rechercher la valeur de DSID_INTU correspondant \u00e0 DSID_DSNM\n            dsid_layer.SetAttributeFilter(f\"DSID_DSNM = '{default_enc}'\")\n            feature = dsid_layer.GetNextFeature()\n            if feature:\n                default_purpose = feature.GetField('DSID_INTU')\n                \n\n    return default_purpose\n\n\ndef delete_empty_tables_in_geopackages_dsid(geopackage_path, default_enc):\n    # R\u00e9cup\u00e9rer la valeur de scale \u00e0 partir de la table DSID\n    default_scale = get_default_scale(geopackage_path, default_enc)\n    default_purpose = get_default_purpose(geopackage_path, default_enc)\n    # Continuer avec le reste du code\n    if default_scale is None:\n        print(\"La valeur par d\u00e9faut de l'\u00e9chelle n'a pas \u00e9t\u00e9 trouv\u00e9e dans la table DSID.\")\n        return\n    default_scale_str = str(default_scale)\n    default_purpose_str = str(default_purpose)\n    # Ouvrir le GeoPackage en mode \u00e9dition\n    geopackage = ogr.Open(geopackage_path, 1)\n\n    if geopackage is not None:\n        # R\u00e9cup\u00e9rer le nombre de tables dans le GeoPackage\n        num_tables = geopackage.GetLayerCount()\n\n        # Liste des tables \u00e0 supprimer\n        tables_to_delete = &#091;]\n        tables_to_update = &#091;]\n\n        # Identifier les tables \u00e0 supprimer\n        for i in range(num_tables):\n            table = geopackage.GetLayerByIndex(i)\n\n            # V\u00e9rifier si la table est vide (aucun enregistrement)\n            if table.GetFeatureCount() == 0:\n                tables_to_delete.append(table.GetName())\n            else:\n                tables_to_update.append(table.GetName())\n\n        # Supprimer les tables\n        for table_name in tables_to_delete:\n            geopackage.DeleteLayer(table_name)\n            print(f\"Table supprim\u00e9e dans {geopackage_path}: {table_name}\")\n\n        # Mettre \u00e0 jour les tables restantes\n        for table_name in tables_to_update:\n            table = geopackage.GetLayerByName(table_name)\n\n            # V\u00e9rifier si le champ 'enc_chart' existe\n            enc_chart_index = table.FindFieldIndex('enc_chart', 1)\n            if enc_chart_index &lt; 0:\n                # Ajouter le champ 'enc_chart' s'il n'existe pas\n                champ1 = ogr.FieldDefn('enc_chart', ogr.OFTString)\n                champ1.SetWidth(50)\n                champ1.SetNullable(True)\n                champ1.SetDefault(default_enc)\n                table.CreateField(champ1)\n\n            # V\u00e9rifier si le champ 'scale' existe\n            scale_index = table.FindFieldIndex('scale', 1)\n            if scale_index &lt; 0:\n                # Ajouter le champ 'scale' s'il n'existe pas\n                champ2 = ogr.FieldDefn('scale', ogr.OFTReal)\n                champ2.SetWidth(10)\n                champ2.SetPrecision(2)\n                champ2.SetDefault(default_scale_str)  # Convertir en nombre flottant\n                table.CreateField(champ2)\n                \n            # V\u00e9rifier si le champ 'purpose' existe\n            purpose_index = table.FindFieldIndex('purpose', 1)\n            if purpose_index &lt; 0:\n                # Ajouter le champ 'purpose' s'il n'existe pas\n                champ3 = ogr.FieldDefn('purpose', ogr.OFTReal)\n                champ3.SetWidth(10)\n                champ3.SetPrecision(2)\n                champ3.SetDefault(default_purpose_str)  # Convertir en nombre flottant\n                table.CreateField(champ3)\n                \n            # Mettre \u00e0 jour les valeurs dans les champs seulement si les champs n'ont pas d\u00e9j\u00e0 de valeurs\n            for feature in table:\n                enc_chart_value = feature.GetField('enc_chart')\n                scale_value = feature.GetField('scale')\n                purpose_value = feature.GetField('purpose')\n\n                # V\u00e9rifier si les champs n'ont pas d\u00e9j\u00e0 de valeurs d\u00e9finies\n                if enc_chart_value is None or scale_value is None or purpose_value is None:\n                    feature.SetField('enc_chart', default_enc)\n                    feature.SetField('scale', default_scale)\n                    feature.SetField('purpose', default_purpose)\n                    table.SetFeature(feature)\n                    \n\n        # Fermer le GeoPackage\n        geopackage = None\n\n    else:\n        print(f\"Impossible d'ouvrir le GeoPackage {geopackage_path} en mode \u00e9dition.\")\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 3:\n        print(\"Usage: python script.py geopackage_path default_enc\")\n        sys.exit(1)\n    \n    geopackage_path = sys.argv&#091;1]\n    default_enc = sys.argv&#091;2]\n\n    delete_empty_tables_in_geopackages_dsid(geopackage_path, default_enc)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/div><\/div><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.nasca.ovh\/downloads\/update_geopackage_dsid_prp.py\" title=\"Vous pouvez t\u00e9l\u00e9charger le script ici.\">Vous pouvez t\u00e9l\u00e9charger le script ici.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copiez le script au m\u00eame emplacement que les scripts de l&rsquo;article original.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez soit remplacer les lignes des fichiers .bat<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>python c:\/testgpkg\/update_geopackage_dsid.py \u00ab\u00a0%output_geopackage%\u00a0\u00bb \u00ab\u00a0!file!\u00a0\u00bb<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">par <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>python c:\/testgpkg\/update_geopackage_dsid_prp.py \u00ab\u00a0%output_geopackage%\u00a0\u00bb \u00ab\u00a0!file!\u00a0\u00bb <\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Soit effacer le script <strong><em>update_geopackage_dsid.py<\/em><\/strong> et renommer <strong><em>update_geopackage_dsid_prp.py<\/em><\/strong> en <strong><em>update_geopackage_dsid.py<\/em><\/strong> ce qui vous \u00e9vite de modifier les fichiers .bat.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ajout d&rsquo;un script Python pour filtrer les couches par \u00ab\u00a0purpose\u00a0\u00bb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour filtrer l&rsquo;affichage de toutes les couches charg\u00e9es dans le projet QGis, vous pouvez utiliser le script suivant:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><div class='stb-container stb-style-download stb-caption-box'><div class='stb-caption'><div class='stb-logo'><img class='stb-logo__image' src='data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN\/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz\/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH\/w\/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA\/g88wAAKCRFRHgg\/P9eM4Ors7ONo62Dl8t6r8G\/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt\/qIl7gRoXgugdfeLZrIPQLUAoOnaV\/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl\/AV\/1s+X48\/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H\/LcL\/\/wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93\/+8\/\/UegJQCAZkmScQAAXkQkLlTKsz\/HCAAARKCBKrBBG\/TBGCzABhzBBdzBC\/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD\/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q\/pH5Z\/YkGWcNMw09DpFGgsV\/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY\/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4\/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L\/1U\/W36p\/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N\/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26\/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE\/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV\/MN8C3yLfLT8Nvnl+F30N\/I\/9k\/3r\/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt\/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi\/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a\/zYnKOZarnivN7cyzytuQN5zvn\/\/tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO\/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3\/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA\/0HIw6217nU1R3SPVRSj9Yr60cOxx++\/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3\/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX\/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8\/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb\/1tWeOT3dvfN6b\/fF9\/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR\/cGhYPP\/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF\/6i\/suuFxYvfvjV69fO0ZjRoZfyl5O\/bXyl\/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o\/2j5sfVT0Kf7kxmTk\/8EA5jz\/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5\/wAAgOkAAHUwAADqYAAAOpgAABdvkl\/FRgAADcFJREFUeNrsmnmQXNV1xn\/3Lf1eb9OzdM+qGe2DFgZFIGQIizFGBpRAgQUhmDUOqQI7qYIirtguAgHbyBUbO3FsEpcTIixMICKgsDgskYyNWGwEaLEQoA1mn+np6Z6ZXt9288d9o8E2IhKSUymXXtWrN931+vX97vnOOd93eoSUkt+FQ+N35DgO5DiQ39JhfNCbQojfeC+ia0RtC8\/zKdUclvUspVQus3hJD\/nxMfoGhwkqU3zi\/NV2NF7X+OSjD2WSDem6IJAWgKGJ2kR+fPLiNX+UrZaL45ue+XHViCbo7GijpaWVHdu3kYhH2frGTmzTQAiB5\/u4fvAba\/mgAmUczS4IIfA9j+pUIbpo4bwerLozS1b6FLtjwfJP\/sU3WnNTtVix7JgEAUnLcNPJSAlqw6X+\/W\/0nHrGa8ItbRkZHNjpNjVVP2jzjjoih3VIKE5MGF2zu1bH5yy9WrZ0n5N1zMzOgTFGXxrAK1XA80FK8APwPAuBZdrRxpbGhiWL5i6+qi0psk0L9m1u0ksP\/PzFF5+ORdu8j7ypHxSmD6eWR6nmsmJZz6KTV11y+z6v8Q\/2lURd\/0gOr1gEASBACAUiEBAEClQQQAB4EnyJmUgxb14ny+emJhdEhp7a9Oj6r7z82vbdlqGjadoRUeuIgFimQaXqcO6qVZfPP++P7970zviCvXv2EggDYgkQEiRhFMK\/gzAivgShhfVFqKsPeGDE6jj1lKV8+pTY3lf+\/e9v+4+NTz1sGTpSSpxjDUQHIgL90muuvTl65pV3\/dvz22Pl0QHwqmqBdh1omtp1yftASBUFCUgdhD4DBB00AzQbtCQdJ53IFy9bUHln\/V\/f\/t17f\/BtobbgsIAcdvnVBNql11x7q7HqhrXrt\/bFyq4Ltg1GBHwPnKpa7K9uSUgzDTQLTAuMXzvNOMQbobmTgckodzyvRRfe9J27P3\/TDV8QR7K+w71x1YWrr01ccMOdD768z3Q8D+oaIJoEwwRdA68CgaeiIlA5IoR6rZkKsG6BFlGgtBBErAHqZ0FmNjS3MZ6rcMcjA+aCq+6647I1l15\/TIEsnNu1fPEVf\/61B7b2216tBpapAMTqwIqCpgMBuI56pBAc5JcIgei2AqJH1GnGQhDt0NQJdRnFX1Ekv38\/X3\/kHfvsz962dkn33BXHBIita6k1N976lScOVNvL+TxYEbU4ISBiQaIhBKNB4IAMFO\/F+2hlRn6VVmZ0BkS6E1Jp0CRUJ6A4BrLE8N5e1m+tNt\/wl3d+LaJRd9RAzr\/o4iv3pntW7enPqcV6rtps3QijkoREWi2QAHxXRUDTFRjdACMKhq0iEYlCvAEa2iHTCXXNoAmoFmBqFKbyUKtCRPCL7ft5W19yzqcvv\/yqowLSEDXTs89aff2W\/ZMRKXTQTdUXPE+BMUy104l6RQ3DVGCmaRcJIxCJQTSuSnS8HhrboLkTUs1qBZVxmByFYgGcmqp8AgLf55lt2Uj32Zdc15CwMkcMZLr4nnb2OasGY3NOGslOQuCD1ELa6ApMEIBpQiwO9RlIpsE01FlzYXAA+nphYBgGRqEqoKkDWmere5FQzYcg8uBUQPozC9AE\/UN5ekVHz2lnnPVJAP0QUsY4hPpAB635hGXn7iiaUemEVPJDBaELRR3fn8kBTVfn2ADs3UU608Q5n+gJfq+7q2hEkuweLie39DliXxHIpBSdSuMwOQKlvIoE8mDFRqrK51Wr7B4OYiuWnf4p45n\/3uBJ6R+R1upsb+5KdC1ZPjRUUHmhh7yXngLkS1V28VUuWLb68vwEl328x7vzxst3z25t3O041UKlUsZz\/fqi0Jf+8w5v0Xef7dXdhAVuXtHJdZQqQMxEIwjRiIDBbJFgVueSlkx9+0C20HdEQKxEalb\/hN+RHehXOy+tsGfoICKqZ7ieAumbIAX09XLN6tO9H9y8ZrOpadt937ftaMw2IlHGstmRYGL8vS+ubBwW1eCcbz28UyedVJ9HqggRyhv5vqjogqHcBOX5mXnp1vZ5hwKiHQpdqr5pbtUVLf5oPxRzMDEGk+NQmoRqRckOEYHAAC+AwX46jTJ3XX3udsvQt2u6niyVy9ozzz777qZNmw7ohqEnG9PJ4aHc63+2IrVzaaMLY7kwp3QwNBVhXczQiwC0AK84RWDVZ1pa2+dHxBHI+PbWNM2tbe0emqBcBGmDqIKhQyXs0tN9wTRVjozkuOSiE91ZDfFfOq5re57v33LLLU+88MILL0spWbly5elr1679w3hdg21r3q4LTuk4cdejbxs0N4AIVbEfyn4pFX0DBwIXfJeJsosVT2Yy6frDr1rxRBzTsut8N1C77fvqwbUa1EpQmlDRKYxCIQfj41Aq0t3ZUiqWSmXTjMQefvjhnevWrXs+lUpN1tXVTT700EPPb968eXdbW2scoU0snF0\/RSwOEQNMoapV4IDngF8BWQXpKpCapOh4eGh2Ll84fCD7DvQKTdc06fvKR\/jB+67Tpw+uD46jzkBD001ZLleo1WpaLpcrtbe312zbJpFI0N3d7dRqtXIsFtNsOyo14fqYDkQkmBI0XxUS6QAuCB90qShnGkhdBylFzUMcNrUcX0rfccqGJpTkkHJGemtGqJ1CEWjaYCchoTFWFvHAd+yR0dHKeeedd1JbW9uSe++9902AtWvXLlq2bNlix3EqqWQyvufA1iQTg+CmVNWLWWCb4QZ5SiH4QWjGfBJxG6EJT36Axv7QqpUdHc4m53gqH9BVH9EjKi+08KqHeWInIGPz3N5y5PpPRU7Ij2RfyLS2NS6PRP5kzZo1L5umycqVK0+fNWtWKvC93JSr9Tz3zphFRwvogXKMEUt9l9BnzJgbVsaKT6o+xlilWDhiz54bG+1tCGp5YnUNyECp14NSPIzK9NWwYXYLL40GbHyPkz8zp360f3jorVRjuu6mz33uoqhtS8dxKp7r5QzT6P76gz9esW2kBMuWQtVRKsBH5YOuK2GqaYoJToDWbBExKpPZ4cHeI9ZaTnmqvz1lDqcbGkGG0RBm6BX1UAFbilbJDDTPIuhcxB0bJuwf7qhd0JhuPNOUTiQ3MlgcHx0q6tI1y7XaGV\/6\/mMX3rPuKZtUQjWKmAmJKMQjilo6qslqEiwDYhFaZ6exykO92YH+A0cckYGBwV53vO\/t1ubuxWO5ogq5mAagK2MUTUB9M6RnQTQFEgo5nb\/63jZ7Q2dwxkUrO09ePDc9JUSZ7W\/9PLlhy87ortGqoHOhyoH8BNQnFQBfU0VEhtJfovIDQUeTRXTXuwdGsvm+IwZS8ynk3nvzxRNWrLz4l\/uyGlKbAWPYEK1TIJo6lCdxfZgcA6+Al4rxyr4R8crubTFMPQZVqGYhakDnQtX0KhOQL4Q6TVUmNA1cpXzRNZAawogwP1IJ9r7005\/VoPCRZPxrL2\/ZPD9e3d+STs8oXyOqLG6qBdIdSsK7nuopuUHIj4BbhXQjzOmCznaY1QlzFkBjE1QKKieEptTuVBEcX\/UqXSg6aeHgQkpaMnHmTR048PqLWzZ\/ZD8ykM3vGN31kyc\/fupcVal0G2IpaGiFTDskGxQd8iOQG4CJUaiVlX5ya0oMTjdTNyynTlndE4T0qVSgWFHPCQK1Iss46P1PazYZfOaxJ\/vzk9uPxiF6Gzc8eP\/HMvnd3Yvngx6HhhbIdCiX53gKxNgAFLJQKYemy1eJ7PsKgOMoCaJHVJXzQ60WhHlQqkDFC1\/Lg1ZhTlcjHxt\/8+3HfvTAOlUBjsLqFqbKuzd876v33Hh+V7W+eyEkmpX78zzIj4aRGINqWe289FUTDRuZUsdeOFExwl4B+E44hfTU\/aUK1EJL4AVEklGuaqe28W\/vvGeiWtt9LKYozitbt23c+8R37rvtmh6sTBNM1WAiC+NDSmvVyqoKSVfJjMBXC\/RcpZ2kFyqD0AIYlhoxShlqudDflGpQdiBicV1PM333ffNffvHG9scA51gAkUDuX++779vu0\/c8\/uUL01jOJAz0qSpVK4W764bRCDVT4M6o1yCcFwotVAiWUtL4KipuTUWl4iEcwRXL2ok+\/v3HHvnRA9+SMMYhZMlHGtBVXH\/v3bf\/zZfEk199\/NbzEtiiCoUC+LUQxPTi3VAnTQPxQqc3PXHUFb0MWzU9gSoCpRJmNMpnlreTefIf\/3PdPd\/4ctn19x3zafxB56iLhdf96Q1f6Dr3s9fev3nQ2rOnN1SqMxPSg5NGjbBHmBCJKAOl6+Ec21dj1kACJm1dHVxxctrJPvVP6x754f3frAVyzyEpcjRD7F8bsrSevvKUSy+6\/ubP7yy1LX7u1XdFLptH+o7a5Wm3p2nKHkdCA2boytKGQIUOdQmbMxa00+Pvf+sn6\/\/uH159bdtGCUMfRqdjBWQaTCwZs5atueLKqzM9564+UE51vjNQ1AayExSKJXw3rJZ6CMSyIGqjxywa6uK0ZOLMr9OCzlp\/X\/61p\/\/rqUceWj9RcbYD5f8tJ44lkPcfdS2NqeW\/f9bZq1KzFp0aa1t0QlHEmkfKwnb1mAg0E2maGKaGqbmyJSarca+QLR3Y8XZh385XX\/nZT58dKUy+Dkwd9o9lvyUgB38LMgWts7s6FiTqG+fokVhbfWM6bVh2DCEInGo5n8uO+dXS0FQ+9957fUN7XBg+nNL6fw3k16lnAaErI9TmOEDtcMrpMQFy\/B8GjgM5DuQ4kP+3x\/8MAHWpUzAU7qJ7AAAAAElFTkSuQmCC' alt='img'\/><\/div><div class='stb-caption-content'>filter_purpose.py<\/div><div class='stb-tool'><\/div><\/div><div class='stb-content'> <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Importer le module QGIS\nfrom qgis.core import QgsProject, QgsMapLayerType\n\n# D\u00e9finir le valeur de l'attribut \"purpose\" \u00e0 filtrer\nvaleur_purpose = 3\n\n# Obtenir le projet actif\nprojet = QgsProject.instance()\n\n# Obtenir la liste des couches charg\u00e9es dans le projet\ncouches = projet.mapLayers().values()\n\n# Parcourir toutes les couches\nfor couche in couches:\n    # V\u00e9rifier si la couche est de type vecteur\n    if couche.type() == QgsMapLayerType.VectorLayer:\n        # V\u00e9rifier si la couche a un champ nomm\u00e9 \"purpose\"\n        if couche.fields().indexFromName('purpose') != -1:\n            # V\u00e9rifier si le nom de la couche commence par l'un des pr\u00e9fixes sp\u00e9cifi\u00e9s\n            if couche.name().startswith(('pt_', 'li_', 'pl_')):\n                # D\u00e9finir le filtre sur l'attribut \"purpose\" \u00e9gal \u00e0 la valeur sp\u00e9cifi\u00e9e\n                filtre = f'\"purpose\" = {valeur_purpose}'\n                couche.setSubsetString(filtre)\n                print(f\"Filtre d\u00e9fini pour la couche {couche.name()}\")\n            else:\n                print(f\"La couche {couche.name()} ne commence pas par 'pt_', 'li_', ou 'pl_'\")\n        else:\n            print(f\"La couche {couche.name()} n'a pas d'attribut 'purpose'\")\n    else:\n        print(f\"La couche {couche.name()} n'est pas une couche vecteur\")\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/div><\/div><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.nasca.ovh\/downloads\/filter_purpose.py\" title=\"Vous pouvez t\u00e9l\u00e9charger le script ici.\">Vous pouvez t\u00e9l\u00e9charger le script ici.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour \u00e9liminer les filtres sur Purpose vous pouvez  utiliser le m\u00eame script que pour l&rsquo;\u00e9chelle (unfilter.py)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Le projet de base de donn\u00e9es S57 avec Geopackage est arriv\u00e9 \u00e0 son terme. Nous <\/strong> travaillons maintenant sur la mise en place d&rsquo;une proc\u00e9dure \u00e9quivalente en utilisant une base de donn\u00e9es PostgreSQL\/Postgis. Aidez-nous \u00e0 mener \u00e0 terme ce projet!<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><div class=\"give_notices give_errors\" id=\"give_error_warning\">\n\t\t\t\t\t\t<p class=\"give_notice give_warning\" data-dismissible=\"\" data-dismiss-interval=\"5000\" data-dismiss-type=\"\">\n\t\t\t\t\t\t\tCe formulaire n\u2019est pas publi\u00e9.\n\t\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\n\t\t\t\t\t<\/div><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s la publication de la premi\u00e8re partie du travail sur les Geopackages, le travail avec PostgreSQL\/Postgis nous a permis une s\u00e9rie d&rsquo;avanc\u00e9es compl\u00e9mentaires. Vous trouverez dans cet article la mise \u00e0 jour de la proc\u00e9dure d&rsquo;import&hellip;<\/p>\n","protected":false},"author":1,"featured_media":12640,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[62],"tags":[1478,201,58,85],"class_list":["post-12638","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-qgis-2","tag-geopackage","tag-import","tag-qgis","tag-s57"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2024\/03\/purpose5.jpg?fit=1200%2C860&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p6XU0A-3hQ","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/12638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/comments?post=12638"}],"version-history":[{"count":0,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/12638\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media\/12640"}],"wp:attachment":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media?parent=12638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/categories?post=12638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/tags?post=12638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}