Version 1 (modified by aghisla, 7 years ago) (diff)

moved dev content from GRASS wiki page

v.krige development

v.krige module has been developed in 2009 by Anne Ghisla during Google Summer of Code, mentored by Martin Landa.

See for information on installation and examples.

Bulletin Board

  • TODOs
    • [permanent todo] Cleanup code! Refactoring brings refactoring.
    • wxGUI: Split widget creation and layout - makes more readable code
    • Solve double parsing issue from RunCmd?. This leads to unnecessary double dependency check.
    • Continue integrating gstat functions - universal kriging first.
    • Add region resolution parameter in interface, showing the current value and allowing the user to modify it before kriging. High resolution slows down computation and give better results, but the user should have a clear feedback (I have been surprised by long runs more than once, because I was not aware of resolution).
    • wxGUI: GetVector?() should check for name validity, if a string is inserted?
    • Splash screen at module load will be implemented, but activated only if maps are more than a threshold number [Markus Neteler's suggestion]
    • Create a package to delegate dependencies check? (Stefan Krüger's suggestion)
  • BROKEN WINDOWS (from Martin Fowler's great book [0])
    • Imperfect logging - relies on RunCmd?...
    • The RBookPage::refresh() function has an endless cycle that keeps R graphics window responsive, even when that window has been closed by the user.
    • spgrass6::readVECT6() and mapset name - see this thread.
    • Rewrite v.krige in order to remove R dependency. It is not nice to add another program as dependency of a core module, a library is acceptable. Possible candidates:
      • gstat - Pro: it has native GRASS binding. Con: it is not developed as standalone program since 2003, in favour of R package gstat.
      • HPGL - Python/C++ library with Python API. Pro: Very rich set of functions and parallelisation. Con: Not supported on Mac

Weekly Reports, from SoC mailing list [4]

Report #1, 29 May

  • Done: I dedicated this week to documentation and discussion with users and developers.

Documentation: I'm reading "An introduction to Applied Geostatistics" [1], as I need to understand the theory behind kriging functions provided by R. On wxPython side, wxPython wiki is the main source of information, together with the code of GRASS wxPython interface. Community discussion: Feedback on interface design and R has been collected on various mailing lists. Also, a group of Portuguese ArcGIS users is interested in giving advice and test the new module.

  • Planned for next week

I plan to define which functions (and consequently which R packages) are to be included into the module. I plan to first include package automap (a wrapper for gstat), then gstat advanced functions, then geoR (an "ecological vicariant" of gstat), all alvailable on CRAN [5]. This will allow R users to keep using their preferred functions, as kriging results are implementation-dependent. Then I'll work on wxPython interface and get a draft as soon as possible. The interfaces that I use as model are ArcGIS' kriging module and Isatis. I won't replicate their structure, rather see what are the provided features and create v.autokrige interface following Humane Interface guidelines.

  • Bottleneck(s)

I'm experiencing some difficulties, mainly with wxPython, as I never used it before, and also with kriging, for the same reason :) but I'm not worried nor blocked. Last year GSoC project was a bet and I succeeded, this year it's even harder but I can rely on some more experience and, as always, on mentor and community support.

Report #2, 5 June

  • Done

Ended "An Introduction to Applied Geostatistics", great source of information of what the module is supposed to do. Now I can be both developer and user, not discarding any of the hints of other users. Some progress on the interface: I'm getting used of wxWidgets, even if the lack of a graphical designer slows down my work. wxDesigner seems good, but I think it is also good for me to learn the meaning of each line of code. The interface is quite ready for automap and GRASS integration.

  • Planned for next week

End of interface essential features and integration of automap most automated functions - ideally, the user will pick up the point layer containing data and press OK.

  • Bottleneck(s)

The only bottleneck is wxWidgets handling, but not so much as one week ago.

Report #2.5, 11 June

First of all, the interface is almost finished.. The layout includes a notebook with a page for each R package (automap, gstat and geoR), with the available options. Another layout could be a chiocebox wht the three packages on the top of Kriging section, that redraws the section accourding to the user's choice. Let me know which one do you prefer, feel free also to suggest something new.

The R-GRASS integration is on its way: autofitting the variogram on a map obtained from a DEM sample works in the proof of concept. rpy2 is extremely helpful and does not require much more code than the original R code. More to come in the next days.

The idea for variogram fitting is to plot the variogram in a new frame and add some controls like sliders and/or text boxes to fill up with nugget, sill and range values. This will involve Python graphics, not R, as the former is more flexible.

Report #3, 12 June

this weekly report will be very short, as yesterday I sent this email (Report 2.5, see above) and made little progress.

I'm having some problems in using autoKrige() function work, AFAIK because of projection information handling.

Report #4, 19 June

this week I made steady progress on the module. What I've done:

  • renamed the module v.krige, as its features will go beyond automatic kriging.
  • addition of choicebox with only numerical columns, as interpolation will be based on such variables
  • refactoring on interface population - more to come
  • started documentation page

Next week I plan to create the splashscreen during dependencies check and data load, and examine how to integrate gstat functions.

Report #5, 26 June (at OSGeo Bolsena Hacking Event)

just few minutes ago I succeded in completing the kriging procedure with gstat functions. It runs with a proof-of-concept dataset based on spearfish data. Martin helped me a lot in getting the standard wxGUI comboboxes to run properly with filters.

Next week I plan to adapt the interface to each R package's available options and consider how to solve lag issues in populating interface.

The blocking issue about autoKrige() and projections is no more valid as I create the grid myself based on GRASS region.

Report #6, 3 July

this week I worked on removing parameters hardwired in the code, binding them to the interface instead. Therefore, now it is possible use all widgets in gstat and automap pages, i.e. pick up the model from a list, set sill, nugget and range; set the output raster map name and eventually overwrite it. I'm going to implement CLI in these next days, it will very likely need to reorganise the code and clearly split interface from model.

Blocking issues - none.

Report #7, midterm, 10 July

this week has been full of improvements:

  • CLI with optional arguments is up and running
  • interface creation is no more delayed by vector map filtering
  • dependencies are checked all at the beginning - no risk of mid-process crashes if something is missing
  • automap page merged with gstat: they share the same algorithms
  • geoR page hidden, no implementation yet
  • deep refactoring of the rpy code, moved into a separate controller class
  • interface fills up all options except input data map - minimum interaction required (2 clicks)

next week I plan to implement the splashscreen and add further functionalities, hopefully different kriging techniques.

Blocking issues - none.

Report #8, 17 July

this week I added Command output tab and the option for block kriging, and updated documentation with more precise information on dependencies. I'll add splashscreen only as dependency check and command output will be fixed: next week I plan to work on these latter issues.

Nothing in particular is blocking progress, just some hardest stone sometimes.

Report #9, 24 July

this week I didn't work on the project because I attended last university course (botanical survey at Stelvio pass) and came back yesterday night.

Next week I plan to solve g.parser issue about double dependency check and the issue about sill, nugget and value parameters, that are optional for R. A general cleanup of the code is also welcome...

No blocking issues atm.

Report #10, 31 July

good news from v.krige:

  • fixed optional parameters also in interface - activated by a checkbox, otherwise R's NA value is correctly set
  • interactive variogram fit is on its way - stay tuned!

Next week I plan to set up interactive variogram using matplotlib functions and get the stabler code possible for feature freeze.

Report #11, 7 August

this week I worked on error handling by GUI, adding controls on input data and parameters and hiding Run and Plot buttons unless all options are suitable. Variogram plotting is on its way - I discarded matplotlib to avoid further dependencies, in favour of wx.lib.plot.

Report #12, 14 August

this is last SoC report - bringing variogram plotting into v.krige! After a long time searching for the lightest and cleanest implementation, R plotting raised as the best solution. On user demand, a R graphics window plots variogram and refreshes it, without interfering with wxGUI. Documentation includes a full example using Spearfish dataset and all informations about dependencies.

Many thanks to all who have helped me writing v.krige: GRASS and R developers, OSGeo SoC crew, wise friends, all testers. I hope this module will attract people towards GRASS and R, and provide a valid alternative to closed-source kriging tools.