{"id":14471,"date":"2024-06-18T06:45:00","date_gmt":"2024-06-18T04:45:00","guid":{"rendered":"https:\/\/www.opengis.ch\/?p=14471"},"modified":"2026-04-16T15:42:51","modified_gmt":"2026-04-16T13:42:51","slug":"supercharge-your-fieldwork-with-qfields-project-and-app-wide-plugins","status":"publish","type":"post","link":"https:\/\/www.opengis.ch\/it\/2024\/06\/18\/supercharge-your-fieldwork-with-qfields-project-and-app-wide-plugins\/","title":{"rendered":"Supercharge your fieldwork with QField&#8217;s project and app-wide plugins"},"content":{"rendered":"\n<p><em>This blog post will introduce QField\u2019s brand new plugin framework and walk through the creation of a plugin to support bird watchers in need of a quick way to digitize photos of spotted birds onto a point vector layer.<\/em><\/p>\n\n\n\n\t\t<figure class=\"wp-block-jetpack-videopress jetpack-videopress-player\" style=\"\" >\n\t\t\t<div class=\"jetpack-videopress-player__wrapper\"> <iframe title=\"VideoPress Video Player\" aria-label='VideoPress Video Player' width='750' height='359' src='https:\/\/videopress.com\/embed\/2EEGokQ2?cover=1&amp;autoPlay=0&amp;controls=1&amp;loop=0&amp;muted=0&amp;persistVolume=1&amp;playsinline=0&amp;preloadContent=metadata&amp;useAverageColor=1&amp;hd=0' frameborder='0' allowfullscreen data-resize-to-parent=\"true\" allow='clipboard-write'><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1674852142'><\/script><\/div>\n\t\t\t<figcaption>QField Plugin <a href=\"https:\/\/github.com\/opengisch\/qfield-snap\">Snap!<\/a> in action<\/figcaption>\n\t\t\t\n\t\t<\/figure>\n\t\t\n\n\n<h2 class=\"wp-block-heading\">A plugin framework is born!<\/h2>\n\n\n\n<p>As <a href=\"https:\/\/www.opengis.ch\/2024\/06\/11\/qfield-3-3-darien-it-is-just-the-beginning\/\" target=\"_blank\" rel=\"noreferrer noopener\">announced recently<\/a>, QField now empowers users through a brand new <a href=\"https:\/\/docs.qfield.org\/how-to\/plugins\/\" target=\"_blank\" rel=\"noreferrer noopener\">plugin framework<\/a> allowing for simple customization on the way the application behaves or looks all the way through to creating completely new functionalities.<\/p>\n\n\n\n<p>The plugin framework relies on <a href=\"https:\/\/doc.qt.io\/qt-6\/qmlreference.html\" target=\"_blank\" rel=\"noreferrer noopener\">Qt\u2019s QML engine and JavaScript<\/a>, allowing for cross-platform support out of the box. This means that plugins will run perfectly fine on all platforms currently supported by QField: Android, iOS, Windows, Linux, and macOS.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">App-wide plugin vs. project plugin<\/h2>\n\n\n\n<p>First, let\u2019s look at the two types of plugins supported by QField: app-wide plugins and project plugins. As their names imply, the main difference is their scope. An enabled app-wide plugin will remain active as long as QField is running, while project plugins are activated on project load and deactivated when the project tied to the plugin is closed.<\/p>\n\n\n\n<p>Project plugins are shipped alongside a given project file (<code>.qgs<\/code>\/<code>.qgz<\/code>). Project plugins must share the same name of the project file with a <code>.qml<\/code> extension. For example, if your project file is <code>birdwatcher.qgz<\/code>, QField will look for the presence of a<code> birdwatcher.qml <\/code>to activate the project plugin. For app-wide plugins, installation is done via the plugins manager popup; more on this below.<\/p>\n\n\n\n<p>Distribution of project plugins can be greatly facilitated through <a href=\"https:\/\/qfield.cloud\/\" target=\"_blank\" rel=\"noreferrer noopener\">QFieldCloud<\/a>. The presence of project plugins within a cloud project environment will be automatically detected and packaged alongside the project file and its datasets when deployed to QField devices.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Starting with a project plugin<\/h2>\n\n\n\n<p>We will start with looking into a simple project plugin that offers a new digitizing mechanism focused on snapping photos as a trigger for point feature addition. This plugin will demonstrate how new functionalities and behaviors can be added to QField to serve specific needs. In this case, the new digitizing mechanism could come in handy for bird watchers and other users in need of a quick way to snap photos!<\/p>\n\n\n\n<p>It\u2019s advised to download a version of QField running on your desktop environment while testing plugins. Links to <a href=\"https:\/\/docs.qfield.org\/get-started\/\" data-type=\"link\" data-id=\"https:\/\/docs.qfield.org\/get-started\/\" target=\"_blank\" rel=\"noreferrer noopener\">Windows, Linux, and macOS builds are available here<\/a>. Once installed, <a href=\"https:\/\/github.com\/opengisch\/qfield-snap\/releases\/download\/v1.0\/qfield-snap-sample-project.zip\" data-type=\"link\" data-id=\"https:\/\/github.com\/opengisch\/qfield-snap\/releases\/download\/v1.0\/qfield-snap-sample-project.zip\">download this project archive containing a tiny birdwatcher sample project<\/a> and extract it into a new directory on your local machine.<\/p>\n\n\n\n<p>The project archive consists of a point vector layer (<code>observations.gpkg<\/code>), a project file (<code>birdwatcher.qgz<\/code>) as well as a project plugin (<code>birdwatcher.qml<\/code>) which we will look into below. Please note that the point vector layer\u2019s attribute form is already configured to display captured photos. We will not spend time on attribute form setup in this post; <a href=\"https:\/\/docs.qfield.org\/how-to\/attributes-form\/#configure-attachment-widget\" data-type=\"link\" data-id=\"https:\/\/docs.qfield.org\/how-to\/attributes-form\/#configure-attachment-widget\">see this relevant documentation page<\/a> if you are interested in knowing how that was achieved.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"522\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/123-2.png?resize=750%2C522&#038;ssl=1\" alt=\"\" class=\"wp-image-14535\" srcset=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/123-2.png?w=986&amp;ssl=1 986w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/123-2.png?resize=300%2C209&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/123-2.png?resize=768%2C534&amp;ssl=1 768w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<p>We can now test the project plugin by opening the project (<code>birdwatcher.qgz<\/code>) in QField. Users familiar with QField will notice a new \u2018camera\u2019 tool button present on the top-right corner of the map canvas. This button was added by the project plugin. You can press on it, to open the QField camera, take a photo (of yourself, a random object on your table, or with a bit of luck a bird), and witness how that leads to a point feature creation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Digging into the project plugin file<\/h2>\n\n\n\n<p>Let\u2019s open the project plugin file (birdwatcher.qml) in your favorite text editor. The first few lines define the QML imports needed by the plugin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import QtQuick\nimport QtQuick.Controls\n\nimport org.qfield\nimport org.qgis\nimport Theme\n\nimport \"qrc:\/qml\" as QFieldItems<\/code><\/pre>\n\n\n\n<p>Beyond the two QtQuick imports, we will make use of QField-specific types and items as well as QGIS ones (<a href=\"https:\/\/github.com\/opengisch\/QField\/blob\/master\/src\/core\/qgismobileapp.cpp#L362\" data-type=\"link\" data-id=\"https:\/\/github.com\/opengisch\/QField\/blob\/master\/src\/core\/qgismobileapp.cpp#L362\" target=\"_blank\" rel=\"noreferrer noopener\">registered and declared in this source file<\/a>), a Theme to retrieve icons and colors as well as QField items such as tool buttons (<a href=\"https:\/\/github.com\/opengisch\/QField\/tree\/master\/src\/qml\/imports\/Theme\" data-type=\"link\" data-id=\"https:\/\/github.com\/opengisch\/QField\/tree\/master\/src\/qml\/imports\/Theme\" target=\"_blank\" rel=\"noreferrer noopener\">see this source directory<\/a>), as well as the QField QML items embedded into the application itself to make use of the camera.<\/p>\n\n\n\n<p>The next line declares an generic Item component which will be used by QField to initiate the plugin. This must be present in all plugins. As this plugin does, you can use the <code>Component.onCompleted<\/code> signal to trigger code execution. In this case, we are using iface to add a tool button on top of the map canvas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Component.onCompleted: {\n  iface.addItemToPluginsToolbar(snapButton)\n}<\/code><\/pre>\n\n\n\n<p>Just above these lines, the plugin declare a number of properties pointing to items found in the main QField ApplicationWindow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>property var mainWindow: iface.mainWindow()\nproperty var positionSource: iface.findItemByObjectName('positionSource')\nproperty var dashBoard: iface.findItemByObjectName('dashBoard')\nproperty var overlayFeatureFormDrawer: iface.findItemByObjectName('overlayFeatureFormDrawer')<\/code><\/pre>\n\n\n\n<p>Users can reach through to any items within <a href=\"https:\/\/github.com\/opengisch\/QField\/blob\/master\/src\/qml\/qgismobileapp.qml\" data-type=\"link\" data-id=\"https:\/\/github.com\/opengisch\/QField\/blob\/master\/src\/qml\/qgismobileapp.qml\">QField\u2019s ApplicationWindow<\/a> provided they have an objectName property defined. The string value is used in the <code>iface.findItemByObjectName()<\/code> function to retrieve the item.<\/p>\n\n\n\n<p>The rest of the file consists of a loader to activate the QField camera, a tool button to snap a photo, and a function to create a new feature within which the current position is used as geometry and the snapped photo is attached to the feature form.<\/p>\n\n\n\n<p>The function itself provides a good example of what can be achieved by using the parts of QGIS exposed through QML, as well as utility functions and user interface provided by QField:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function snap(path) {\n  let today = new Date()\n  let relativePath = 'DCIM\/' + today.getFullYear()\n                              + (today.getMonth() +1 ).toString().padStart(2,0)\n                              + today.getDate().toString().padStart(2,0)\n                              + today.getHours().toString().padStart(2,0)\n                              + today.getMinutes().toString().padStart(2,0)\n                              + today.getSeconds().toString().padStart(2,0)\n                              + '.' + FileUtils.fileSuffix(path)\n  platformUtilities.renameFile(path, qgisProject.homePath + '\/' + relativePath)\n  \n  let pos = positionSource.projectedPosition\n  let wkt = 'POINT(' + pos.x + ' ' + pos.y + ')'\n  \n  let geometry = GeometryUtils.createGeometryFromWkt(wkt)\n  let feature = FeatureUtils.createFeature(dashBoard.activeLayer, geometry)\n      \n  let fieldNames = feature.fields.names\n  if (fieldNames.indexOf('photo') &gt; -1) {\n    feature.setAttribute(fieldNames.indexOf('photo'), relativePath)\n  } else if (fieldNames.indexOf('picture') &gt; -1) {\n    feature.setAttribute(fieldNames.indexOf('picture'), relativePath)\n  }\n\n  overlayFeatureFormDrawer.featureModel.feature = feature\n  overlayFeatureFormDrawer.state = 'Add'\n  overlayFeatureFormDrawer.open()\n}<\/code><\/pre>\n\n\n\n<p>The QGIS API Documentation site is a good resource for learning what parts of the many QGIS classes are exposed to QML. For example, the <a href=\"https:\/\/api.qgis.org\/api\/classQgsFeature.html\" target=\"_blank\" rel=\"noreferrer noopener\">QgsFeature documentation page <\/a>contains a Properties section and a Q_INVOKABLE prefix next to functions indicating their availability within a QML\/JavaScript environment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deployment of a project plugin via QFieldCloud<\/h2>\n\n\n\n<p>As mentioned above, QFieldCloud greatly eases the deployment of project plugins to devices in the field. We will now go through the steps required to create a cloud project environment based on the birdwatcher sample project, and witness it handling the project plugin automatically.<\/p>\n\n\n\n<p>This will require you to registered for a freely available QFieldCloud community account if you haven\u2019t done so yet (<a href=\"https:\/\/app.qfield.cloud\/accounts\/signup\/\" data-type=\"link\" data-id=\"https:\/\/app.qfield.cloud\/accounts\/signup\/\" target=\"_blank\" rel=\"noreferrer noopener\">it takes a minute to do so<\/a>, what are you waiting for \ud83d\ude09 ). We will also need the QFieldSync plugin in QGIS, which can be enabled through the QGIS plugin manager.<\/p>\n\n\n\n<p>Let\u2019s open QGIS, and log into QFieldCloud by clicking on the QFieldSync toolbar\u2019s blue cloud icon. Once logged in, click on the \u2018Create New Project\u2019 tool button found at the bottom of the dialog.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"755\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/projects.png?resize=703%2C755&#038;ssl=1\" alt=\"\" class=\"wp-image-14480\" srcset=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/projects.png?w=703&amp;ssl=1 703w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/projects.png?resize=279%2C300&amp;ssl=1 279w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/figure>\n\n\n\n<p>In the subsequent panel dialog, choose the \u2018Create a new empty QFieldCloud project\u2019 and then hit the \u2018Next\u2019 button. Give it a name and a description, and for the local directory, pick the folder within which you had extracted the birdwatcher project, then hit the \u2018Create\u2019 button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"755\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/settings.png?resize=703%2C755&#038;ssl=1\" alt=\"\" class=\"wp-image-14479\" srcset=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/settings.png?w=703&amp;ssl=1 703w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/settings.png?resize=279%2C300&amp;ssl=1 279w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/figure>\n\n\n\n<p>QFieldSync will then ask you to upload your newly created cloud project environment to the server. Notice how the project plugin file (birdwatcher.qml) is part of the files to be delivered to the cloud. Confirm by clicking on the \u2018Upload to server\u2019 button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"755\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/uploads.png?resize=703%2C755&#038;ssl=1\" alt=\"\" class=\"wp-image-14478\" srcset=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/uploads.png?w=703&amp;ssl=1 703w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/uploads.png?resize=279%2C300&amp;ssl=1 279w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/figure>\n\n\n\n<p>When QFieldSync is finished uploading, you are ready to take your mobile device, open QField, log into your QFieldCloud account and download the cloud project. Once the cloud project is loaded, you will be asked for permission to load the project plugin, which you can grant on a permanent or one-time basis.<\/p>\n\n\n\n<p>Bravo! You have successfully deployed a project plugin through QFieldCloud.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating an app-wide plugin directory<\/h2>\n\n\n\n<p>Let\u2019s move on to creating a functional app-wide plugin directory. <a href=\"https:\/\/github.com\/opengisch\/qfield-snap\/releases\/download\/v1.0\/qfield-snap-plugin.zip\" data-type=\"link\" data-id=\"https:\/\/github.com\/opengisch\/qfield-snap\/releases\/download\/v1.0\/qfield-snap-plugin.zip\">Download this sample app-wide plugin<\/a> and extract it into a new directory placed in the \u2018plugins\u2019 directory, itself found within the QField app directory. The location of the app directory is provided in the \u2018About QField\u2019 overlay, take note of it prior to extracting the plugin if you have not done so yet.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"697\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/file_structure.png?resize=750%2C697&#038;ssl=1\" alt=\"\" class=\"wp-image-14477\" srcset=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/file_structure.png?w=842&amp;ssl=1 842w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/file_structure.png?resize=300%2C279&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/file_structure.png?resize=768%2C714&amp;ssl=1 768w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<p>As seen in the screenshot above, which demonstrates the directory hierarchy, a given plugin directory must contain at least two files: a main.qml file, which QField will use to activate the plugin, and a metadata.txt file containing basic information on the plugin, such as the plugin name, author details, and version.<\/p>\n\n\n\n<p>Here\u2019s a sample metadata.txt from the birdwatcher project plugin upgraded into an app-wide plugin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;general]\nname=Snap!\ndescription=Digitize points through snapping photos\nauthor=OPENGIS.ch\nicon=icon.svg\nversion=1.0\nhomepage=https:\/\/www.opengis.ch\/<\/code><\/pre>\n\n\n\n<p>Opening main.qml in your favourite text editor will reveal that it has the exact same content as the above-shared project plugin. The only change is the renaming of birdwatcher.qml to main.qml to take into account this plugin&#8217;s app-wide scope.<\/p>\n\n\n\n<p>PSA: we have setup this <a href=\"https:\/\/github.com\/opengisch\/qfield-template-plugin\" data-type=\"link\" data-id=\"https:\/\/github.com\/opengisch\/qfield-template-plugin\">GitHub QField template plugin repository<\/a> to ease creation of plugins. Fork at will!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deploying app-wide plugins<\/h2>\n\n\n\n<p>While currently not as smooth as deploying a project plugin through QFieldCloud, app-wide plugins can be installed onto devices using a URL pointing to a zipped archive file containing the content of a given plugin directory. The zipped archive file can then be hosted on your own website, on a GitHub or GitLab repository, a Dropbox link, etc.<\/p>\n\n\n\n<p>In QField, open the plugins manager popup found in the settings panel, and use the \u2018Install plugin from URL\u2019 button to paste a URL pointing to a zipped plugin file.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"386\" src=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/application-plugins.png?resize=750%2C386&#038;ssl=1\" alt=\"\" class=\"wp-image-14481\" srcset=\"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/application-plugins.png?w=778&amp;ssl=1 778w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/application-plugins.png?resize=300%2C154&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/application-plugins.png?resize=768%2C395&amp;ssl=1 768w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<p>You should keep the zipped archive file name consistent for a better user experience, as it is used to determine the installation directory. This is an important consideration to take into account when offering plugin updates. If your zipped plugin file name changes, the plugin will not be updated but rather added to a new directory alongside the previously installed plugin.<\/p>\n\n\n\n<p>QField does allow for a version tag to be added to a zipped archive file name, provided it is appended at the end of the file name, preceded by a dash, and includes only numbers and dots. For example, myplugin-0.0.1.zip and myplugin-0.2.1.zip will install the plugin in the myplugin directory.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Empowering users as well as developers<\/h2>\n\n\n\n<p>Here at OPENGIS.ch, we believe this new plugin framework empowers not only users but also developers, including our very own ninjas! With plugin support, we now have the possibility to develop answers to specific field scenarios that would not necessarily be fit for QField-wide functionalities. We would love to hear your opinion and ideas. <\/p>\n\n\n\n<p>If you would like to supercharge your fieldwork and need some help, do not hesitate to <a href=\"https:\/\/opengis.ch\/#contact\" target=\"_blank\" rel=\"noreferrer noopener\">contact us<\/a> &#8211; your projects are our passion \ud83d\udc9a<\/p>\n\n\n\n<p>P.S. If you are developing a cool QField plugin, also let us know! \ud83d\ude42<br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bird SVG in video CC-BY <a href=\"https:\/\/svgrepo.com\/svg\/417419\/bird\">https:\/\/svgrepo.com\/svg\/417419\/bird<\/a><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Imagine digitizing photos of spotted birds onto a vector point layer with a single tap?<br \/>\nNow you can, thanks to QField\u2019s new plugin framework. Find all the details in our latest blog post! <\/p>\n","protected":false},"author":34,"featured_media":14512,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[38,165],"tags":[125],"class_list":["post-14471","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-qfield","category-highlights","tag-qgis-org"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/qfield-bird-plugin.gif?fit=640%2C360&ssl=1","jetpack-related-posts":[{"id":14431,"url":"https:\/\/www.opengis.ch\/it\/2024\/06\/11\/qfield-3-3-darien-it-is-just-the-beginning\/","url_meta":{"origin":14471,"position":0},"title":"QField 3.3 \u201cDari\u00e9n\u201d: It is just the beginning","author":"Mathieu","date":"11 Giugno 2024","format":false,"excerpt":"Say hello to the game-changing plugin framework \u2013 revolutionizing the way you can enhance your workflows. Plus, we've packed in tons of new features and improvements, including enhanced drawing capabilities. A #QGIS #fieldwork new era\ud83c\udf1f","rel":"","context":"In &quot;GIS&quot;","block_context":{"text":"GIS","link":"https:\/\/www.opengis.ch\/it\/category\/gis\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/33splash.png?fit=959%2C597&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/33splash.png?fit=959%2C597&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/33splash.png?fit=959%2C597&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2024\/06\/33splash.png?fit=959%2C597&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":15903,"url":"https:\/\/www.opengis.ch\/it\/2025\/08\/04\/qfield-3-7-haida-gawai-polishing-a-great-experience\/","url_meta":{"origin":14471,"position":1},"title":"QField 3.7 \u201cHaida Gwaii\u201d: Polishing a great experience","author":"Mathieu","date":"4 Agosto 2025","format":false,"excerpt":"QField 3.7 brings powerful updates with customizable photo stamping, an improved plugin manager, enhanced layer permissions, and smoother Bluetooth and vector tile support\u2014plus smarter QFieldCloud sync. A focused release that polishes and extends essential mobile GIS workflows.","rel":"","context":"In &quot;QField&quot;","block_context":{"text":"QField","link":"https:\/\/www.opengis.ch\/it\/category\/gis\/qfield\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/07\/splash.webp?fit=1200%2C736&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/07\/splash.webp?fit=1200%2C736&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/07\/splash.webp?fit=1200%2C736&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/07\/splash.webp?fit=1200%2C736&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/07\/splash.webp?fit=1200%2C736&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":15180,"url":"https:\/\/www.opengis.ch\/it\/2025\/03\/04\/qfield-3-5-fangorn-background-tracking-a-reality\/","url_meta":{"origin":14471,"position":2},"title":"QField 3.5 \u201cFangorn\u201d: Background tracking a reality!","author":"Mathieu","date":"4 Marzo 2025","format":false,"excerpt":"Track positions in the background, even when your device is locked, for more efficient fieldwork. Enjoy seamless WebDAV folder integration, grid decorations, improved QFieldCloud downloads, and new plugin enhancements, that allow for example OpenStreetMap search integration or AI prompting. Big thanks to our sponsors\u2014this release is a game-changer! \ud83d\ude80","rel":"","context":"In &quot;GIS&quot;","block_context":{"text":"GIS","link":"https:\/\/www.opengis.ch\/it\/category\/gis\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/02\/splash.png?fit=1200%2C736&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/02\/splash.png?fit=1200%2C736&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/02\/splash.png?fit=1200%2C736&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/02\/splash.png?fit=1200%2C736&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/02\/splash.png?fit=1200%2C736&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":15209,"url":"https:\/\/www.opengis.ch\/it\/2025\/03\/25\/unpacking-key-insights-from-our-qfield-workshop\/","url_meta":{"origin":14471,"position":3},"title":"Unpacking key insights from our QField Workshop","author":"Anja Ottiger","date":"25 Marzo 2025","format":false,"excerpt":"This year, OPENGIS.ch celebrated its 10th anniversary in Bern, with an afternoon full of workshops attended by clients, long-term friends, and colleagues. Here, we will give a glimpse of QField: its vision, where it's headed, and the exciting features future users can look forward to. QField was created on June\u2026","rel":"","context":"In &quot;Newsletter 2025 March&quot;","block_context":{"text":"Newsletter 2025 March","link":"https:\/\/www.opengis.ch\/it\/category\/newsletter\/newsletter-2025-march\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/03\/qfield-rapidmapper.webp?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/03\/qfield-rapidmapper.webp?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/03\/qfield-rapidmapper.webp?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/03\/qfield-rapidmapper.webp?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/03\/qfield-rapidmapper.webp?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":18134,"url":"https:\/\/www.opengis.ch\/it\/2026\/02\/12\/qfield-search-and-routing-plugins-updates\/","url_meta":{"origin":14471,"position":4},"title":"QField search and routing plugins updates","author":"Mathieu","date":"12 Febbraio 2026","format":false,"excerpt":"Throughout the first month of 2026, our ninjas added a nifty set of improvements to three useful plugins that we love: the GeoMapFish Search, OpenStreetMap Nominatim Search, and OSRM Routing plugins. These plugins all provide genuinely useful functionalities as well as being great showcases of how easy it is to\u2026","rel":"","context":"In &quot;Uncategorised&quot;","block_context":{"text":"Uncategorised","link":"https:\/\/www.opengis.ch\/it\/category\/uncategorised\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2026\/02\/top.png?fit=1200%2C733&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2026\/02\/top.png?fit=1200%2C733&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2026\/02\/top.png?fit=1200%2C733&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2026\/02\/top.png?fit=1200%2C733&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2026\/02\/top.png?fit=1200%2C733&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":15627,"url":"https:\/\/www.opengis.ch\/it\/2025\/06\/02\/xlsform-converter-unlock-a-world-of-surveys-with-our-brand-new-qgis-plugin\/","url_meta":{"origin":14471,"position":5},"title":"XLSForm Converter: unlock a world of surveys with our brand new QGIS plugin","author":"Mathieu","date":"2 Giugno 2025","format":false,"excerpt":"Easily bring your XLSForm surveys into the QGIS and QField ecosystem. The plugin converts spreadsheets into fully prepared QGIS projects\u2014with media support, automatic form configuration, and one-click upload to QFieldCloud. Migrating to QField was never easier!","rel":"","context":"In &quot;Processing&quot;","block_context":{"text":"Processing","link":"https:\/\/www.opengis.ch\/it\/category\/gis\/qgis\/processing\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/05\/xlsformconverter-qgis-qfield.webp?fit=1098%2C859&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/05\/xlsformconverter-qgis-qfield.webp?fit=1098%2C859&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/05\/xlsformconverter-qgis-qfield.webp?fit=1098%2C859&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/05\/xlsformconverter-qgis-qfield.webp?fit=1098%2C859&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.opengis.ch\/wp-content\/uploads\/2025\/05\/xlsformconverter-qgis-qfield.webp?fit=1098%2C859&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_shortlink":"https:\/\/wp.me\/pbdBtI-3Lp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/posts\/14471","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/comments?post=14471"}],"version-history":[{"count":32,"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/posts\/14471\/revisions"}],"predecessor-version":[{"id":14550,"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/posts\/14471\/revisions\/14550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/media\/14512"}],"wp:attachment":[{"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/media?parent=14471"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/categories?post=14471"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.opengis.ch\/it\/wp-json\/wp\/v2\/tags?post=14471"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}