[gdal-dev] pass gdal dataset as an argument from Python to C
Ari Jolma
ari.jolma at gmail.com
Tue Nov 28 00:02:10 PST 2017
Sean Gillies kirjoitti 27.11.2017 klo 20:46:
> I believe it's possible, yes, but it will be challenging. I'm not
> aware of anybody else doing this.
I'm doing it but in the Perl side. It's not impossible but Swig does
wrap the C pointers quite deep into the Perl object (it must be similar
in the Python Swig), so it needs a bit of research. However, I think it
is a quite stable way Swig does it and it's a matter of making a typemap
or a small function.
I think it is quite an important way to build extensions or link
systems. In my case I needed a system computing a raster dataset (band)
from other bands using a Bayesian network. I had built a Perl interface
to a proprietary Bayesian network engine, and thus I needed only the the
linkage code, which I built and is this:
https://github.com/ajolma/Geo-GDAL-Bayes-Hugin
See the typemap file for an example of a typemap (GDAL Band Perl object
to a C GDALBandH pointer).
Ari
>
> In
> https://github.com/OSGeo/gdal/blob/trunk/gdal/swig/python/extensions/gdal_wrap.cpp
> you can see examples of C++ functions that access the GDAL objects
> referenced by Python objects. This isn't a stable public API by any
> means, and therefore I hesitate to recommend it. Maybe Even would be
> able to comment more on how much support there is for the
> SWIG-generated C++ Python classes.
>
> I presume you've already tried writing "_my_module" in Python and
> found it to be too slow?
>
> Good luck!
>
> On Mon, Nov 27, 2017 at 9:34 AM, Shawn Gong <SGONG at mdacorporation.com
> <mailto:SGONG at mdacorporation.com>> wrote:
>
> Thank you Sean.
>
> What I want to do is to compile C/C++ code into "_my_c_module.pyd"
> and then to be called by Python. The Python code passes an
> argument to C/C++.
>
> I did previously by passing a file name (str) or a numpy array as
> argument to C/C++, and it is all good.
>
> This time I want to pass a gdal dataset as an argument:
>
> in Python:
>
> from osgeo import gdal
>
> import _my_c_module
>
> ds=gdal.Open('my_filename")
>
> result = _my_c_module.function1(ds)
>
> is this possible? If yes, how?
>
>
> Shawn
>
> ------------------------------------------------------------------------
> *From:* Sean Gillies [sean at mapbox.com <mailto:sean at mapbox.com>]
> *Sent:* November-27-17 11:09 AM
> *To:* Shawn Gong
> *Cc:* gdal-dev at lists.osgeo.org <mailto:gdal-dev at lists.osgeo.org>
> *Subject:* Re: [gdal-dev] pass gdal dataset as an argument from
> Python to C
>
> Shawn,
>
> PyObject and GDALDatasetH are incompatible types and you can't
> pass the former to a function that expects the latter. I'm
> surprised your program can compile with these incompatible types.
>
> Do you mean for your module to extend GDAL's Python bindings? If
> you look inside the C code of GDAL's Python bindings you may be
> able to see how to get the GDALDatasetH associated with a Python
> dataset object.
>
> Hope this helps,
>
>
> On Thu, Nov 23, 2017 at 1:25 PM, Shawn Gong
> <SGONG at mdacorporation.com <mailto:SGONG at mdacorporation.com>> wrote:
>
> Hi list,
>
> Has anyone done this before?
>
> I try to pass a gdal dataset as an argument from Python to C.
>
> in my C code, I have
>
> PyObject* py_my_func(PyObject *self, PyObject *args)
> {
>
> PyObject *poDataset;
>
> if(!PyArg_ParseTuple(args, "Odd", &poDataset, &a1, &a2))
> {
> return NULL;
> }
>
> my_func(poDataset, a1, a2);
> }
>
> void my_func(GDALDatasetH hDataset, double a1, double a2)
>
> {
>
> }
>
> Python crashed and hDataset was NULL
>
> Is it possible to do or I did something wrong?
>
> BTW, I have passed either a filename or a gdal array as an
> argument from Python to C, with success.
>
> Thanks,
> Shawn
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org <mailto:gdal-dev at lists.osgeo.org>
> https://lists.osgeo.org/mailman/listinfo/gdal-dev
> <https://lists.osgeo.org/mailman/listinfo/gdal-dev>
>
>
>
>
> --
> Sean Gillies
>
>
>
>
> --
> Sean Gillies
>
>
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/gdal-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20171128/44373d26/attachment-0001.html>
More information about the gdal-dev
mailing list