Marble/GeoData/GeoDataUse: Difference between revisions

From KDE Community Wiki
(Created page with '== Using GeoData == this page tries to summarise the use of GeoData classes in marble so that its implementation details can match the use cases, and understand if any what issu...')
 
m (9 revisions imported: Import from techbase...)
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
== Using GeoData ==
== Using GeoData ==


this page tries to summarise the use of GeoData classes in marble so that its implementation details can match the use cases, and understand if any what issues might arise from manipulating them otherwise.
This page tries to summarise the use of GeoData classes in marble so that its implementation details can match the use cases, and understand if any what issues might arise from manipulating them otherwise.


=== Use Cases ===
=== Use Cases ===
Line 10: Line 10:
#: It is expected in that regard that classes have shared data.
#: It is expected in that regard that classes have shared data.
#: Let's call this usecase the "ToolClass" usecase.
#: Let's call this usecase the "ToolClass" usecase.
 
# use {{class|GeoDataDocument|kdeedu|4.x}} as the root document of a "data file" in-memory representation, or even another grouping of information.
# use {{class|GeoDataDocument|kdeedu|4.x}} as the root of a "data file" in-memory representation, or even another grouping of information.
#: In this use case, there would exist a "tree" of data matching a logical grouping of information.
#: In this use case, there would exist a "tree" of data matching a logical grouping of information.
#: Let's call this usecase the "DataTree" usecase.
#: Let's call this usecase the "DataTree" usecase.


=== Actual Implemented Use Details ===
=== Actual Implemented Use Details ===
* GeoData classes have shared data, in the sense that e.g. copying a GeoDataFeature is a shallow copy, with deep copy happening when one of the instances need to modify a value.
* GeoData classes have shared data, in the sense that e.g. copying a GeoDataFeature is a shallow copy, with deep copy happening when one of the instances need to modify a value. This is all for the "ToolClass", and not much useful for the "DataTree". Pure parameter passing benefits from shallow copy.


* Reading a file with {{class|GeoParser|kdeedu|4.X}} creates a tree of data.
* {{class|FileManager|kdeedu|4.x}} uses {{class|FileLoader|kdeedu|4.x}} which build a {{class|GeoDataDocument|kdeedu|4.x}} from files it opens. It internally uses the {{class|GeoParser|kdeedu|4.x}} classes and framework for xml files. Those files then provided through the {{class|GeoDataTreeModel|kdeedu|4.x}} model.
This data is manipulated within a stack of {{class|GeoNode|kdeedu|4.x}}s and internally stored in {{qt|QVector}} of value types like QVector<GeoDataFeature>


* PlaceMarkManager creates its copy of any placemark in opened files
* {{class|PositionTracker|kdeedu|4.x}} keeps a document with past positions retrieved from {{class|PositionProviderPlugin|kdeedu|4.x}} plugins.


* Model classes (implementing Qt's model-view framework that is) serve as interface to GeoData classes, passing them through {{qt|QVariant}}s
* {{class|RoutingManager|kdeedu|4.x}} handles routing data in a document with instructions retrieved from Marble Runners Plugins which derive from {{class|MarbleAbstractRunner|kdeedu|4.x}}.


TODO others??
TODO others??
Line 30: Line 28:
In the past or present, some issues have appeared and need to be remembered/adressed:
In the past or present, some issues have appeared and need to be remembered/adressed:


* memory ownership is an issue to be determined depending on use case.
# memory ownership is an issue to be determined depending on use case.
 
# Compliance with KML spec is a priority, limiting differing needs.
* Compliance with KML spec is a priority, limiting differing needs.
 
* Parsing code is full of casts.
 
* storing e.g. an GeoDataPlacemark item in a QVector<GeoDataFeature> looks like a hairy solution, as QVector<T>::append will internally create a new T. In the shared data context this implies that we end up with an element of vector being a GeoDataFeature with a private member being a GeoDataPlacemarkPrivate.
 
=== Proposals ===
TODO

Latest revision as of 16:40, 25 October 2016

Using GeoData

This page tries to summarise the use of GeoData classes in marble so that its implementation details can match the use cases, and understand if any what issues might arise from manipulating them otherwise.

Use Cases

The use cases identified so far are:

  1. use any GeoData class as a convenient data holder in APIs.
    It is expected in that regard that classes have shared data.
    Let's call this usecase the "ToolClass" usecase.
  2. use GeoDataDocument as the root document of a "data file" in-memory representation, or even another grouping of information.
    In this use case, there would exist a "tree" of data matching a logical grouping of information.
    Let's call this usecase the "DataTree" usecase.

Actual Implemented Use Details

  • GeoData classes have shared data, in the sense that e.g. copying a GeoDataFeature is a shallow copy, with deep copy happening when one of the instances need to modify a value. This is all for the "ToolClass", and not much useful for the "DataTree". Pure parameter passing benefits from shallow copy.

TODO others??

Common Issues and Pitfalls

In the past or present, some issues have appeared and need to be remembered/adressed:

  1. memory ownership is an issue to be determined depending on use case.
  2. Compliance with KML spec is a priority, limiting differing needs.