<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Raymond Lay</title>
    <description>The latest articles on DEV Community by Raymond Lay (@bordoray).</description>
    <link>https://dev.to/bordoray</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F934861%2Fa734c0c2-1e1a-4cbb-831c-6fe81c8cebd6.png</url>
      <title>DEV Community: Raymond Lay</title>
      <link>https://dev.to/bordoray</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bordoray"/>
    <language>en</language>
    <item>
      <title>Seamlessly Compare Maps on QGIS with the QMapCompare Plugin</title>
      <dc:creator>Raymond Lay</dc:creator>
      <pubDate>Sat, 22 Feb 2025 02:10:46 +0000</pubDate>
      <link>https://dev.to/mierune/seamlessly-compare-maps-on-qgis-with-the-qmapcompare-plugin-3186</link>
      <guid>https://dev.to/mierune/seamlessly-compare-maps-on-qgis-with-the-qmapcompare-plugin-3186</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When working with QGIS, you often switch between basemaps, but  comparing small differences between maps can be challenging when only one map can be displayed at a time.&lt;/p&gt;

&lt;p&gt;Web tools like Japan's "&lt;a href="https://ktgis.net/kjmapw/" rel="noopener noreferrer"&gt;Past/Present Map on the Web&lt;/a&gt;" and France Mapping Agency (IGN)'s "&lt;a href="https://remonterletemps.ign.fr/comparer/?lon=2.300808&amp;amp;lat=48.856847&amp;amp;z=14.4&amp;amp;layer1=1&amp;amp;layer2=8&amp;amp;mode=dub" rel="noopener noreferrer"&gt;Remonter le temps&lt;/a&gt;" enable users to compare different styles of maps easily in various ways. &lt;/p&gt;

&lt;p&gt;However, QGIS has lacked a stable feature for map comparison until now! This post introduces &lt;strong&gt;QMapCompare&lt;/strong&gt;, a new plugin that enables users to compare multiple maps directly within QGIS using various visualization methods.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgu1gim3rtgowm3nkeq1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgu1gim3rtgowm3nkeq1.gif" alt="QMapCompare overview" width="500" height="237"&gt;&lt;/a&gt;&lt;br&gt;QMapCompare overview. Created by editing &lt;a href="https://maps.gsi.go.jp/development/ichiran.html" rel="noopener noreferrer"&gt;GSI Tiles&lt;/a&gt;
  &lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;First, ensure you are using QGIS version 3.34 or later.&lt;br&gt;
Then, you can install plugin by searching &lt;code&gt;QMapCompare&lt;/code&gt; on QGIS plugin manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Once plugin installed, a new icon will appear on the toolbar.&lt;br&gt;
Clicking the icon will toggle the QMapCompare panel on the left bottom of QGIS window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5gwkv1l5dr4pxvth7mw1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5gwkv1l5dr4pxvth7mw1.png" alt="QMapCompare interface" width="800" height="402"&gt;&lt;/a&gt;&lt;br&gt;QMapCompare interface. ©︎&lt;a href="https://www.openstreetmap.org/copyright/ja" rel="noopener noreferrer"&gt;OpenStreetMap&lt;/a&gt; contributors
  &lt;/p&gt;

&lt;p&gt;QMapCompare provides several ways to compare maps. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgelvrhx5qlv92zld3k3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgelvrhx5qlv92zld3k3p.png" alt="QMapCompare interface" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select layers you want to compare (1), and choose the following comparison method (2-5):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. &lt;strong&gt;Select compare layers&lt;/strong&gt; (multiple selections allowed)&lt;/li&gt;
&lt;li&gt;2. &lt;strong&gt;Mirror&lt;/strong&gt;: Displays two maps side by side&lt;/li&gt;
&lt;li&gt;3. &lt;strong&gt;Vertical Split&lt;/strong&gt;: Divides the map vertically&lt;/li&gt;
&lt;li&gt;4. &lt;strong&gt;Horizontal Split&lt;/strong&gt;: Divides the map horizontally&lt;/li&gt;
&lt;li&gt;5. &lt;strong&gt;Lens&lt;/strong&gt;: Check compare layers with a circle around the mouse cursor&lt;/li&gt;
&lt;li&gt;6. &lt;strong&gt;Stop&lt;/strong&gt;: Ends the comparison&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison Methods Overview
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Mirror View
&lt;/h3&gt;

&lt;p&gt;The mirror mode places a duplicate of the map canvas on the right side of the map canvas. &lt;/p&gt;

&lt;p&gt;This is useful when comparing base maps with satellite imagery or other data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwny9kvrj55vq6dew88qj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwny9kvrj55vq6dew88qj.png" alt="QMapCompare Mirror view" width="800" height="404"&gt;&lt;/a&gt;&lt;br&gt;Mirror view. Created by editing &lt;a href="https://maps.gsi.go.jp/development/ichiran.html" rel="noopener noreferrer"&gt;GSI Tiles&lt;/a&gt;
  &lt;/p&gt;

&lt;h3&gt;
  
  
  Split View
&lt;/h3&gt;

&lt;p&gt;The split mode divides the map into two sections, showing different layers side by side.&lt;/p&gt;

&lt;p&gt;You can choose either a vertical or horizontal split, depending on your needs.&lt;/p&gt;

&lt;p&gt;This is may be useful for comparing building accuracy in OpenStreetMap with government-provided data as example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F6c4873527fd24450a0163b40e8e173f2%2F19fadd788a934351aedbfe066fbed516%2Fhowto_plugin_q-map-compare_5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F6c4873527fd24450a0163b40e8e173f2%2F19fadd788a934351aedbfe066fbed516%2Fhowto_plugin_q-map-compare_5.png" alt="QMapCompare Split view" width="800" height="383"&gt;&lt;/a&gt;&lt;br&gt;Split view. Created by editing &lt;a href="https://maps.gsi.go.jp/development/ichiran.html" rel="noopener noreferrer"&gt;GSI Tiles&lt;/a&gt; and  ©︎&lt;a href="https://www.openstreetmap.org/copyright/ja" rel="noopener noreferrer"&gt;OpenStreetMap&lt;/a&gt; contributors
  &lt;/p&gt;

&lt;h3&gt;
  
  
  Lens View
&lt;/h3&gt;

&lt;p&gt;Lens mode displays a circular preview of the comparison layers around the mouse cursor.&lt;/p&gt;

&lt;p&gt;As you move the cursor, the preview updates in real time.&lt;/p&gt;

&lt;p&gt;This is especially useful for detailed comparisons of specific locations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F6c4873527fd24450a0163b40e8e173f2%2F3770ee4b838a469c8d295054b9b53217%2Fhowto_plugin_q-map-compare_9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.microcms-assets.io%2Fassets%2F6c4873527fd24450a0163b40e8e173f2%2F3770ee4b838a469c8d295054b9b53217%2Fhowto_plugin_q-map-compare_9.gif" alt="QMapCompare Lens view" width="353" height="168"&gt;&lt;/a&gt;&lt;br&gt;Lens view. Created by editing &lt;a href="https://maps.gsi.go.jp/development/ichiran.html" rel="noopener noreferrer"&gt;GSI Tiles&lt;/a&gt;
  &lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Use Cases
&lt;/h2&gt;

&lt;p&gt;QMapCompare is valuable for various use cases as below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comparing historical aerial photographs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxtq3ljd5s4at4q8f9l5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxtq3ljd5s4at4q8f9l5n.png" alt="Aerial Photo Comparison (1987-1990)" width="800" height="405"&gt;&lt;/a&gt;&lt;br&gt;Tokyo Aerial Photo Comparison between 2024(left) and 1987-1990(right).&lt;br&gt;Created by editing &lt;a href="https://maps.gsi.go.jp/development/ichiran.html" rel="noopener noreferrer"&gt;GSI Tiles&lt;/a&gt;
  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyzing pre- and post-disaster images&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4qz1eq7632asneuy3p2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4qz1eq7632asneuy3p2i.png" alt="Disaster Impact Analysis" width="800" height="339"&gt;&lt;/a&gt;&lt;br&gt;Aerial Photo Comparison of Before 2021 Atami Landslip Disaster (left) and after(right).&lt;br&gt;Created by editing &lt;a href="https://maps.gsi.go.jp/development/ichiran.html" rel="noopener noreferrer"&gt;GSI Tiles&lt;/a&gt;
  &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;QMapCompare is a powerful tool for comparing different maps and datasets within QGIS. With this plugin, you can easily:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze time-series data (e.g., pre- and post-disaster maps)&lt;/li&gt;
&lt;li&gt;Evaluate data accuracy (e.g., comparing OpenStreetMap with government maps)&lt;/li&gt;
&lt;li&gt;Support decision-making (e.g., verifying different analytical results and styles)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As this is a newly released plugin, there may still be some bugs. If you encounter any issues, please report them on our &lt;a href="https://github.com/MIERUNE/qgis-plugin-qmapcompare/issues" rel="noopener noreferrer"&gt;GitHub Issues page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Your feedback will help improve the tool!&lt;/p&gt;

</description>
      <category>qgis</category>
      <category>python</category>
    </item>
    <item>
      <title>Retrieve satellite earth observation images easily with QGIS JAXA Earth API Plugin</title>
      <dc:creator>Raymond Lay</dc:creator>
      <pubDate>Wed, 26 Jun 2024 05:52:58 +0000</pubDate>
      <link>https://dev.to/mierune/retrieve-satellite-earth-observation-images-easily-with-qgis-jaxa-earth-api-plugin-1e7j</link>
      <guid>https://dev.to/mierune/retrieve-satellite-earth-observation-images-easily-with-qgis-jaxa-earth-api-plugin-1e7j</guid>
      <description>&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;Climate is changing rapidly, and these changes must be monitored continuously, especially with satellite observations. &lt;/p&gt;

&lt;p&gt;The Japan Aerospace Exploration Agency (JAXA) publishes Earth observation images, such as temperature, precipitation amount, vegetation, etc., which can be retrieved using the JAXA Earth API.&lt;/p&gt;

&lt;p&gt;This post describes how to retrieve georeferenced observation images using the JAXA Earth API plugin for QGIS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbe2wlzewt6aicu3ogswy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbe2wlzewt6aicu3ogswy.png" alt="JAXA Earth API plugin overview" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  JAXA Earth API overview
&lt;/h2&gt;

&lt;p&gt;JAXA Earth API is a satellite data distribution service, written in Python and javascript.&lt;br&gt;
Description and available dataset are detailed in the official website : &lt;a href="https://data.earth.jaxa.jp/" rel="noopener noreferrer"&gt;https://data.earth.jaxa.jp/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observation images can be retrieved easily, but it would be better to overlay onto a basemap, that is why the use of a Geographic Information System (GIS) such as QGIS may be useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The use of QGIS JAXA Earth API Plugin
&lt;/h2&gt;

&lt;p&gt;QGIS is an Opensource GIS software, and we can gather and analyse geographic data easily.&lt;br&gt;
QGIS is also customizable using python scripts or adding plugins on.&lt;br&gt;
Here is a procedure to install QGIS JAXA Earth API Plugin and retrieve satellite data.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. On QGIS and add OpenStreetMap basemap
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open QGIS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basemap should be used as background to show map context.&lt;br&gt;
It can be added on QGIS as XYZ tile.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On browser, right click on XYZ tiles&lt;/li&gt;
&lt;li&gt;New connection…&lt;/li&gt;
&lt;li&gt;Put a name to this connection and input &lt;code&gt;https://tile.openstreetmap.org/{z}/{x}/{y}.png&lt;/code&gt; link as URL&lt;/li&gt;
&lt;li&gt;OK&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28a9filmsu15ju12ou76.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28a9filmsu15ju12ou76.png" alt="OSM basemap layer" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OpenStreetMap should be displayed on map canvas.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Install JAXA Earth API Plugin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Menu -&amp;gt; Plugins -&amp;gt; Manage plugins...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrt66vwhi4y0cvi4r29k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrt66vwhi4y0cvi4r29k.png" alt="Plugin menu" width="800" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On plugin manager, search for &lt;code&gt;JAXA&lt;/code&gt; and install
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihgxt6c7qb01enyjbuaa.png" alt="Install JAXA earth API Plugin" width="800" height="403"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once plugin installed, JAXA Earth API icon should appear on tool bar&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; By clicking on plugin icon, plugin dialog should appear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzn300j6p6sw7lwmb0kv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzn300j6p6sw7lwmb0kv1.png" alt="Plugin_open" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Plugin use example
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;1. Choose target dataset (here precipitation rate monthly)&lt;/li&gt;
&lt;li&gt;2. Choose target period&lt;/li&gt;
&lt;li&gt;3. Choose target map extent

&lt;ul&gt;
&lt;li&gt;By clicking on &lt;code&gt;Map Canvas Extent&lt;/code&gt; button, map current is set&lt;/li&gt;
&lt;li&gt;Custom extent can also be set by clicking on &lt;code&gt;Draw on Canvas&lt;/code&gt; button&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;4. Push &lt;code&gt;Launch&lt;/code&gt; button to load data&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdzw1grrpjvt4ce8by7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdzw1grrpjvt4ce8by7f.png" alt="Plugin setting" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dataset is loaded as one layer per month!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8rzrk9jh71jl4xsqueeh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8rzrk9jh71jl4xsqueeh.png" alt="Result" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  At last
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Regarding results, precipitation rate evolution can be checked monthly.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Animation of this evolution can be made using &lt;a href="https://plugins.qgis.org/plugins/timemanager/" rel="noopener noreferrer"&gt;TimeManager&lt;/a&gt; plugin&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you see any bug or have an enhancement idea, feel free to put an issue here :&lt;br&gt;
&lt;a href="https://github.com/MIERUNE/qgis-jaxa-earth-plugin" rel="noopener noreferrer"&gt;https://github.com/MIERUNE/qgis-jaxa-earth-plugin&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>qgis</category>
      <category>satellite</category>
      <category>climatechange</category>
      <category>foss4g</category>
    </item>
    <item>
      <title>Get started with PyQGIS 03 - Manipulate vector layers with QGIS python console</title>
      <dc:creator>Raymond Lay</dc:creator>
      <pubDate>Wed, 31 Jan 2024 10:17:52 +0000</pubDate>
      <link>https://dev.to/mierune/get-started-with-pyqgis-03-manipulate-vector-layers-with-qgis-python-console-3khm</link>
      <guid>https://dev.to/mierune/get-started-with-pyqgis-03-manipulate-vector-layers-with-qgis-python-console-3khm</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/mierune/get-started-with-pyqgis-02-manage-layers-with-qgis-python-console-mhc"&gt;On the previous chapter&lt;/a&gt;, we get started with vector layer classes called &lt;code&gt;QgsVectorLayer&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It could be set as follow:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;file_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your/path/data/target_file.shp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;layer_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my fantastic layer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# declare a new layer and specify file_path and layer name
&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QgsVectorLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ogr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# import declared layer 
&lt;/span&gt;&lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;addMapLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;and layer name can be retrieved as follow :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# each layer is a QgsVectorLayer object
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;mapLayers&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
     &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Regarding &lt;a href="https://qgis.org/pyqgis/master/core/QgsVectorLayer.html" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, &lt;code&gt;QgsVectorLayer&lt;/code&gt; class is full of functions. Let check some basic functions with QGIS python console!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Open script editor of Python Console
&lt;/h2&gt;

&lt;p&gt;In Python console we can launch commands one by one, but we need several commands to manage layers.&lt;br&gt;
To run those at once, we need to open the script editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1. Open Python console in QGIS
&lt;/h3&gt;

&lt;p&gt;As for the first chapter :&lt;br&gt;
Open QGIS, menu -&amp;gt; Plugins -&amp;gt; Python Console&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8bbeipl8but0ghdhg5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8bbeipl8but0ghdhg5v.png" alt="Python console"&gt;&lt;/a&gt;&lt;br&gt;
Or use shortcut &lt;code&gt;Ctrl+Alt+P&lt;/code&gt; (Windows) &lt;code&gt;command+option+P&lt;/code&gt; (mac)&lt;/p&gt;

&lt;p&gt;Python console open usually at the bottom of QGIS frame&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem395ftw347mv0beul3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem395ftw347mv0beul3n.png" alt="Python console on QGIS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2. Open Script Editor
&lt;/h3&gt;

&lt;p&gt;Click on the &lt;code&gt;Show Editor&lt;/code&gt; button to open script editor as below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqo0gbrsrfqkg1jqbra8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqo0gbrsrfqkg1jqbra8.png" alt="Editor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Vector Layer related commands
&lt;/h2&gt;

&lt;p&gt;Import the vector layer you want, here is Japan Prefectures&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2m326w91pyd1ryn6vi2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2m326w91pyd1ryn6vi2.png" alt="Japan prefectures layer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1. Retrieve target layer by name
&lt;/h3&gt;

&lt;p&gt;As last chapter, we will retrieve layer by name (here &lt;code&gt;japan_pref&lt;/code&gt; ), by&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;mapLayersByName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;japan_pref&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# check
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Result : &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;QgsVectorLayer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;japan_pref&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ogr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  2.2. Retrieve layer extent
&lt;/h3&gt;

&lt;p&gt;Simply add &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer_extent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;extent: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer_extent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The result should be a &lt;code&gt;QgsRectangle&lt;/code&gt; object.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;extent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;QgsRectangle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;122.93372516199046629&lt;/span&gt; &lt;span class="mf"&gt;24.04561582899132333&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;148.89439264601270452&lt;/span&gt; &lt;span class="mf"&gt;45.55724341400912891&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Coordinates looks to be in geographic system, let's check.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3. Retrieve layer extent
&lt;/h3&gt;

&lt;p&gt;Simply write &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer_crs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sourceCrs&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CRS: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer_crs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The result should be the WGS 84 (EPSG:4326) reference system.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;CRS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;QgsCoordinateReferenceSystem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;EPSG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4326&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdoa0d4cx2tx5appsfj4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdoa0d4cx2tx5appsfj4d.png" alt="layer crs and extent"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4. Retrieve the number of features of the target layer
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;featureCount()&lt;/code&gt; method can do it.&lt;br&gt;
you can combine with &lt;code&gt;name()&lt;/code&gt; method to write a clean message &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; layer has &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;featureCount&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; features.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And here is the number of Japan prefectures:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;japan_pref&lt;/span&gt; &lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="mi"&gt;47&lt;/span&gt; &lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  2.5. Retrieves vector layer fields
&lt;/h3&gt;

&lt;p&gt;You can try &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer_fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer_fields&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Result is an unreadable code, BUT!&lt;br&gt;
class name &lt;code&gt;QgsFields&lt;/code&gt; makes us to find a way to solve it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;qgis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_core&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QgsFields&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mh"&gt;0x0000024950231160&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Let's check documentation. &lt;br&gt;
You can check by searching &lt;em&gt;QgsFields&lt;/em&gt; with your favourite search engine.&lt;br&gt;
Regarding, &lt;a href="https://qgis.org/pyqgis/3.0/core/other/QgsFields.html" rel="noopener noreferrer"&gt;Qgs Fields Documentation &lt;/a&gt; &lt;code&gt;names&lt;/code&gt; method may be fine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpp8bj8j8lm7gp9x6xhxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpp8bj8j8lm7gp9x6xhxb.png" alt="QgsFields"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's try!&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer_fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer_fields&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;names&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I got it !&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fviktqfn5219jbzplmjpy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fviktqfn5219jbzplmjpy.png" alt="layer fields"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Check output PyQgis class and its methods, a good pratice to make you grow up in PyQGIS
&lt;/h2&gt;

&lt;p&gt;In this chapter, &lt;code&gt;QgsVectorLayer&lt;/code&gt; basic methods has been used, and regarding documentation, many other usages can be done.&lt;/p&gt;

&lt;p&gt;The last method to retrieve field is a combination of &lt;code&gt;QgsVectorLayer&lt;/code&gt; and &lt;code&gt;QgsFields&lt;/code&gt;.&lt;br&gt;
However, we saw that when we hit to an unknown class, we can still moving on by checking documentation of this class, and find the good method easily.&lt;/p&gt;

&lt;p&gt;This is a good way to understand easily a huge library such as PyQGIS.&lt;/p&gt;

</description>
      <category>qgis</category>
      <category>python</category>
      <category>pyqgis</category>
    </item>
    <item>
      <title>Solving QGIS plugin conflict</title>
      <dc:creator>Raymond Lay</dc:creator>
      <pubDate>Thu, 02 Nov 2023 04:19:30 +0000</pubDate>
      <link>https://dev.to/mierune/solving-qgis-plugin-conflict-4c8f</link>
      <guid>https://dev.to/mierune/solving-qgis-plugin-conflict-4c8f</guid>
      <description>&lt;p&gt;QGIS is full of useful plugins which enlarges scope of location data analysis.&lt;/p&gt;

&lt;p&gt;However, sometimes plugin install does not work due to the following error :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Plugin 'qgis-plugx-plugin' could not be loaded due to an error calling its classFactory() method

ImportError: cannot import name 'write_json' from 'utils' (/Users/xxxxxx/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/qgis2web/utils.py)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This error occured when trying to install &lt;code&gt;qgis-plugx-plugin&lt;/code&gt; but error refers to another plugin called &lt;code&gt;qgis2web&lt;/code&gt; in this example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8d8gvb59x01atxivyuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8d8gvb59x01atxivyuv.png" alt="error plugin conflict" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source : &lt;a href="https://github.com/MIERUNE/qgis-plugx-plugin/issues/160"&gt;https://github.com/MIERUNE/qgis-plugx-plugin/issues/160&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This short article show 2 ways to solve this conflict.&lt;/p&gt;

&lt;h2&gt;
  
  
  Way 1 : Turn off one of contentious plugins
&lt;/h2&gt;

&lt;p&gt;In plugin manager, turn off one of the plugins source of conflict.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8phqhrq3l963up0ng07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8phqhrq3l963up0ng07.png" alt="Plugin manager" width="495" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then relaunch QGIS.&lt;br&gt;
To use the other one, check/uncheck contentious plugins again and relaunch plugin.&lt;/p&gt;

&lt;p&gt;This is not really a solution, but to solve it sustainably, you can ask plugin developer(s) by throwing an issue on plugin repository.&lt;br&gt;
You can usually access to bug tracker through QGIS plugin manager, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxiehhzo8fijn34b284qe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxiehhzo8fijn34b284qe.png" alt="throw issue" width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Way 2 : avoid using utils.py (for plugin developers)
&lt;/h2&gt;

&lt;p&gt;Above error message shows that &lt;code&gt;utils&lt;/code&gt; module seems to be source of conflicts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[...]
ImportError: cannot import name 'write_json' from 'utils' [...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;utils.py&lt;/code&gt; files from various plugins looks to be compiled in QGIS core system, and having the same module name may be source of conflict.&lt;br&gt;
If you are developer of the issuing plugin, a way to solve this problem is simply to rename such a global name in root folder e.g: &lt;code&gt;utils.py&lt;/code&gt; to &lt;code&gt;yourpluginname_utils.py&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjtbn65smb5m9uxu1a9i0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjtbn65smb5m9uxu1a9i0.png" alt="Solving" width="640" height="18"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, peace is back between plugins!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphx5odsak3bkoum4kg29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphx5odsak3bkoum4kg29.png" alt="plugin solved" width="468" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>qgis</category>
      <category>pyqgis</category>
      <category>gis</category>
    </item>
    <item>
      <title>Get started with PyQGIS 02 - Manage layers with QGIS python console</title>
      <dc:creator>Raymond Lay</dc:creator>
      <pubDate>Wed, 25 Oct 2023 12:08:54 +0000</pubDate>
      <link>https://dev.to/mierune/get-started-with-pyqgis-02-manage-layers-with-qgis-python-console-mhc</link>
      <guid>https://dev.to/mierune/get-started-with-pyqgis-02-manage-layers-with-qgis-python-console-mhc</guid>
      <description>&lt;p&gt;The &lt;a href="https://dev.to/mierune/get-started-with-pyqgis-some-basic-commands-with-qgis-python-console-3he5"&gt;first chapter&lt;/a&gt; of this PyQGIS tutorial series told about basic commands and approach of PyQGIS module.&lt;br&gt;
This second chapter tell you about how to manage layers with some usual commands.&lt;br&gt;
You can use your own data or use a sample data of Paris region cities from &lt;a href="https://www.data.gouv.fr/fr/datasets/r/5cd27d86-4859-40dc-b029-a215219eedf9" rel="noopener noreferrer"&gt;France government platform&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Open script editor of Python Console
&lt;/h2&gt;

&lt;p&gt;In Python console we can launch commands one by one, but we need several commands to manage layers.&lt;br&gt;
To run those at once, we need to open the script editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1. Open Python console in QGIS
&lt;/h3&gt;

&lt;p&gt;As for the first chapter :&lt;br&gt;
Open QGIS, menu -&amp;gt; Plugins -&amp;gt; Python Console&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8bbeipl8but0ghdhg5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8bbeipl8but0ghdhg5v.png" alt="Python console"&gt;&lt;/a&gt;&lt;br&gt;
Or use shortcut &lt;code&gt;Ctrl+Alt+P&lt;/code&gt; (Windows) &lt;code&gt;command+option+P&lt;/code&gt; (mac)&lt;/p&gt;

&lt;p&gt;Python console open usually at the bottom of QGIS frame&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem395ftw347mv0beul3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem395ftw347mv0beul3n.png" alt="Python console on QGIS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2. Open Script Editor
&lt;/h3&gt;

&lt;p&gt;Click on the &lt;code&gt;Show Editor&lt;/code&gt; button to open script editor as below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqo0gbrsrfqkg1jqbra8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faqo0gbrsrfqkg1jqbra8.png" alt="Editor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Layer related commands
&lt;/h2&gt;

&lt;p&gt;Here are some basic commands to manage layers in a QGIS project.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1. Import layer from file
&lt;/h3&gt;

&lt;p&gt;Layer can be load in QGIS with two commands:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# 1- declare a new layer and specify file_path and layer name
&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QgsVectorLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ogr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# 2- import declared layer 
&lt;/span&gt;&lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;addMapLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On script editor, copy the following code, adapt to the file you want to import, and run. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;file_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your/path/data/target_file.shp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;layer_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my fantastic layer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# declare a new layer and specify file_path and layer name
&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QgsVectorLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ogr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# import declared layer 
&lt;/span&gt;&lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;addMapLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs57duq8aoye3v5scojqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs57duq8aoye3v5scojqh.png" alt="Import layer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2. Import only a part of features from file
&lt;/h3&gt;

&lt;p&gt;We can import a part of features by filtering declared layer.&lt;br&gt;
The following command will filter data where &lt;br&gt;
&lt;code&gt;target_field = 'target_value'&lt;/code&gt; &lt;br&gt;
and it should be put before import command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setSubsetString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;target_field=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;target_value&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In process, layer name will be added with 'filtered' suffix: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;file_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your/path/data/target_file.shp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;layer_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my fantastic layer filtered&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# declare a new layer and specify file_path and layer name
&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;QgsVectorLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ogr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# filter layer before import
&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setSubsetString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;target_field=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;target_value&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# import declared layer 
&lt;/span&gt;&lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;addMapLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;On below pic, data is filtered with only Paris' wards with:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setSubsetString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;numdep=75&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66f52fihe0tcj1ayulvf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66f52fihe0tcj1ayulvf.png" alt="Paris"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3. List layers
&lt;/h3&gt;

&lt;p&gt;There are various ways to list layers: we can retrieve layers  as object or just layers name.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running following command directly on python console will show a list of layer, not by layer name, but by object showing layer ID, and their PyQgis type:
```python
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;QgsProject.instance().mapLayers()&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
![map layers](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/58txmk5l8uexwp1jnoip.png)

- Adding `.values` on above result will reduce response to class and layer name:
```python


QgsProject.instance().mapLayers().values()


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyrw44cfy8zakepsgf22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyrw44cfy8zakepsgf22.png" alt="values layer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To retrieve only layers' name, use the &lt;code&gt;.name()&lt;/code&gt; attribute of each layer object:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;mapLayers&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
     &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj57jig61q4v0bq0mqg0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj57jig61q4v0bq0mqg0s.png" alt="list name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3. Retrieve a layer by name
&lt;/h3&gt;

&lt;p&gt;A layer can be retrieved by name with the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;mapLayersByName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_layer_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is the main way to retrieve a layer and manipulate it.&lt;br&gt;
This command will not return layer, but a list of layers which fit to target name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6dq1ipsmisjb72zjvoqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6dq1ipsmisjb72zjvoqb.png" alt="retrieve layer by name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, to get layer as unique, you can add  an iteration like &lt;code&gt;[0]&lt;/code&gt;, which means the first matching of returned list:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;mapLayersByName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_layer_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  2.4. Remove layer
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;removeLayer method&lt;/code&gt; of &lt;code&gt;QgsProject.instance()&lt;/code&gt; is used. &lt;br&gt;
As written in &lt;a href="https://qgis.org/pyqgis/3.22/core/QgsProject.html#qgis.core.QgsProject.removeMapLayer" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, target layer ID is required.&lt;/p&gt;

&lt;p&gt;layer ID can be retrieved with by adding &lt;code&gt;.id()&lt;/code&gt; method of layer class that we retrieved in previous step.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;mapLayersByName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_layer_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwe348jyecvq6zg99wn7x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwe348jyecvq6zg99wn7x.png" alt="Layer id"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thus, we can use this id to remove layer.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;layer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;mapLayersByName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_layer_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;QgsProject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;removeMapLayer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;id&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w032dg5nuqctjnf9er1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w032dg5nuqctjnf9er1.png" alt="layer removed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The use of QgsProject class to manage layers
&lt;/h2&gt;

&lt;p&gt;In this second chapter, &lt;code&gt;QgsProject.instance()&lt;/code&gt; has been mainly used to add, retrieve and remove layer.&lt;br&gt;
Regarding &lt;a href="https://qgis.org/pyqgis/3.22/core/QgsProject.html" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;, many other manipulations can be done, such as remove all layers or manipulate other project matters.&lt;/p&gt;

&lt;p&gt;Retrieving layers as objects also makes introduced us to  &lt;code&gt;QgsVectorLayer&lt;/code&gt; which will be the topic of the next chapter.&lt;/p&gt;

</description>
      <category>qgis</category>
      <category>python</category>
      <category>pyqgis</category>
    </item>
    <item>
      <title>Get started with PyQGIS 01 - Some basic commands with QGIS python console</title>
      <dc:creator>Raymond Lay</dc:creator>
      <pubDate>Wed, 13 Sep 2023 13:43:03 +0000</pubDate>
      <link>https://dev.to/mierune/get-started-with-pyqgis-some-basic-commands-with-qgis-python-console-3he5</link>
      <guid>https://dev.to/mierune/get-started-with-pyqgis-some-basic-commands-with-qgis-python-console-3he5</guid>
      <description>&lt;p&gt;QGIS is a useful GIS opensource software which offers many ways of views and analyze geospatial data.&lt;br&gt;
However analysis tools and basic functionalities may be not enough for specific needs, or when tasks need to be automated or easier to use.&lt;/p&gt;

&lt;p&gt;PyQGIS is an API which allows us to code in python in QGIS and manipulate many functionalities.&lt;br&gt;
This library is however so wide that it is difficult to know how to get started.&lt;/p&gt;

&lt;p&gt;This post is a first step to get started with PyQGIS, from very basic commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Open Python console in QGIS
&lt;/h2&gt;

&lt;p&gt;Open QGIS, menu -&amp;gt; Plugins -&amp;gt; Python Console&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8bbeipl8but0ghdhg5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8bbeipl8but0ghdhg5v.png" alt="Python console"&gt;&lt;/a&gt;&lt;br&gt;
Or use shortcut &lt;code&gt;Ctrl+Alt+P&lt;/code&gt; (Windows) &lt;code&gt;command+option+P&lt;/code&gt; (mac)&lt;/p&gt;

&lt;p&gt;Python console open usually at the bottom of QGIS frame&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem395ftw347mv0beul3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fem395ftw347mv0beul3n.png" alt="Python console on QGIS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Run first commands
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1. Hello world command
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;print("some_result")&lt;/code&gt; to display a result&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hello_world&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hello_world&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Command&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2a7hvqf4o8zkb6zdk0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2a7hvqf4o8zkb6zdk0w.png" alt="hello world command"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;result&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgc066uibajc7idooinu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgc066uibajc7idooinu.png" alt="Hello world"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2. Get map canvas scale
&lt;/h3&gt;

&lt;p&gt;By launching the following command on python console, Current scale of map canvas can be retrieved.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;iface&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mapCanvas&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5xmx9z8dzhdd2i30e916.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5xmx9z8dzhdd2i30e916.png" alt="Get map Canvas scale"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3. Set map canvas scale
&lt;/h3&gt;

&lt;p&gt;With the following command launched on python console, map canvas can be set to &lt;code&gt;1:25,000&lt;/code&gt; scale&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;iface&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mapCanvas&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;zoomScale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxtgozj8zza2b3qirjb3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxtgozj8zza2b3qirjb3.png" alt="Mapcanvas set in 25000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Understand commands and PyQGIS library
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;iface&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mapCanvas&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;iface&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mapCanvas&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;zoomScale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;25000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Above commands looks not intuitive at a first view, but Python console of QGIS allows us to investigate commands components easily.&lt;/p&gt;

&lt;p&gt;For example if we inquiry only &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;iface&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mapCanvas&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Console will return &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;qgis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_gui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QgsMapCanvas&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mh"&gt;0x1ac03ab80&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;which means that &lt;code&gt;iface.mapCanvas()&lt;/code&gt; is a &lt;code&gt;QgsMapCanvas&lt;/code&gt; object of PyQGIS.&lt;/p&gt;

&lt;p&gt;By searching &lt;code&gt;QgsMapCanvas pyqgis&lt;/code&gt; on your favorite search browser, you'll get documentation of this class,&lt;br&gt;
&lt;a href="https://qgis.org/pyqgis/3.2/gui/Map/QgsMapCanvas.html" rel="noopener noreferrer"&gt;https://qgis.org/pyqgis/3.2/gui/Map/QgsMapCanvas.html&lt;/a&gt;&lt;br&gt;
and have access of all methods that &lt;code&gt;iface.mapCanvas()&lt;/code&gt; is able to do.&lt;/p&gt;

&lt;p&gt;Thus, you can try many of methods of QgsMapCanvas class.&lt;br&gt;
Here are two examples:&lt;/p&gt;

&lt;h2&gt;
  
  
  3.1. &lt;a href="https://qgis.org/pyqgis/3.2/gui/Map/QgsMapCanvas.html#qgis.gui.QgsMapCanvas.center" rel="noopener noreferrer"&gt;center&lt;/a&gt; to retrieve center point of map canvas
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewi21g3m74ofjcen8njo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewi21g3m74ofjcen8njo.png" alt="Qgsmapcanvas center documentation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;iface&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mapCanvas&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;center&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;QgsPointXY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;POINT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;454338.46291687525808811&lt;/span&gt; &lt;span class="mf"&gt;5845991.44166376255452633&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvaeddt8eogpyc7tp17cu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvaeddt8eogpyc7tp17cu.png" alt="center result"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3.2. &lt;a href="https://qgis.org/pyqgis/3.2/gui/Map/QgsMapCanvas.html#qgis.gui.QgsMapCanvas.extent" rel="noopener noreferrer"&gt;extent&lt;/a&gt; where canvas extent can be retrieved
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="n"&gt;iface&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mapCanvas&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;extent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;QgsRectangle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;452382.75110932614188641&lt;/span&gt; &lt;span class="mf"&gt;5845268.24721858091652393&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;456294.17472442437428981&lt;/span&gt; &lt;span class="mf"&gt;5846714.63610894419252872&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw629dyjz09y82i168ng0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw629dyjz09y82i168ng0.png" alt="extent"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. First conclusion of PyQGIS approach
&lt;/h2&gt;

&lt;p&gt;Python console of QGIS is very useful to understand PyQGIS. &lt;br&gt;
By launching first commands, and inquiry commands prefixes such as &lt;code&gt;iface.mapCanvas()&lt;/code&gt;, you can discover a PyQGIS class (here &lt;code&gt;QgsMapCanvas&lt;/code&gt;) and the wealth of methods it offers.&lt;/p&gt;

&lt;p&gt;PyQGIS is a very wide library, and understand its architecture becomes easier by inquiring a class like above on the Python Console of QGIS, and discover methods on documentation.&lt;/p&gt;

&lt;p&gt;Next post will focus on dealing with layers with pyQGIS&lt;/p&gt;

&lt;h3&gt;
  
  
  Remark:
&lt;/h3&gt;

&lt;p&gt;in &lt;code&gt;iface.mapCanvas()&lt;/code&gt;, you surely wondered what &lt;code&gt;iface&lt;/code&gt; means. By the same approach we used on this post, you can run &lt;code&gt;iface&lt;/code&gt; command, it will return &lt;a href="https://qgis.org/pyqgis/master/gui/QgisInterface.html" rel="noopener noreferrer"&gt;the QgisInterface class and many many related methods&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# iface() with ()does not work
&lt;/span&gt;&lt;span class="n"&gt;iface&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;qgis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_gui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QgisInterface&lt;/span&gt; &lt;span class="nb"&gt;object&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="mh"&gt;0x15589fe50&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cxk27tshogdq4ecgat1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cxk27tshogdq4ecgat1.png" alt="iface command"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffukc4vulu911zwf3dvhg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffukc4vulu911zwf3dvhg.png" alt="qgisinterface documentation"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>qgis</category>
      <category>pyqgis</category>
    </item>
    <item>
      <title>Get started with QField cloud</title>
      <dc:creator>Raymond Lay</dc:creator>
      <pubDate>Wed, 26 Jul 2023 12:39:30 +0000</pubDate>
      <link>https://dev.to/mierune/get-started-with-qfield-cloud-4360</link>
      <guid>https://dev.to/mierune/get-started-with-qfield-cloud-4360</guid>
      <description>&lt;p&gt;Web and Desktop Opensource Geographic Information System (GIS) softwares are growing fastly and offers many analysis solutions.&lt;br&gt;
However, on-field data acquisition solutions should also take into account.&lt;br&gt;
Let's try one of those solutions called QField.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's QField?
&lt;/h3&gt;

&lt;p&gt;QField is an OS/Android/Windows GIS app where we can process field work.&lt;br&gt;
Concretly, geospatial data can be digitalized, edited and well managed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qfield.org/" rel="noopener noreferrer"&gt;https://qfield.org/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  And QField cloud?
&lt;/h3&gt;

&lt;p&gt;Qfield projects can be cloudly stored like Google Drive.&lt;br&gt;
It allows to be synchronized, be accessed by multi devices and/or users, and also to work on-field even offline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qfield.cloud/" rel="noopener noreferrer"&gt;https://qfield.cloud/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  QField sync to manage field projects
&lt;/h3&gt;

&lt;p&gt;QField sync is a QGIS plugin that allows to manage plugin projects on QGIS.&lt;br&gt;
This is the strongest point of QField because it opens field data to whole GIS great functionalities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://plugins.qgis.org/plugins/qfieldsync/" rel="noopener noreferrer"&gt;https://plugins.qgis.org/plugins/qfieldsync/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1v5lt1h46y9ohh5megh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk1v5lt1h46y9ohh5megh.png" alt="QFieldsync"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  To summarize QField work architecture
&lt;/h3&gt;

&lt;p&gt;This architecture allows to work from QGIS and QField application by a syncronization logic like GitHub.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19atjm3jcdcm5v32c8qr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19atjm3jcdcm5v32c8qr.png" alt="QField work architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Setup
&lt;/h2&gt;

&lt;p&gt;Many steps have to be done to create an operational QField project.&lt;br&gt;
You can follow detailed steps from &lt;a href="https://docs.qfield.org/fr/get-started/tutorials/get-started-qfc/" rel="noopener noreferrer"&gt;QField website&lt;/a&gt;, but it may be good to also have a look in below summary to understand easier how it works.&lt;/p&gt;

&lt;p&gt;1- On Web browser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you don't have a QFieldCloud account, sign up&lt;/li&gt;
&lt;li&gt;Login to your account and create a project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2- On QGIS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;install QFieldSync plugin&lt;/li&gt;
&lt;li&gt;login to your QFieldCloud account &lt;/li&gt;
&lt;li&gt;retrieve project created in QField cloud and synchronize &lt;/li&gt;
&lt;li&gt;add data, configure and design it&lt;/li&gt;
&lt;li&gt;synchronize (Push to cloud)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3- On field device (smartphone, tablet etc.)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;install QField application&lt;/li&gt;
&lt;li&gt;login to your QFieldCloud account &lt;/li&gt;
&lt;li&gt;retrieve project created in QField cloud and synchronize &lt;/li&gt;
&lt;li&gt;start your field work!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Use case: Locate vending machines with QField
&lt;/h2&gt;

&lt;p&gt;Japan is full of drink vending machines, but density becomes low when going to countrysides.&lt;br&gt;
Bad experiences occured when running long distance in summer, or when simply want to have a coffee break with no store and café around.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58gjyetaujcl55vk3hv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58gjyetaujcl55vk3hv3.png" alt="Vending machine japan"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Project idea is to gather location of vending machines (and also toilets and stores) to be a good companion for runners, hikers and cyclists.&lt;/p&gt;

&lt;p&gt;Here is how I getted started step by steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prepare project layers on QGIS and push to cloud
&lt;/h3&gt;

&lt;p&gt;Layers : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vending_machine&lt;/li&gt;
&lt;li&gt;toilet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8e9bhhfk165zol94gzn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8e9bhhfk165zol94gzn.png" alt="Layers Preparation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Push to cloud:&lt;br&gt;
clic on synchronize&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqqmet6vo9j3mwcb1cqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqqmet6vo9j3mwcb1cqa.png" alt="Synchronize"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;check and perform actions&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2a8lhhb5isi50mgyk0yo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2a8lhhb5isi50mgyk0yo.png" alt="before synchronize"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Survey with QField
&lt;/h3&gt;

&lt;p&gt;Let's run on the road and add feature when find a vending machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;On QField, retrieve target project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn in editing mode&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpzb4mltkqhktjcpo2ne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpzb4mltkqhktjcpo2ne.png" alt="Turn editing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Target point can be fit to current position, and feature is added with following buttons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45al3ff5acqr8x7hkzvf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F45al3ff5acqr8x7hkzvf.png" alt="Survey buttons"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Populate attributes and save&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0wnkpws1fczk44gqwz6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0wnkpws1fczk44gqwz6.png" alt="Populate attributes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once finished, edited features (here 5) can be push to the cloud as shown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8jxrivcsbycvg87bkw1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8jxrivcsbycvg87bkw1.png" alt="Push Editing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose push only or synchronize
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3katju2ltekd15wnyqh.png" alt="qfield sync"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Get surveyed data on QGIS
&lt;/h3&gt;

&lt;p&gt;On QGIS, clic on synchronize button :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be Careful to the stream way!&lt;/strong&gt;&lt;br&gt;
I synchronization frame, upload is displayed, but in that case we need to download surveyed features from cloud.&lt;br&gt;
Click on &lt;code&gt;Prefer Cloud&lt;/code&gt; before &lt;code&gt;Perform Actions&lt;/code&gt; .&lt;br&gt;
Action list should be turned on &lt;em&gt;Download&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8sc3ewo25f9xpqo9lhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8sc3ewo25f9xpqo9lhv.png" alt="download way"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well done!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqu36irt7jgb2lt64nclz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqu36irt7jgb2lt64nclz.png" alt="QGIS result"&gt;&lt;/a&gt;&lt;br&gt;
Only 4 refresh spots and 5 vending machines were found after run 4 kilometers by 35°C...&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Issues encountered
&lt;/h2&gt;

&lt;p&gt;This section to summarize issues encountered and its solution if any.&lt;br&gt;
It may be a technical issue or something I missed when setting parameters.&lt;br&gt;
To be updated as far as I use.&lt;br&gt;
Any suggestion is welcomed.&lt;/p&gt;

&lt;h3&gt;
  
  
  [enhancement] detect appropriate upload/download way
&lt;/h3&gt;

&lt;p&gt;as written above&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8sc3ewo25f9xpqo9lhv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8sc3ewo25f9xpqo9lhv.png" alt="download way"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dropping feature on QField device may not be detected when synchronizing in QGIS
&lt;/h3&gt;

&lt;p&gt;Context&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Point layer named &lt;code&gt;store&lt;/code&gt; has been added.&lt;/li&gt;
&lt;li&gt;1 feature has been added on QGIS at the same place of toilet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8f21wyksmvq3mjxs1a67.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8f21wyksmvq3mjxs1a67.png" alt="add store"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feature has then been dropped in QField...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9lsbzkihq0pk1abgl2ll.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9lsbzkihq0pk1abgl2ll.png" alt="store drop QField"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;...but editing cannot be detected on QGIS side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bt1h60tyocu1pnd30fi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bt1h60tyocu1pnd30fi.png" alt="store is missing"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>qfield</category>
      <category>qgis</category>
      <category>gis</category>
    </item>
    <item>
      <title>My first #30DayMapChallenge</title>
      <dc:creator>Raymond Lay</dc:creator>
      <pubDate>Wed, 28 Dec 2022 13:17:07 +0000</pubDate>
      <link>https://dev.to/mierune/my-first-30daymapchallenge-1g0i</link>
      <guid>https://dev.to/mierune/my-first-30daymapchallenge-1g0i</guid>
      <description>&lt;p&gt;2022 year is the first time I tried &lt;a href="https://30daymapchallenge.com/" rel="noopener noreferrer"&gt;#30DayMapChallenge&lt;/a&gt;, a daily map making challenge which is held on Social Network every year in november.&lt;br&gt;
I get known about it after the end of 2021 challenge and as a map lover, I did my best to not miss 2022 one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2de8jwh11ebbow1lb5x8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2de8jwh11ebbow1lb5x8.png" alt="Image description" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  30+6 maps completed
&lt;/h1&gt;

&lt;p&gt;Map making has been started once topics were published few weeks before, knowing doing maps the same day for one month is so hard with work and family matters.&lt;/p&gt;

&lt;p&gt;As a first step, most of output has been done as simple and/or in a very short time according to a famous sentence "Done is better than perfect", and some of topics has been selected to take more time on.&lt;/p&gt;

&lt;p&gt;30 maps has been done in early november, so remaining time has been used to improve it, and make additional stuffs for &lt;a href="https://twitter.com/i/events/1597132316932943874" rel="noopener noreferrer"&gt;MIERUNE&lt;/a&gt; (a GIS solution company in Japan) who also did the challenge as a team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprf436u7ijuiiqu2xrsu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprf436u7ijuiiqu2xrsu.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below is a summary of made maps with used tools&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Points&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1587317684039225344" rel="noopener noreferrer"&gt;A Webmap with my posts on Facebook&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Maptiler / Maplibre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Lines&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1587698018387726337" rel="noopener noreferrer"&gt;Mt-Fuji contour lines&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS + ElevationTile4JP Plugin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Polygons&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1588059902982770688" rel="noopener noreferrer"&gt;An upside down border between Belgium and Netherlands&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Colour Friday: Green&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1588444636582141952" rel="noopener noreferrer"&gt;Greenland&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Ukraine&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1588789963646271490" rel="noopener noreferrer"&gt;An ukrainian color globe map&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS + Globe Builder plugin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Network&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1589184563938398209" rel="noopener noreferrer"&gt;Tokyo railway network comes to Paris&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS / Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Raster&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1589565322528522243" rel="noopener noreferrer"&gt;Spatiomap of Mongolia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS / Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Data: OpenStreetMap&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1589914120932847617" rel="noopener noreferrer"&gt;Mashiko living town map with IGN French style&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS + ElevationTile4JP Plugin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Space&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1590261661113499648" rel="noopener noreferrer"&gt;Patagonia Star Map&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Photoshop &amp;amp; &lt;a href="https://www.fourmilab.ch/yoursky/" rel="noopener noreferrer"&gt;Your sky&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;A bad map&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1590668266833600513" rel="noopener noreferrer"&gt;Mercator &amp;amp; Default Color&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Colour Friday: Red&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1590827137325375488" rel="noopener noreferrer"&gt;Japan cities with「赤」Red Kanji&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Scale&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1591364678998900736" rel="noopener noreferrer"&gt;Europa and Middle East cities longitudely translated to Japan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS / Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;5 minute map&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1591745689528123393" rel="noopener noreferrer"&gt;Tokyo Marathon with 5 minutes checkpoint&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS / Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;Hexagons&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1592133621376516098" rel="noopener noreferrer"&gt;France, as known as L'Hexagone&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Photoshop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;Food/drink&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1592492611671048193" rel="noopener noreferrer"&gt;The egg projection&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Egg and Marker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1592821528399429633" rel="noopener noreferrer"&gt;The minimal sized country&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;A map without a computer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1593217638708088832" rel="noopener noreferrer"&gt;A clay of Antarctica&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;Colour Friday: Blue&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1593442621090693121" rel="noopener noreferrer"&gt;Japan cities with「青」Blue Kanji&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Globe&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1593945434220699651" rel="noopener noreferrer"&gt;A craft and paint made Globe&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Watercolor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;“My favourite…”&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1594309332002164737" rel="noopener noreferrer"&gt;A lovely south pole&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;Data: Kontur Population Dataset&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1594641269103333377" rel="noopener noreferrer"&gt;Around Korea DMZ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1595030584551776262" rel="noopener noreferrer"&gt;A globe clay waiting for data&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;Movement&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1595334839565094914" rel="noopener noreferrer"&gt;Bus traffic around Mt. Fuji&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS + GTFS-GO plugin / Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;Fantasy&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1595751837029867520" rel="noopener noreferrer"&gt;Final Fantasy I~X worlds, 10 in 1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Photoshop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;Colour Friday: 2 colours&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1595977322728824832" rel="noopener noreferrer"&gt;Japan cities with「緑」green and 「紫」purple kanji&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;Island(s)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1596479381127430144" rel="noopener noreferrer"&gt;Lovely Amami island&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS + ElevationTile4JP Plugin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;Music&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1596818868047167488" rel="noopener noreferrer"&gt;Where Songs I listened to come from?&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;3D&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1597148792020561920" rel="noopener noreferrer"&gt;One month of the run and trekking&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Strava / QGIS + ElevationTile4JP + Qgis2threejs Plugin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;“Out of my comfort zone”&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1597544147048611842" rel="noopener noreferrer"&gt;Girondins de Bordeaux football teams opponents&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Maptiler / Maplibre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;Remix&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/bordoray/status/1597936733949030400" rel="noopener noreferrer"&gt;A Webmap with my posts on Facebook, in Globe version&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Mapbox&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Additional Maps for MIERUNE&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Ukraine&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/MIERUNE_inc/status/1588818652782100480" rel="noopener noreferrer"&gt;Hokkaido map in Ukrainian&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Scale&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/MIERUNE_inc/status/1591355121929158656" rel="noopener noreferrer"&gt;Paris region railway network come to Tokyo&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS / Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;5 minute map&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/MIERUNE_inc/status/1591717506506543108" rel="noopener noreferrer"&gt;A 5 minutes run with a 5 shape&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Strava / QGIS / Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/MIERUNE_inc/status/1594979007761715200" rel="noopener noreferrer"&gt;Hokkaido clay waiting for data&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;“Out of my comfort zone”&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/MIERUNE_inc/status/1597515711487741952" rel="noopener noreferrer"&gt;A Japan map made with business cards&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Business cards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;Remix&lt;/td&gt;
&lt;td&gt;&lt;a href="https://twitter.com/MIERUNE_inc/status/1597878097579102208" rel="noopener noreferrer"&gt;Greater Tokyo Railway Network come to Greater Paris&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;QGIS / Maptiler&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Making maps with open tools
&lt;/h1&gt;

&lt;p&gt;Regarding above summary, all maps has been made using open tools except Photoshop. Geographic tools are fully Open source.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Output count&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;QGIS&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;GIS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maptiler&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Basemap Style&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maplibre&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Webmapping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mapbox&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Webmapping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Photoshop&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;non-GIS use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.fourmilab.ch/yoursky/" rel="noopener noreferrer"&gt;Yoursky&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Sky map&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strava&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Running app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clay&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Non-digital use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Egg&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Non-digital use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Watercolour&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Non-digital use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business card&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Non-digital use&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;　* Total is over than 36 due to the use of multi-tools for some maps&lt;/p&gt;

&lt;h1&gt;
  
  
  A great opportunity to do unusual maps
&lt;/h1&gt;

&lt;p&gt;Making maps is usually for work or customer needs, but this challenge makes me try to map random thoughts, such as where is Japan latitude equivalent in Europe, or How Tokyo is big comparing to Paris&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/bordoray/status/1591364678998900736" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4g28hhb9cf2pmcpehjj3.png" alt="Image description" width="537" height="887"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  A great opportunity to try new tools
&lt;/h1&gt;

&lt;p&gt;Challenge was a chance to try new tools I never had any opportunity to try before.&lt;br&gt;
Below is a list of what I learned during this month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mapping in 3D with QGIS (with Qgis2threejs plugin)&lt;/li&gt;
&lt;li&gt;Mapping a Globe with QGIS (with Globe builder plugin)&lt;/li&gt;
&lt;li&gt;Making a globe Webmap&lt;/li&gt;
&lt;li&gt;Getting Japan elevation data easily (with ElevationTile4JP)&lt;/li&gt;
&lt;li&gt;Making a starmap &lt;/li&gt;
&lt;li&gt;Making a map and a globe with clay&lt;/li&gt;
&lt;li&gt;Mapping with cards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://twitter.com/bordoray/status/1593217638708088832" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8zrhbw2agd6r63od6vn.png" alt="Image description" width="561" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;More than 8000 maps has been released in one month. &lt;br&gt;
Time was so short I could not take time to appreciate each map, and also nights became so short, but I think I never enjoy so much to make maps in ne month !&lt;br&gt;
Looking forward for next year challenge !&lt;/p&gt;

&lt;h1&gt;
  
  
  Related links
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Portofolio : &lt;a href="https://bordoray.github.io/30-day-map-challenge/2022/" rel="noopener noreferrer"&gt;https://bordoray.github.io/30-day-map-challenge/2022/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Twitter Timeline : &lt;br&gt;
&lt;a href="https://twitter.com/search?q=bordoray%20%2330DayMapChallenge&amp;amp;src=typed_query&amp;amp;f=live" rel="noopener noreferrer"&gt;https://twitter.com/search?q=bordoray%20%2330DayMapChallenge&amp;amp;src=typed_query&amp;amp;f=live&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MIERUNE's 30 maps : &lt;a href="https://twitter.com/i/events/1597132316932943874https://twitter.com/i/events/1597132316932943874" rel="noopener noreferrer"&gt;https://twitter.com/i/events/1597132316932943874https://twitter.com/i/events/1597132316932943874&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>emptystring</category>
    </item>
  </channel>
</rss>
