ffi-gdal 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.devcontainer/Dockerfile +9 -0
- data/.devcontainer/devcontainer.json +98 -0
- data/.github/CODEOWNERS +1 -0
- data/.github/workflows/codacy.yml +3 -3
- data/.github/workflows/codeql.yml +4 -4
- data/.github/workflows/continuous-integration.yml +30 -19
- data/.github/workflows/dependency-review.yml +2 -2
- data/.github/workflows/specs-in-docker.yml +12 -6
- data/.gitignore +4 -1
- data/Changelog.md +45 -4
- data/Gemfile +4 -2
- data/README.md +35 -0
- data/bin/rake +1 -1
- data/bin/rspec +1 -1
- data/bin/rubocop +1 -1
- data/lib/ext/numeric_as_data_type.rb +1 -1
- data/lib/ffi/cpl/vsi.rb +10 -0
- data/lib/ffi/gdal/gdal.rb +9 -2
- data/lib/ffi/gdal/grid_data_metrics_options.rb +27 -5
- data/lib/ffi/gdal/grid_inverse_distance_to_a_power_options.rb +30 -10
- data/lib/ffi/gdal/grid_moving_average_options.rb +30 -5
- data/lib/ffi/gdal/grid_nearest_neighbor_options.rb +24 -4
- data/lib/ffi/gdal/internal_helpers/gdal_version.rb +15 -0
- data/lib/ffi/gdal/internal_helpers/layout_version.rb +9 -0
- data/lib/ffi/gdal/internal_helpers/layout_version_resolver.rb +24 -0
- data/lib/ffi/gdal/internal_helpers.rb +11 -0
- data/lib/ffi/gdal/utils.rb +984 -0
- data/lib/ffi/gdal/version.rb +1 -1
- data/lib/ffi/gdal.rb +3 -1
- data/lib/ffi/ogr/core.rb +1 -1
- data/lib/ffi/ogr/srs_api.rb +17 -0
- data/lib/gdal/cpl_error_handler.rb +30 -15
- data/lib/gdal/exceptions.rb +35 -16
- data/lib/gdal/extensions/color_table/extensions.rb +1 -1
- data/lib/gdal/extensions/gridder.rb +4 -0
- data/lib/gdal/geo_transform.rb +13 -0
- data/lib/gdal/grid_algorithms/algorithm_base.rb +35 -0
- data/lib/gdal/grid_algorithms/inverse_distance_to_a_power.rb +3 -7
- data/lib/gdal/grid_algorithms/metric_average_distance.rb +5 -4
- data/lib/gdal/grid_algorithms/metric_average_distance_pts.rb +5 -4
- data/lib/gdal/grid_algorithms/metric_count.rb +5 -4
- data/lib/gdal/grid_algorithms/metric_maximum.rb +5 -4
- data/lib/gdal/grid_algorithms/metric_minimum.rb +5 -4
- data/lib/gdal/grid_algorithms/metric_range.rb +5 -4
- data/lib/gdal/grid_algorithms/moving_average.rb +3 -7
- data/lib/gdal/grid_algorithms/nearest_neighbor.rb +3 -7
- data/lib/gdal/grid_algorithms.rb +2 -0
- data/lib/gdal/internal_helpers.rb +8 -5
- data/lib/gdal/major_object.rb +6 -0
- data/lib/gdal/raster_band.rb +16 -12
- data/lib/gdal/utils/dem/options.rb +52 -0
- data/lib/gdal/utils/dem.rb +108 -0
- data/lib/gdal/utils/grid/options.rb +52 -0
- data/lib/gdal/utils/grid.rb +72 -0
- data/lib/gdal/utils/helpers/dataset_list.rb +43 -0
- data/lib/gdal/utils/helpers/string_list.rb +47 -0
- data/lib/gdal/utils/helpers.rb +11 -0
- data/lib/gdal/utils/info/options.rb +52 -0
- data/lib/gdal/utils/info.rb +40 -0
- data/lib/gdal/utils/nearblack/options.rb +52 -0
- data/lib/gdal/utils/nearblack.rb +119 -0
- data/lib/gdal/utils/rasterize/options.rb +52 -0
- data/lib/gdal/utils/rasterize.rb +108 -0
- data/lib/gdal/utils/translate/options.rb +52 -0
- data/lib/gdal/utils/translate.rb +72 -0
- data/lib/gdal/utils/vector_translate/options.rb +52 -0
- data/lib/gdal/utils/vector_translate.rb +132 -0
- data/lib/gdal/utils/warp/options.rb +52 -0
- data/lib/gdal/utils/warp.rb +118 -0
- data/lib/gdal/utils.rb +22 -0
- data/lib/gdal/warp_options.rb +11 -2
- data/lib/gdal.rb +1 -0
- data/lib/ogr/extensions/geometry/extensions.rb +0 -8
- data/lib/ogr/extensions/layer/extensions.rb +1 -1
- data/lib/ogr/extensions/spatial_reference/extensions.rb +4 -4
- data/lib/ogr/geometry.rb +9 -6
- data/lib/ogr/layer.rb +1 -1
- data/lib/ogr/spatial_reference.rb +27 -2
- metadata +32 -5
- data/.ruby-version +0 -1
- data/lib/gdal/grid_algorithms/data_metrics_base.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fca9f1c2bf76cee230d16796e3b8bc40e6c70316fdede5d3c8d8b7579acdb02
|
4
|
+
data.tar.gz: ecc6546df2d668dc6acb63a0b4fd927448d8b1b517fd2ea125b71b328cf8f5f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 797597b14f486516715e7997eae6b465ce7c1246f01db0b4687b369e82febf6100d0787f0f4096eb216bb6752d22fd58ced4b353eb143622c39136385fad3813
|
7
|
+
data.tar.gz: fbc4a452c6c95ccba8aa3a272419638702af8174d6b93f86b87dbeca92c9016cfe0ec7d35019f1146d4cbd5677e560afe0a09f97a6c6b2060450eefc0f00b0fc
|
@@ -0,0 +1,98 @@
|
|
1
|
+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
2
|
+
// README at: https://github.com/devcontainers/templates/tree/main/src/ruby
|
3
|
+
{
|
4
|
+
"name": "ffi-gdal dev container",
|
5
|
+
|
6
|
+
// Use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
7
|
+
"build": {
|
8
|
+
"dockerfile": "Dockerfile"
|
9
|
+
},
|
10
|
+
|
11
|
+
// Features to add to the dev container. More info: https://containers.dev/features.
|
12
|
+
// "features": {},
|
13
|
+
|
14
|
+
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
15
|
+
// "forwardPorts": [],
|
16
|
+
|
17
|
+
// Use 'postCreateCommand' to run commands after the container is created.
|
18
|
+
// "postCreateCommand": "ruby --version",
|
19
|
+
|
20
|
+
// Configure tool-specific properties.
|
21
|
+
"customizations": {
|
22
|
+
"vscode": {
|
23
|
+
// Basic settings config.
|
24
|
+
// Fine-tune inside the project with `.vscode/settings.json` file.
|
25
|
+
|
26
|
+
// Use 'settings' to set *default* container specific settings.json values on container create.
|
27
|
+
// You can edit these settings after create using File > Preferences > Settings > Remote.
|
28
|
+
"settings": {
|
29
|
+
// You could redefine this settings with .vscode/settings.json file
|
30
|
+
// inside workspace folder.
|
31
|
+
|
32
|
+
// Controls the maximum amount of lines the terminal keeps in its buffer.
|
33
|
+
// Increase to 50000. Default 1000 is too low.
|
34
|
+
"terminal.integrated.scrollback": 50000,
|
35
|
+
|
36
|
+
// Basic formatting settings.
|
37
|
+
"files.insertFinalNewline": true,
|
38
|
+
"files.trimTrailingWhitespace": true,
|
39
|
+
|
40
|
+
// Colorize and highlight bracket pairs.
|
41
|
+
"editor.guides.bracketPairs": true,
|
42
|
+
"editor.bracketPairColorization.enabled": true,
|
43
|
+
|
44
|
+
// Ruby LSP settings
|
45
|
+
"rubyLsp.formatter": "rubocop",
|
46
|
+
"rubyLsp.enableExperimentalFeatures": true,
|
47
|
+
|
48
|
+
// Ruby LSP advanced semantic highlighting.
|
49
|
+
"workbench.colorTheme": "Spinel",
|
50
|
+
|
51
|
+
"[ruby]": {
|
52
|
+
"editor.formatOnSave": true,
|
53
|
+
"editor.formatOnType": true,
|
54
|
+
"editor.defaultFormatter": "Shopify.ruby-lsp",
|
55
|
+
"editor.rulers": [
|
56
|
+
120
|
57
|
+
],
|
58
|
+
"editor.tabSize": 2,
|
59
|
+
"editor.insertSpaces": true,
|
60
|
+
"editor.semanticHighlighting.enabled": true,
|
61
|
+
"files.trimFinalNewlines": true
|
62
|
+
},
|
63
|
+
|
64
|
+
// Basic launch config for Run and Debug.
|
65
|
+
// Fine-tune inside the project with `.vscode/launch.json` file.
|
66
|
+
"launch": {
|
67
|
+
// Use IntelliSense to learn about possible attributes.
|
68
|
+
// Hover to view descriptions of existing attributes.
|
69
|
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
70
|
+
"version": "0.2.0",
|
71
|
+
"configurations": [
|
72
|
+
{
|
73
|
+
"type": "ruby_lsp",
|
74
|
+
"name": "Run specs with debugger",
|
75
|
+
"request": "launch",
|
76
|
+
"program": "bin/rspec"
|
77
|
+
},
|
78
|
+
{
|
79
|
+
"type": "ruby_lsp",
|
80
|
+
"name": "Run current spec line with debugger",
|
81
|
+
"request": "launch",
|
82
|
+
"program": "bin/rspec ${file}:${lineNumber}"
|
83
|
+
}
|
84
|
+
]
|
85
|
+
}
|
86
|
+
},
|
87
|
+
|
88
|
+
// Add the IDs of extensions you want installed when the container is created in the array below.
|
89
|
+
"extensions": [
|
90
|
+
"Shopify.ruby-extensions-pack",
|
91
|
+
"eamodio.gitlens"
|
92
|
+
]
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
97
|
+
// "remoteUser": "root"
|
98
|
+
}
|
data/.github/CODEOWNERS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* @turboladen @tindron
|
@@ -36,11 +36,11 @@ jobs:
|
|
36
36
|
steps:
|
37
37
|
# Checkout the repository to the GitHub Actions runner
|
38
38
|
- name: Checkout code
|
39
|
-
uses: actions/checkout@
|
39
|
+
uses: actions/checkout@v4
|
40
40
|
|
41
41
|
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
|
42
42
|
- name: Run Codacy Analysis CLI
|
43
|
-
uses: codacy/codacy-analysis-cli-action@
|
43
|
+
uses: codacy/codacy-analysis-cli-action@97bf5df3c09e75f5bcd72695998f96ebd701846e
|
44
44
|
with:
|
45
45
|
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
|
46
46
|
# You can also omit the token and run the tools that support default configurations
|
@@ -56,6 +56,6 @@ jobs:
|
|
56
56
|
|
57
57
|
# Upload the SARIF file generated in the previous step
|
58
58
|
- name: Upload SARIF results file
|
59
|
-
uses: github/codeql-action/upload-sarif@
|
59
|
+
uses: github/codeql-action/upload-sarif@v3
|
60
60
|
with:
|
61
61
|
sarif_file: results.sarif
|
@@ -38,11 +38,11 @@ jobs:
|
|
38
38
|
|
39
39
|
steps:
|
40
40
|
- name: Checkout repository
|
41
|
-
uses: actions/checkout@
|
41
|
+
uses: actions/checkout@v4
|
42
42
|
|
43
43
|
# Initializes the CodeQL tools for scanning.
|
44
44
|
- name: Initialize CodeQL
|
45
|
-
uses: github/codeql-action/init@
|
45
|
+
uses: github/codeql-action/init@v3
|
46
46
|
with:
|
47
47
|
languages: ${{ matrix.language }}
|
48
48
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
@@ -56,7 +56,7 @@ jobs:
|
|
56
56
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
57
57
|
# If this step fails, then you should remove it and run the build manually (see below)
|
58
58
|
- name: Autobuild
|
59
|
-
uses: github/codeql-action/autobuild@
|
59
|
+
uses: github/codeql-action/autobuild@v3
|
60
60
|
|
61
61
|
# ℹ️ Command-line programs to run using the OS shell.
|
62
62
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
@@ -69,6 +69,6 @@ jobs:
|
|
69
69
|
# ./location_of_script_within_repo/buildscript.sh
|
70
70
|
|
71
71
|
- name: Perform CodeQL Analysis
|
72
|
-
uses: github/codeql-action/analyze@
|
72
|
+
uses: github/codeql-action/analyze@v3
|
73
73
|
with:
|
74
74
|
category: "/language:${{matrix.language}}"
|
@@ -1,36 +1,47 @@
|
|
1
1
|
name: Continuous Integration
|
2
2
|
|
3
3
|
on:
|
4
|
+
pull_request:
|
4
5
|
push:
|
5
6
|
|
6
7
|
jobs:
|
7
|
-
|
8
|
-
name:
|
9
|
-
runs-on: ubuntu-
|
8
|
+
static_analysis:
|
9
|
+
name: Rubocop
|
10
|
+
runs-on: ubuntu-latest
|
10
11
|
steps:
|
11
|
-
- uses: actions/checkout@
|
12
|
+
- uses: actions/checkout@v4
|
12
13
|
- name: Set up Ruby
|
13
14
|
uses: ruby/setup-ruby@v1
|
14
15
|
with:
|
16
|
+
ruby-version: "3.3"
|
15
17
|
bundler-cache: true
|
16
|
-
- name:
|
17
|
-
run:
|
18
|
-
sudo apt-get update
|
19
|
-
sudo apt-get install -y libgdal-dev librttopo-dev
|
20
|
-
bundle install --jobs 4 --retry 3
|
21
|
-
- name: Run specs
|
22
|
-
run: bundle exec rspec spec --format RSpec::Github::Formatter --format progress
|
18
|
+
- name: Rubocop
|
19
|
+
run: bundle exec rubocop --format github --parallel
|
23
20
|
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
test:
|
22
|
+
strategy:
|
23
|
+
fail-fast: false
|
24
|
+
matrix:
|
25
|
+
# NOTE:
|
26
|
+
# - ubuntu-20.04 has GDAL 3.0.4, PROJ 6.3.1, GEOS 3.8.0
|
27
|
+
# - ubuntu-22.04 has GDAL 3.4.1, PROJ 8.2.1, GEOS 3.10.2
|
28
|
+
# - ubuntu-24.04 has GDAL 3.8.4, PROJ 9.4.0, GEOS 3.12.1
|
29
|
+
os: ["ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04"]
|
30
|
+
ruby-version: ["2.6", "2.7", "3.0", "3.1", "3.2", "3.3"]
|
31
|
+
name: "Test on Ruby ${{ matrix.ruby-version }} on ${{ matrix.os }}"
|
32
|
+
runs-on: ${{ matrix.os }}
|
27
33
|
steps:
|
28
|
-
-
|
34
|
+
- name: Install GDAL
|
35
|
+
run:
|
36
|
+
sudo apt-get install -y --no-install-recommends libgdal-dev
|
37
|
+
librttopo-dev
|
38
|
+
- uses: actions/checkout@v4
|
29
39
|
- name: Set up Ruby
|
30
40
|
uses: ruby/setup-ruby@v1
|
31
41
|
with:
|
42
|
+
ruby-version: ${{ matrix.ruby-version }}
|
32
43
|
bundler-cache: true
|
33
|
-
- name:
|
34
|
-
run:
|
35
|
-
|
36
|
-
|
44
|
+
- name: Run specs
|
45
|
+
run:
|
46
|
+
bundle exec rspec spec --format RSpec::Github::Formatter --format
|
47
|
+
progress
|
@@ -1,29 +1,35 @@
|
|
1
1
|
name: Specs in Docker
|
2
2
|
|
3
3
|
on:
|
4
|
+
pull_request:
|
4
5
|
push:
|
5
6
|
|
6
7
|
jobs:
|
7
|
-
|
8
|
-
name: Test
|
8
|
+
docker_test:
|
9
|
+
name: Docker Test (GDAL2)
|
9
10
|
runs-on: ubuntu-latest
|
10
11
|
steps:
|
11
|
-
- uses: actions/checkout@
|
12
|
+
- uses: actions/checkout@v4
|
12
13
|
- name: Set up Docker Buildx
|
13
14
|
id: buildx
|
14
15
|
uses: docker/setup-buildx-action@master
|
15
16
|
- name: Cache Docker layers
|
16
|
-
uses: actions/cache@
|
17
|
+
uses: actions/cache@v4
|
17
18
|
with:
|
18
19
|
path: /tmp/.buildx-cache
|
19
20
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
20
21
|
restore-keys: |
|
21
22
|
${{ runner.os }}-buildx-
|
22
23
|
- name: Log in to registry
|
23
|
-
run:
|
24
|
+
run:
|
25
|
+
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $
|
26
|
+
--password-stdin
|
24
27
|
- name: Build gdal2 image
|
25
28
|
run: |
|
26
29
|
docker compose version
|
27
30
|
docker compose build gdal2
|
28
31
|
- name: Run specs
|
29
|
-
run:
|
32
|
+
run:
|
33
|
+
docker compose run --rm gdal2 bundle exec rspec spec --format
|
34
|
+
RSpec::Github::Formatter --format progress
|
35
|
+
|
data/.gitignore
CHANGED
@@ -15,10 +15,13 @@
|
|
15
15
|
.byebug_history
|
16
16
|
.config
|
17
17
|
.idea/
|
18
|
+
.vscode/
|
18
19
|
.rake_tasks
|
19
20
|
.tags
|
20
21
|
.yardoc
|
21
22
|
|
23
|
+
.ruby-version
|
24
|
+
|
22
25
|
Gemfile.lock
|
23
26
|
InstalledFiles
|
24
27
|
_yardoc
|
@@ -39,4 +42,4 @@ valgrind_output.log
|
|
39
42
|
vendor/bundle
|
40
43
|
vendor/sigs
|
41
44
|
|
42
|
-
.odo
|
45
|
+
.odo
|
data/Changelog.md
CHANGED
@@ -6,20 +6,61 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to
|
7
7
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
8
8
|
|
9
|
-
## [1.0
|
9
|
+
## [1.1.0] — 2024-08-16
|
10
|
+
|
11
|
+
### Added
|
12
|
+
|
13
|
+
- [gh-76](https://github.com/telus-agcg/ffi-gdal/issues/76): Add VSI
|
14
|
+
`PathSpecificOptions` and `VSI` Credentials.
|
15
|
+
- [gh-78](https://github.com/telus-agcg/ffi-gdal/issues/78): Add basic support
|
16
|
+
for Ractors.
|
17
|
+
- [gh-79](https://github.com/telus-agcg/ffi-gdal/issues/79): Initial GDAL Utils
|
18
|
+
support.
|
19
|
+
- [gh-81](https://github.com/telus-agcg/ffi-gdal/issues/81): Improve support for
|
20
|
+
GDAL 3.
|
21
|
+
- [gh-84](https://github.com/telus-agcg/ffi-gdal/issues/84): Improve raster band
|
22
|
+
offset/scaling handling.
|
23
|
+
- [gh-86](https://github.com/telus-agcg/ffi-gdal/issues/86): Add
|
24
|
+
`GDAL::GeoTransform#==`.
|
25
|
+
- [gh-91](https://github.com/telus-agcg/ffi-gdal/issues/91): Add
|
26
|
+
`GDAL::MajorObject#description=`.
|
27
|
+
- [gh-100](https://github.com/telus-agcg/ffi-gdal/issues/100): Add support for
|
28
|
+
`GDT_Int8`, `GDT_UInt64`, `GDT_Int64`.
|
29
|
+
- [gh-103](https://github.com/telus-agcg/ffi-gdal/issues/103): Add support for
|
30
|
+
GDAL 3.6, 3.8.
|
31
|
+
|
32
|
+
### Changed
|
33
|
+
|
34
|
+
- [gh-102](https://github.com/telus-agcg/ffi-gdal/issues/102): Add support for
|
35
|
+
new CPLE error codes.
|
36
|
+
|
37
|
+
### Fixed
|
38
|
+
|
39
|
+
- [gh-74](https://github.com/telus-agcg/ffi-gdal/issues/74): Add
|
40
|
+
`/opt/homebrew/include` to header file search paths (fix for macOS).
|
41
|
+
- [gh-77](https://github.com/telus-agcg/ffi-gdal/issues/77): Fix logging for
|
42
|
+
debug messages.
|
43
|
+
|
44
|
+
## [1.0.4] — 2023-02-06
|
45
|
+
|
46
|
+
### Fixed
|
47
|
+
|
48
|
+
- Move `OGR::GeometryMixins::Extensions#is_3d?` to `OGR::Geometry`.
|
49
|
+
|
50
|
+
## [1.0.3] — 2023-01-27
|
10
51
|
|
11
52
|
### Fixed
|
12
53
|
|
13
54
|
- Fix nil return value from `OGR::GeometryMixins::Extensions#utm_zone` when
|
14
|
-
spatial_reference is not 4326.
|
55
|
+
`spatial_reference` is not 4326.
|
15
56
|
|
16
|
-
## [1.0.2]
|
57
|
+
## [1.0.2] — 2023-01-13
|
17
58
|
|
18
59
|
### Fixed
|
19
60
|
|
20
61
|
- Fix requires for lib/\*/extensions/all.rb.
|
21
62
|
|
22
|
-
## [1.0.1]
|
63
|
+
## [1.0.1] — 2023-01-13
|
23
64
|
|
24
65
|
### Fixed
|
25
66
|
|
data/Gemfile
CHANGED
@@ -12,7 +12,9 @@ gem "fakefs"
|
|
12
12
|
gem "rake"
|
13
13
|
gem "rspec", "~> 3.0"
|
14
14
|
gem "rspec-github"
|
15
|
-
|
16
|
-
|
15
|
+
# NOTE: Current versions of rubocop and rubocop-performance do not support Ruby 2.6.
|
16
|
+
# Allow some flexibility in the versions to avoid breaking the CI.
|
17
|
+
gem "rubocop", "<= 1.63.1"
|
18
|
+
gem "rubocop-performance", "<= 1.21.0"
|
17
19
|
gem "simplecov", "~> 0.9"
|
18
20
|
gem "thor"
|
data/README.md
CHANGED
@@ -2,6 +2,16 @@
|
|
2
2
|
|
3
3
|
Ruby wrapper around GDAL, using FFI, along with some helper methods.
|
4
4
|
|
5
|
+
## Status
|
6
|
+
|
7
|
+
[](https://badge.fury.io/rb/ffi-gdal)
|
8
|
+
[](https://github.com/telus-agcg/ffi-gdal/actions/workflows/continuous-integration.yml)
|
9
|
+
[](https://github.com/telus-agcg/ffi-gdal/actions/workflows/codeql.yml)
|
10
|
+
[](https://github.com/rubocop/rubocop)
|
11
|
+
|
12
|
+
- **GDAL 2.4** and **GDAL 3+** are supported.
|
13
|
+
- Ruby **2.6+** supported.
|
14
|
+
|
5
15
|
## Installation
|
6
16
|
|
7
17
|
Add this line to your application's Gemfile:
|
@@ -44,6 +54,31 @@ For classes that are enabled with logging capabilities, you can turn logging on
|
|
44
54
|
and off like `GDAL::RasterBand.logging_enabled = true`. If you're using ffi-gdal
|
45
55
|
in Rails, you can `GDAL::Logger.logger = Rails.logger`.
|
46
56
|
|
57
|
+
### Debugging
|
58
|
+
|
59
|
+
Additional error logging can be enabled through GDAL's [global configuration options](https://gdal.org/user/configoptions.html).
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
FFI::CPL::Conv.CPLSetConfigOption('CPL_DEBUG', 'ON')
|
63
|
+
FFI::CPL::Conv.CPLSetConfigOption('CPL_LOG_ERRORS', 'ON')
|
64
|
+
```
|
65
|
+
|
66
|
+
## Compatibility
|
67
|
+
|
68
|
+
CI is run against:
|
69
|
+
- Ruby 2.6, 2.7, 3.0, 3.1, 3.2, 3.3 for Ubuntu 24.04
|
70
|
+
(**GDAL 3.8.4**, PROJ 9.4.0, GEOS 3.12.1)
|
71
|
+
- Ruby 2.6, 2.7, 3.0, 3.1, 3.2, 3.3 for Ubuntu 22.04
|
72
|
+
(**GDAL 3.4.1**, PROJ 8.2.1, GEOS 3.10.2)
|
73
|
+
- Ruby 2.6, 2.7, 3.0, 3.1, 3.2, 3.3 for Ubuntu 20.04
|
74
|
+
(**GDAL 3.0.4**, PROJ 6.3.1, GEOS 3.8.0)
|
75
|
+
- Ruby 3.2 with **GDAL 2.4.4**
|
76
|
+
|
77
|
+
> GDAL itself has differences in behaviour between versions. This means that
|
78
|
+
> upgrading your project to a newer version of GDAL may introduce some
|
79
|
+
> breaking changes to your project due to changes in GDAL internal logic.
|
80
|
+
> We document these differences in the specs when possible.
|
81
|
+
|
47
82
|
## Contributing
|
48
83
|
|
49
84
|
1. Fork it ( https://github.com/telus-agcg/ffi-gdal/fork )
|
data/bin/rake
CHANGED
@@ -15,7 +15,7 @@ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
15
15
|
bundle_binstub = File.expand_path("bundle", __dir__)
|
16
16
|
|
17
17
|
if File.file?(bundle_binstub)
|
18
|
-
if
|
18
|
+
if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
|
19
19
|
load(bundle_binstub)
|
20
20
|
else
|
21
21
|
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
data/bin/rspec
CHANGED
@@ -15,7 +15,7 @@ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
15
15
|
bundle_binstub = File.expand_path("bundle", __dir__)
|
16
16
|
|
17
17
|
if File.file?(bundle_binstub)
|
18
|
-
if
|
18
|
+
if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
|
19
19
|
load(bundle_binstub)
|
20
20
|
else
|
21
21
|
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
data/bin/rubocop
CHANGED
@@ -15,7 +15,7 @@ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
15
15
|
bundle_binstub = File.expand_path("bundle", __dir__)
|
16
16
|
|
17
17
|
if File.file?(bundle_binstub)
|
18
|
-
if
|
18
|
+
if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
|
19
19
|
load(bundle_binstub)
|
20
20
|
else
|
21
21
|
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
@@ -4,7 +4,7 @@ module NumericAsDataType
|
|
4
4
|
# @param data_type [FFI::GDAL::GDAL::DataType]
|
5
5
|
def to_data_type(data_type)
|
6
6
|
case data_type
|
7
|
-
when :GDT_Byte, :GDT_UInt16, :GDT_Int16, :GDT_UInt32, :GDT_Int32
|
7
|
+
when :GDT_Byte, :GDT_Int8, :GDT_UInt16, :GDT_Int16, :GDT_UInt32, :GDT_Int32, :GDT_UInt64, :GDT_Int64
|
8
8
|
to_i
|
9
9
|
when :GDT_Float32, :GDT_Float64
|
10
10
|
to_f
|
data/lib/ffi/cpl/vsi.rb
CHANGED
@@ -111,6 +111,16 @@ module FFI
|
|
111
111
|
attach_function :VSICTime, %i[ulong], :strptr
|
112
112
|
attach_function :VSIGMTime, %i[pointer pointer], :pointer
|
113
113
|
attach_function :VSILocalTime, %i[pointer pointer], :pointer
|
114
|
+
|
115
|
+
# GDAL 3.5+ VSI Credentials (legacy, VSI PathSpecificOptions should be used instead in GDAL 3.6+)
|
116
|
+
attach_function :VSISetCredential, %i[string string string], :void
|
117
|
+
attach_function :VSIClearCredentials, %i[string], :void
|
118
|
+
attach_function :VSIGetCredential, %i[string string string], :string
|
119
|
+
|
120
|
+
# GDAL 3.6+ VSI PathSpecificOptions
|
121
|
+
attach_function :VSISetPathSpecificOption, %i[string string string], :void
|
122
|
+
attach_function :VSIClearPathSpecificOptions, %i[string], :void
|
123
|
+
attach_function :VSIGetPathSpecificOption, %i[string string string], :string
|
114
124
|
end
|
115
125
|
end
|
116
126
|
end
|
data/lib/ffi/gdal/gdal.rb
CHANGED
@@ -6,6 +6,7 @@ require_relative "color_entry"
|
|
6
6
|
|
7
7
|
module FFI
|
8
8
|
module GDAL
|
9
|
+
# rubocop:disable Metrics/ModuleLength
|
9
10
|
module GDAL
|
10
11
|
extend ::FFI::Library
|
11
12
|
ffi_lib [::FFI::CURRENT_PROCESS, ::FFI::GDAL.gdal_library_path]
|
@@ -13,19 +14,24 @@ module FFI
|
|
13
14
|
# ----------------------------------------------------------------
|
14
15
|
# Enums
|
15
16
|
# ----------------------------------------------------------------
|
16
|
-
|
17
|
+
# https://gdal.org/doxygen/gdal_8h_source.html
|
18
|
+
# NOTE: GDT_TypeCount is maximum type # + 1.
|
19
|
+
DataType = enum :GDT_Unknown, 0,
|
17
20
|
:GDT_Byte, 1,
|
21
|
+
:GDT_Int8, 14,
|
18
22
|
:GDT_UInt16, 2,
|
19
23
|
:GDT_Int16, 3,
|
20
24
|
:GDT_UInt32, 4,
|
21
25
|
:GDT_Int32, 5,
|
26
|
+
:GDT_UInt64, 12,
|
27
|
+
:GDT_Int64, 13,
|
22
28
|
:GDT_Float32, 6,
|
23
29
|
:GDT_Float64, 7,
|
24
30
|
:GDT_CInt16, 8,
|
25
31
|
:GDT_CInt32, 9,
|
26
32
|
:GDT_CFloat32, 10,
|
27
33
|
:GDT_CFloat64, 11,
|
28
|
-
:GDT_TypeCount,
|
34
|
+
:GDT_TypeCount, 15
|
29
35
|
|
30
36
|
AsyncStatusType = enum :GARIO_PENDING, 0,
|
31
37
|
:GARIO_UPDATE, 1,
|
@@ -679,5 +685,6 @@ module FFI
|
|
679
685
|
%i[pointer int int pointer int int int int],
|
680
686
|
:void
|
681
687
|
end
|
688
|
+
# rubocop:enable Metrics/ModuleLength
|
682
689
|
end
|
683
690
|
end
|
@@ -4,12 +4,34 @@ require "ffi"
|
|
4
4
|
|
5
5
|
module FFI
|
6
6
|
module GDAL
|
7
|
+
# FFI structure for GDALGridDataMetricsOptions.
|
8
|
+
# @see https://gdal.org/api/gdal_alg.html#_CPPv426GDALGridDataMetricsOptions
|
7
9
|
class GridDataMetricsOptions < FFI::Struct
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
DEFAULT_LAYOUT = [
|
11
|
+
:radius1, :double,
|
12
|
+
:radius2, :double,
|
13
|
+
:angle, :double,
|
14
|
+
:min_points, CPL::Port.find_type(:GUInt32),
|
15
|
+
:no_data_value, :double
|
16
|
+
].freeze
|
17
|
+
|
18
|
+
LAYOUT_VERSIONS = [
|
19
|
+
InternalHelpers::LayoutVersion.new(
|
20
|
+
version: "0000000", # Any old GDAL
|
21
|
+
layout: DEFAULT_LAYOUT
|
22
|
+
),
|
23
|
+
InternalHelpers::LayoutVersion.new(
|
24
|
+
version: "3060000", # GDAL 3.6.0
|
25
|
+
layout: [
|
26
|
+
:n_size_of_structure, :size_t,
|
27
|
+
*DEFAULT_LAYOUT,
|
28
|
+
:max_points_per_quadrant, CPL::Port.find_type(:GUInt32),
|
29
|
+
:min_points_per_quadrant, CPL::Port.find_type(:GUInt32)
|
30
|
+
]
|
31
|
+
)
|
32
|
+
].freeze
|
33
|
+
|
34
|
+
layout(*InternalHelpers::LayoutVersionResolver.resolve(versions: LAYOUT_VERSIONS))
|
13
35
|
end
|
14
36
|
end
|
15
37
|
end
|
@@ -4,17 +4,37 @@ require "ffi"
|
|
4
4
|
|
5
5
|
module FFI
|
6
6
|
module GDAL
|
7
|
+
# FFI structure for GDALGridInverseDistanceToAPowerOptions.
|
8
|
+
# @see https://gdal.org/api/gdal_alg.html#_CPPv438GDALGridInverseDistanceToAPowerOptions
|
7
9
|
class GridInverseDistanceToAPowerOptions < FFI::Struct
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
DEFAULT_LAYOUT = [
|
11
|
+
:power, :double,
|
12
|
+
:smoothing, :double,
|
13
|
+
:anisotropy_ratio, :double,
|
14
|
+
:anisotropy_angle, :double,
|
15
|
+
:radius1, :double,
|
16
|
+
:radius2, :double,
|
17
|
+
:angle, :double,
|
18
|
+
:max_points, CPL::Port.find_type(:GUInt32),
|
19
|
+
:min_points, CPL::Port.find_type(:GUInt32),
|
20
|
+
:no_data_value, :double
|
21
|
+
].freeze
|
22
|
+
|
23
|
+
LAYOUT_VERSIONS = [
|
24
|
+
InternalHelpers::LayoutVersion.new(
|
25
|
+
version: "0000000", # Any old GDAL
|
26
|
+
layout: DEFAULT_LAYOUT
|
27
|
+
),
|
28
|
+
InternalHelpers::LayoutVersion.new(
|
29
|
+
version: "3060000", # GDAL 3.6.0
|
30
|
+
layout: [
|
31
|
+
:n_size_of_structure, :size_t,
|
32
|
+
*DEFAULT_LAYOUT
|
33
|
+
]
|
34
|
+
)
|
35
|
+
].freeze
|
36
|
+
|
37
|
+
layout(*InternalHelpers::LayoutVersionResolver.resolve(versions: LAYOUT_VERSIONS))
|
18
38
|
end
|
19
39
|
end
|
20
40
|
end
|