Marble/GeoPainter: Difference between revisions

From KDE Community Wiki
(Created page with "= Notes about GeoPainter = == Concepts == Horizon is a spherical projection concept to decide if a point is on the viewer's side or the other. It is NOT dependent on viewpor...")
 
m (2 revisions imported)
 
(One intermediate revision by the same user not shown)
(No difference)

Latest revision as of 08:05, 21 October 2016

Notes about GeoPainter

Concepts

Horizon is a spherical projection concept to decide if a point is on the viewer's side or the other.

   It is NOT dependent on viewport visibility

Dateline is a repeatX issue, so that a line crossing the dateline does not lead to a tear the whole map wide

Pole is an issue for projections which cannot draw it as a point (or even not at all)

Projection Drawing depends on tessellation Tessellation is a geodetic issue, determining how to connect points. Options:

       NoTessellation: straight screen coordinates lines between projected points
       Tessellate: great circle line between projected points
                   needs horizon and dateline check
       FollowLatitude: special case when latitude is same, walk on the latitude circle
       do we need rhumb line (line of constant compass course)??

Need to keep in mind that tessellating must keep polygons that still allow fill.

Current code

- systematically looks for poles and datelines, splitting the polyline into ones which don't cross idl or pole

- looking for datelines is a recursive calculus to identify latitude at which the idl is crossed

- iterates all points, determines

       - if horizon is crossed
       - if and which tessellation is needed
       - adds points to one QVector<QPointF>

Complications

- looking for dateline is not necessary for Spherical, very hard for NoTessellation (screen vs Geo space)

- because of repeatX we calculate all possible points depending on viewport radius, then let painter frame down to visible viewport