Working with Web Data using Requests and Beautiful Soup
Imagine us in charge of developing a feature to show public data coming from a third party that doesn’t have an API. Let’s say, we need to show current and historical data of dam water level which we can access at http://www.dwa.gov.za/Hydrology/Weekly/ProvinceWeek.aspx?region=WC. We cannot possibly add the entry manually--it’s too time consuming. Some of us might choose the hard way to ask the data provider to make a public API, but there is a time constraint as we need it as soon as possible. One way to solve this is to use a method called “web scraping”.
Finding and fixing topology and geometry errors in QGIS
Google Maps, Google Earth, Uber are examples leading software/apps that are driven by GIS. They have allowed the ordinary person inadvertently to use GIS and appreciate its power without needing an understanding of the basics of GIS. Many people have taken the leap to using GIS by using some of the GIS capabilities in Google Earth.
CyanoLakes app 1.0 launched
We recently launched a mobile application that we developed with the CyanoLakes team. It adds a new dimension to the successful Cyanolakes web app, which has also received a facelift.
Publishing digital elevation in Cesium
Digital elevation data is now readily available from multiple sources. There are several tools that can help to visualise elevation data, Cesium being one. Recently I have been researching how to visualise terrain data in cesium and I could not see a complete example that I could replicate on my own. This post will highlight the steps I took to visualise elevation data in cesium.
QGIS Road to Nerdvana Episode 7: Logging Postgres Calls
In this episode, Tim Sutton will show you how to enable PostgreSQL logging and what underlying queries are generated by QGIS or any other PostgreSQL client.
QGIS Road to Nerdvana Episode 6 - Responding to feedback on Episode 5 Pull Request
This episode is a follow-up from Episode 5, responding to the feedback received.
Enjoy Episode 6 of our Road to Nerdvana!!
Mocking Requests with requests_mock
Testing is an important part of software development, be it manual or automated. Untested code is a ticking time bomb ready to explode at the worst time possible, hence each developer must be responsible for testing their code. It’s even better when they make automated tests for their code, even if it’s only unit tests.
QGIS Road to Nerdvana Episode 5: Tweaking the first run dialog
In this episode, Tim Sutton takes you along for the ride as he picks a long-time irritation in QGIS: The first run dialog. He tweaks it to make it look nice to submit it as a pull request to QGIS.
QGIS Road to Nerdvana Episode 4: Dealing with Issues
In this episode of QGIS road to Nerdvana, Tim Sutton will be showing you a workflow that will aid in dealing with issues encountered with a QGIS that compiles, so you won’t have to compile or debug.
QGIS Road to Nerdvana Episode 3: QGIS QA using astyle and pre-commit hooks
We are back with another episode of our roads to Nerdvana. On today’s episode Tim Sutton and world-renowned QGIS developer Matthias Kuhn walk you through the setup process for using 'astyle precommit hooks' - basically clever tools that will make sure your code looks smart and neat automatically so that nobody rejects it for not being standard compliant when you make a pull request.
QGIS Road to Nerdvana Episode 2: QGIS QtCreator Build on Pop_OS! 20.04
In today’s video blog, Tim Sutton shows you how to use QtCreator to build QGIS in a graphical development environment. The key entries used when setting up 3D support and here are the commands used to install QtCreator:
QGIS Road to Nerdvana Episode 1: QGIS Console Build
QGIS Road to Nerdvana is an exciting series of videos blogs that walk you through building QGIS environments to installing and using QTCreator all running on Ubuntu 20.04.
Calculating area of rasters in QGIS
QGIS raster functionality has come a long way and continues to improve. During my spare time, I am always on the lookout for interesting questions posed on https://gis.stackexchange.com.
Speeding up multiple web map service requests using Python's asyncio and aiohttp
Geocontext is a Django app that retrieves information from multiple web based services for a specific query point. The services are arranged into hierarchies with multiple services in a group and multiple groups in a collection. It currently supports querying WMS, WFS & ArcREST services.
School GIS task: create a 5km COVID-19 lockdown exercise buffer around your house
If you are doing some teaching in the classroom and some online and you are finding "blended teaching" overwhelming, this task is designed for asynchronous self study.
Does hosting your own server still make sense in 2020?
Client: We need a server for this project, and we want to host it in house
Consuming cloud optimised GeoTIFFs in QGIS Server
QGIS has been able to consume cloud optimised GeoTIFFs (COGs) since v3.2, through the data source manager. This article does not aim to explain what a COG is as various other articles have done so extensively.
Create a custom reference grid in qgis composer part 2
This is a follow-up post on https://kartoza.com/en/blog/create-a-custom-reference-grid-in-qgis-composer/.
Data defined settings for grid placements in QGIS 3.12
For a while now I have been trying to simulate the 1in50k topographic maps of South Africa. I started using QGIS since version 1.8 and I couldn't replicate the cartography on the topographic maps but over time as QGIS has matured, I could replicate the NGI maps. NGI uses proprietary software and then Adobe to fine-tune some context on the maps. For this exercise I used QGIS 3.12.0
Calculating intersects for map layers and map extent dynamically in QGIS
Recently we have been working on a project that involves simulating the 1 in 50k topographic maps in South Africa. Since we are using QGIS Server to print the map all the logic is set up in print composer. All maps generated are dynamic (users can select a specific area within South Africa to print) and QGIS Server will use the map template to generate the map.