• Stars
    star
    160
  • Rank 234,703 (Top 5 %)
  • Language Roff
  • License
    MIT License
  • Created over 6 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Mesh Data Abstraction Library

Linux Tests MemCheck Tests Coverage Tests OSX Tests WIN Tests

Code Style Coverage Status Docs Build Anaconda-Server Badge

MDAL

Mesh Data Abstraction Library

MDAL is an OSGeo Community Project

MDAL OSGeo

Mailing List

To discuss development and usage, please use [email protected]

Supported Formats

You can use MDAL to load the following file formats:

  • 2DM: Mesh representation of various various hydrodynamic modelling packages (e.g. BASEMENT, TUFLOW)
  • XMS TIN: Mesh TIN representation in ASCII format
  • NetCDF: Generic format for scientific data. Examples can be found here
  • GRIB: Format commonly used in meteorology. Examples can be found here
  • XMDF*: Outputs of various hydrodynamic modelling packages (e.g. TUFLOW, HYDRO_AS-2D)
  • XDMF*: As an example, hydraulic outputs from BASEMENT 3.x modelling package
  • DAT: Outputs of various hydrodynamic modelling packages (e.g. BASEMENT, HYDRO_AS-2D, TUFLOW)
  • 3Di*: 3Di modelling package format based on CF Conventions
  • UGRID*: Unstructured Grid format based on CF Conventions
  • FLO-2D: Outputs of the FLO-2D modelling package
  • Selafin/Serafin: Outputs of the TELEMAC 2D hydrodynamic modelling package
  • HEC-RAS: Outputs of the HEC-RAS modelling package
  • SWW: Outputs of the ANUGA modelling package
  • Esri TIN: Format for storing elevation data as a triangulated irregular network
  • SAGA FLOW**: Rasters in the SAGA flow direction format
  • ADCIRC***: ADCIRC hydrodynamic model results
  • PLY: Stanford Polygon Format also useful for mesh created from point clouds by PDAL
  • DFSU*:DHI Flexible File Format (External Driver)
  • DFS2*:DHI Grid Series File (External Driver)
  • H2i*: Outputs of the H2i modelling package
  • MIKE 21: Mesh Text/plain file with *.mesh extension

* Data lazy loaded

** Formats can be preprocessed using QGIS Crayfish Mesh processing algorithm to one of supported formats

*** Results should pre pre-processed to become UGRID compliant

Format Mesh Frame Support Mesh Lazy Loaded 1D Data Support 2D Data Support 3D Data Support Data Lazy Loaded
2DM READ-WRITE N/A N/A N/A N/A N/A
XMS TIN READ-ONLY N/A N/A N/A N/A N/A
Esri TIN READ-ONLY N/A N/A N/A N/A N/A
GDAL-NetCDF READ-ONLY NO NO READ-ONLY N/A NO
GDAL-GRIB READ-ONLY NO NO READ-ONLY N/A NO
XMDF N/A N/A NO READ-ONLY READ-ONLY YES
XDMF N/A N/A NO READ-ONLY NO YES
DAT N/A N/A READ-ONLY READ-WRITE N/A NO
3Di READ-ONLY NO READ-ONLY READ-ONLY NO NO
UGRID READ-WRITE NO READ-ONLY READ-WRITE NO NO
FLO-2D READ-ONLY NO READ-ONLY READ-WRITE NO NO
Selafin READ-WRITE NO NO READ-WRITE NO NO
SWW READ-ONLY NO NO READ-ONLY NO NO
PLY READ-WRITE N/A READ-WRITE READ-WRITE READ-WRITE N/A
DFSU READ-ONLY N/A NO READ-ONLY READ-ONLY YES
DFS2 READ-ONLY N/A NO READ-ONLY N/A YES
H2i READ-ONLY NO NO READ-ONLY N/A YES
Mike21 READ-WRITE N/A N/A N/A N/A N/A

Standalone Installation

MDAL can be installed as a stand-alone package (i.e. outside of QGIS) using conda.

The package can installed by running :

conda install -c conda-forge mdal

This package provides the MDAL ABI through the mdal shared object( i.e. mdal.dll, libmdal.dylib or libmdal.so) and the mdalinfo CLI.

A friendly note about versions. The conda package is usually targetted at the latest version of GDAL on conda-forge. This is usually a later version than used by QGIS. Therefore, there may be some subtle differences in behaviour when loading e.g. GRIB files.

Versioning and integration in QGIS

QGIS contains internal copy of MDAL library in following versions:

QGIS MDAL Features
3.0.2 N/A 2D meshes
3.2.3 0.0.3
3.4.14 0.0.10
3.6.3 0.3.2 Many new formats supported
3.8.3 0.3.3
3.10.0 0.3.3
3.10.1 0.4.0 Save datasets for some formats
3.10.2 0.4.1
3.10.3 0.4.2
3.12.0 0.5.1 3D layered meshes
3.14.0 0.6.1 1D meshes
3.16.0 0.7.1 Mesh creation, PLY format
3.18.0 0.8.0 Dynamic drivers, DFSU format
3.20.0 0.8.1
3.22.0 0.9.x DFS2, DFSU 3D, PLY write
3.24.0 1.0.x TBD
3.24.1 0.9.90 H2i format
3.28.0 1.0.0 write dataset capability for UGRID format
3.28.2 1.0.1
3.28.4 1.0.2
3.30.0 1.0.2
3.36.0 1.1.0 Mike21 format support read/write
3.38.0 1.2.0 Groundwater / surface water meshes for 3Di format

versions X.Y.9Z are development versions or alpha/beta releases (e.g. 0.4.90, 0.4.91, ...)

Backporting

We maintain the version of MDAL used in current QGIS LTR version. For any CRITICAL bugfixes (e.g. crashes, coredumps, regressions, data corruption) we want to backport the code to MDAL LTR version. To do this, label your pull request with label "backport release-XXX". Once pull request is merged, mdal-bot will automatically create a pull request to specified branch. Note that the pull request must be squashed to 1 commit for automatic backport.

Development

Coding standards & Contribution

MDAL is an open-source project and all contributions to either documentation, format support, testing or code are more than appreciated. Any change to the code must go through Pull Request, followed by review by one of the MDAL core developers.

To be able to accept a pull request, please verify that:

  • code follows QGIS coding style
  • code is properly unit-tested with a set of small test files under tests/data/<format> (code coverage > 90%)
  • code is reasonably documented and easy to read
  • code compiles without any compilation warnings
  • no dead-code (e.g. unused functions) or commented out code
  • all new code or new dependencies (e.g. libraries) have GPLv2 compatible license
  • all tests pass
  • the code if properly formated (run ./scripts/check_all.bash)

Please respect our Contributor Covenant Code of Conduct

Build

Windows

For 64-bit version:

  • Install Microsoft Visual Studio 16 2019
  • Install OSGeo4W (64bit) to C:\OSGeo4W64
  • Run "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat -arch=x86" to initialize Visual Studio environment (or open VS terminal). For community version, run similar command "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat -arch=x86"
  • Create build directory mkdir build;cd build
  • Run (to get a Release build)
cmake -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=Rel  ^
    -DENABLE_TESTS=ON ^
    -DNETCDF_PREFIX="C:\OSGeo4W64" ^
    -DHDF5_ROOT="C:\OSGeo4W64" ^
    -DGDAL_DIR="C:\OSGeo4W64" ^
    -DGDAL_LIBRARY="C:\OSGeo4W64\lib\gdal_i.lib" ^
    -DGDAL_INCLUDE_DIR="C:\OSGeo4W64\include" ^
    -DLIBXML2_LIBRARIES="C:\OSGeo4W64\lib\libxml2.lib ^
    -DLIBXML2_INCLUDE_DIR="C:\OSGeo4W64\include\libxml2" ^
    -D EXTERNAL_DRIVER_DHI_DFS=OFF ^
    ..
  • Build the executables cmake --build . --config Release
  • Adjust the PATH (or copy the mdal.dll to folder test\Release) with command set PATH="C:\OSGeo4W64\bin;<your_build_dir>\build\tool\Release\;<your_build_dir>\build\mdal\Release;%PATH%"
  • Run the tests ctest -VV -C Release --exclude-regex mdal_dynamic**

Linux

install dependencies for drivers

sudo apt-get install libgdal-dev libhdf5-dev libnetcdf-dev libxml2-dev

and use cmake to generate build system

mkdir build;cd build
cmake -DCMAKE_BUILD_TYPE=Rel -DENABLE_TESTS=ON ..
make

MacOS

First you need to install qgis-deps dependencies,

To build, create build system with cmake and make sure you use dependencies from qgis-deps and not system ones

mkdir build;cd build
cmake -DCMAKE_PREFIX_PATH=/opt/QGIS/qgis-deps-0.5.3/stage -DCMAKE_BUILD_TYPE=Debug -GNinja -DENABLE_TESTS=ON ../
ninja

External Drivers

see DFSU

Tests

run ctest command in build directory ctest -VV

Code syntax

format code:

cd scripts
./check_all.bash

or use git pre-commit hook

cd MDAL
ln -s ./scripts/mdal_astyle.bash .git/hooks/pre-commit

Windows

On Windows, the code can be formatted using the following :

cd MDAL
powershell -ExecutionPolicy BYPASS scripts\check_all.ps1

More Repositories

1

input

Survey made easy (Android/iOS/Windows app)
C++
205
star
2

geodiff

Library for handling diffs for geospatial data
Python
89
star
3

mergin

Store and track changes to your geo-data
Vue
72
star
4

qgis-crayfish-plugin

Plotting and manipulating mesh data in QGIS.
Python
62
star
5

serval

QGIS plugin for setting raster pixel values
Python
38
star
6

mergin-db-sync

A tool for two-way synchronization between Mergin and a PostGIS database
Python
21
star
7

qgis-mergin-plugin

QGIS plugin for managing projects in Mergin
Python
20
star
8

qgis-xyz-tiles

A processing algorithm to generate xyz tiles from map/layer extent.
Python
20
star
9

qgis-quick-demo-app

Android GIS application with usage of QgsQuick
C++
20
star
10

ostranslator-ii

A graphical QGIS plugin for loading Ordnance Survey MasterMap into PostGIS.
Python
16
star
11

qgis-discovery-plugin

Provides search / gazetteer functionality in QGIS using PostGIS-based data
Python
15
star
12

qgis-vectortiles-styles

Collection of vector tiles styles for QGIS
QML
14
star
13

qgis-autotrace-plugin

An editing tool for QGIS that allows users to 'trace' new feature geometry based on existing features.
Python
12
star
14

input-sdk

SDK for building Input for mobile devices
Shell
10
star
15

mergin-py-client

Python client library for Mergin
Python
8
star
16

qgis-anuga-gui-plugin

Graphical ANUGA Interface
Python
6
star
17

qgis-geocat-plugin

Plugin for loading PostGIS layers based on a metadata search
Python
5
star
18

mergin-work-packages

Mergin Work Packages: manage field surveys for multiple teams
Python
5
star
19

qgis-landxml-mesh-plugin

Imports and Exports LandXML surfaces into QGIS mesh layers
Python
5
star
20

qgis-cmaps-region-generator-plugin

Automate merging features using a CSV file definition
Python
4
star
21

os2ogr

OS 2 OGR is a graphical interface for converting Ordnance Survey's GML/GZ files to OGR formats
Python
4
star
22

qgis-report-plugin

Report QGIS Plugin Issues with ease
Python
3
star
23

qgis-moor-tools-plugin

Tools for simplifying and automating common tasks for national parks and other protected areas.
Python
3
star
24

qgis-quick-demo-app-ios

iOS GIS application with usage of QgsQuick
C++
2
star
25

mergin-media-sync

Sync media files from Mergin projects to other storage backends
Python
2
star
26

qgis-constraint-checker-plugin

Generate reports of constraints applicable to an area of interest
Python
2
star
27

os-data-fetcher

A scipt for fetching and pre-processing os data and preparing it for use
Python
1
star
28

mergin-cpp-client

Mergin C++ Client
C++
1
star
29

qgis-nnpa-reporting

Report on species
Python
1
star