7 | | Like any other GIS needs GRASS GIS a reliable graphical user interface (GUI) to manage, display and interact with maps. The GRASS GIS core libraries should be used to implement a GUI to achieve good performance, especially in case of vector editing. The design of the GRASS core libraries targets the implementation of GRASS modules and is not designed for persistent applications like a GUI. The main problem for persistent application is, that several library functions will terminate the application in case of a fatal error. This approach makes the implementation of GRASS modules more easy, since the handling of fatal errors is mostly done by library functions, which is not usable in persistent applications. |
| 7 | Like any other GIS needs GRASS a reliable graphical user interface (GUI) to manage, display and interact with maps. The GRASS GIS core libraries should be used to implement a GUI to achieve good performance, especially in case of vector editing. The design of the GRASS core libraries targets the implementation of GRASS modules and is not designed for persistent applications like a GUI. The main problem for persistent application is, that several library functions will terminate the application in case of a fatal error. This approach makes the implementation of GRASS modules more easy, but is not applicable in persistent applications, since the handling of fatal errors is mostly done by library functions. |
11 | | The benefit of a RPC interface are |
12 | | * the ability to implement performant and well function persistent applications. |
| 11 | The benefits of a RPC interface are: |
| 12 | * the ability to implement fast and well function persistent client applications like GUI's |
| 13 | * Support for different programming languages on client side (Python, C++, Java, JavaScript) that will have access to GRASS library functions |
| 14 | * Implementation of GUI specific functionality, hence bundling of GRASS library functions on the server side |
| 15 | * Support for parallel reading of raster and vector maps using several server processes in parallel |
| 16 | * Providing a well designed object oriented interface to GRASS that will not change in case the underlying GRASS core libraries change |
| 17 | |
| 18 | == Implementation == |
| 19 | |
| 20 | I would strongly suggest to use apache thrift[1] to implement the RPC interface for GRASS core libraries. This framework support plenty of programming languages, adds minimal dependencies and provides platform independent RPC functionality (data serialization, IPC). |
| 21 | |
| 22 | |
| 23 | |
| 24 | [1] https://thrift.apache.org/ |