Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error debugging basic geometries #346

Open
juliohm opened this issue Nov 21, 2022 · 9 comments
Open

Error debugging basic geometries #346

juliohm opened this issue Nov 21, 2022 · 9 comments
Labels

Comments

@juliohm
Copy link

juliohm commented Nov 21, 2022

Paste the following code inside a function and execute in debug mode in VSCode:

import ArchGDAL as AG
import GeoInterface as GI
import Tables

function test()
  data = AG.read("test1.gpkg")
  table = AG.getlayer(data, 0)
  cols = Tables.columns(table)
  geoms = Tables.getcolumn(cols, :geom)
  GI.geomtrait(geoms[1])
end

@enter test()

Step through the code until the line GI.geomtrait and the following cryptic error will be shown:

Error while running the debugger (consider adding a breakpoint for uncaught exceptions):
ERROR: MethodError: no method matching namemap(::Type{ArchGDAL.OGRwkbGeometryType})
The applicable method may be too new: running in world age 32436, while current world is 32543.
Closest candidates are:
  namemap(::Type{ArchGDAL.OGRwkbGeometryType}) at Enums.jl:201 (method too new to be called from this world context.)
  namemap(::Type{LibGit2.Consts.GIT_CREDTYPE}) at Enums.jl:201
  namemap(::Type{Pkg.Types.PreserveLevel}) at Enums.jl:201
  ...
Stacktrace:
  [1] _symbol(x::ArchGDAL.OGRwkbGeometryType)
    @ Base.Enums ./Enums.jl:29
  [2] show(io::IOContext{IOBuffer}, x::ArchGDAL.OGRwkbGeometryType)
    @ Base.Enums ./Enums.jl:37
  [3] show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
    @ Base ./show.jl:638
  [4] show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar})
    @ Base ./show.jl:1011
  [5] show_datatype
    @ ./show.jl:989 [inlined]
  [6] _show_type(io::IOContext{IOBuffer}, x::Type)
    @ Base ./show.jl:889
  [7] show(io::IOContext{IOBuffer}, x::Type)
    @ Base ./show.jl:881
  [8] show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar})
    @ Base ./show.jl:638
  [9] show_typealias(io::IOBuffer, name::GlobalRef, x::Type, env::Core.SimpleVector, wheres::Vector{TypeVar})
    @ Base ./show.jl:671
 [10] show_typealias(io::IOBuffer, x::Type)
    @ Base ./show.jl:724
 [11] _show_type(io::IOBuffer, x::Type)
    @ Base ./show.jl:886
 [12] show(io::IOBuffer, x::Type)
    @ Base ./show.jl:881
 [13] print(io::IOBuffer, x::Type)
    @ Base ./strings/io.jl:35
 [14] print_to_string(xs::Type)
    @ Base ./strings/io.jl:144
 [15] string
    @ ./strings/io.jl:185 [inlined]
 [16] construct_return_msg_for_var(state::VSCodeServer.DebugAdapter.DebuggerState, name::String, value::

The dataset to reproduce the error is here: https://github.com/JuliaEarth/GeoTables.jl/blob/master/test/data/test1.gpkg

The code above used to work just fine in previous versions of ArchGDAL.jl

@visr
Copy link
Collaborator

visr commented Nov 21, 2022

Which version of ArchGDAL does this still work on? Or could it be due to the new GDAL 3.6 build that comes with GDAL.jl v1.5, which was released recently?

@juliohm
Copy link
Author

juliohm commented Nov 21, 2022

Just to clarify, it works fine in execution mode. It is in debug mode that it fails. I don't recall running debug mode before, so maybe this never worked. I am using the latest stable release of the packages.

@juliohm
Copy link
Author

juliohm commented Nov 21, 2022

This attempt to debug the function came up because code that used to work fine in the previous version of ArchGDAL.jl stopped working. In particular, this geometry conversion is not working anymore:

https://github.com/JuliaEarth/GeoTables.jl/blob/a7353e5d5719f09f5a1ba192fdc640adeadbf52b/src/conversion.jl#L58-L72

The function hangs whenever I try to convert simple points in this data set.

You can reproduce with the master branch:

] add GeoTables#master
using GeoTables

# hangs with ArchGDAL v0.9.3 and GeoInterface v1.0.1
GeoTables.load("test1.gpkg")

@visr
Copy link
Collaborator

visr commented Nov 21, 2022

Ok for this hang it's still useful to know the extra information I asked for, to know whether it's ArchGDAL.jl or the GDAL build we ship.

@juliohm
Copy link
Author

juliohm commented Nov 21, 2022

From the output of ] st -m:

[c9ce4bd3] ArchGDAL v0.9.3
[add2ef01] GDAL v1.5.0
[a7073274] GDAL_jll v301.600.0+0
[cf35fbd7] GeoInterface v1.0.1

@visr
Copy link
Collaborator

visr commented Nov 21, 2022

Can you try GDAL.jl v1.4, and otherwise the previous ArchGDAL release?

@juliohm
Copy link
Author

juliohm commented Nov 21, 2022

Tried with GDAL.jl v1.4 and the same error occurs. Can you reproduce or is it only in my machine?

@juliohm
Copy link
Author

juliohm commented Nov 21, 2022

Also happens with ArchGDAL.jl v0.8 (the previous version) if I replace GI.geomtrait (which didn't exist) by GI.coordinates.

@visr
Copy link
Collaborator

visr commented Nov 22, 2022

I see the same thing I think, though a bit of a different stacktrace. I see you removed the test file, so here is a permalink: https://github.com/JuliaEarth/GeoTables.jl/blob/a7353e5d5719f09f5a1ba192fdc640adeadbf52b/test/data/test1.gpkg

import ArchGDAL as AG
import GeoTables
data = AG.read("test1.gpkg")
table = AG.getlayer(data, 0)
GeoTables.GeoTable(table)

This works fine if I put a semicolon after the last line to stop it from showing. But if not, I get this:

ERROR: KeyError: key GDAL.wkbPoint not found
Stacktrace:
  [1] getindex
    @ .\dict.jl:819 [inlined]
  [2] convert
    @ D:\visser_mn\.julia\dev\ArchGDAL\src\utils.jl:164 [inlined]
  [3] _infergeomtype(ptr::Ptr{Nothing})
    @ ArchGDAL D:\visser_mn\.julia\dev\ArchGDAL\src\types.jl:228
  [4] ArchGDAL.IGeometry(ptr::Ptr{Nothing})
    @ ArchGDAL D:\visser_mn\.julia\dev\ArchGDAL\src\types.jl:257
  [5] getgeom(feature::ArchGDAL.IFeature, i::Int32)
    @ ArchGDAL D:\visser_mn\.julia\dev\ArchGDAL\src\ogr\feature.jl:789
  [6] getgeom(feature::ArchGDAL.IFeature, name::Symbol)
    @ ArchGDAL D:\visser_mn\.julia\dev\ArchGDAL\src\ogr\feature.jl:810
  [7] getcolumn
    @ D:\visser_mn\.julia\dev\ArchGDAL\src\tables.jl:27 [inlined]
  [8] eachcolumns
    @ d:\visser_mn\.julia\packages\Tables\T7rHm\src\utils.jl:127 [inlined]
  [9] _buildcolumns(rowitr::ArchGDAL.IFeatureLayer, row::ArchGDAL.IFeature, st::Int64, sch::Tables.Schema{(:geom, :id, :x, :y, :z), nothing}, columns::NTuple{5, Tables.EmptyVector}, updated::Base.RefValue{Any})
    @ Tables d:\visser_mn\.julia\packages\Tables\T7rHm\src\fallbacks.jl:190
 [10] buildcolumns
    @ d:\visser_mn\.julia\packages\Tables\T7rHm\src\fallbacks.jl:220 [inlined]
 [11] columns
    @ d:\visser_mn\.julia\packages\Tables\T7rHm\src\fallbacks.jl:256 [inlined]
 [12] domain(t::GeoTables.GeoTable{ArchGDAL.IFeatureLayer})
    @ GeoTables d:\visser_mn\.julia\dev\GeoTables\src\geotable.jl:21
 [13] show(io::IOContext{Base.TTY}, #unused#::MIME{Symbol("text/plain")}, data::GeoTables.GeoTable{ArchGDAL.IFeatureLayer})
    @ Meshes d:\visser_mn\.julia\packages\Meshes\1bpiW\src\traits\data.jl:273

This looks like an issue in the enum mapping from ArchGDAL to GDAL, pointing to this line. It's a bit hard to follow though.

The debug issue might be the same, since the debugger tries to show more things.

@yeesian yeesian added the bug label Nov 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants