En hyldest til folkene bag PROJ.4

En beretning fra FOSS4G-konferencen i Boston

Af: Bo Overgaard - 27. september 2017

Ved årets internationale open source-konference, FOSS4G, var lokalet stuvende fyldt til open source-udvikleren Howard Butlers oplæg om PROJ.4. Emnet var nørdet, og arrangørerne havde ikke forventet, at en gennemgang af noget så usexet som et projektionsbibliotek ville være et trækplaster - men det var det.

PROJ.4, grundkomponenten i næsten alt open source geo-software

I oplægget fortalte Howard historien om, hvordan Gerald Evenden i starten af 1980erne udviklede dette projektionsbibliotek, der i dag er grundkomponent i næsten alt open source geo-software.

Da Evenden går på pension i 1993, kunne PROJ.4 meget vel være gået på pension med ham. Heldigvis beslutter Frank Warmerdam at fortsætte med udviklingen af PROJ.4, hvilket han gør frem til 2011. I denne periode er der rigtig mange, der begynder at anvende biblioteket, og PROJ.4 udbygges til at understøtte en lang række projektioner og datum. Frank anvender selv PROJ.4 i en række projekter herunder i GDAL, som indgår i bl.a. QGIS og ArcGIS.

Under et OSGeo Code Sprint i 2016 tager Howard initiativ til at forbedre PROJ.4’s projektinfrastruktur, for blandt andet at sikre dokumentation på et moderne website. Dette var nødvendigt, da softwaren var skrevet og struktureret efter normerne i starten af 80erne - altså for næsten 35 år siden - og lang tid før web, Google og StackOverflow. Forbedringen skabte fornyet interesse for projektet, og udviklingen af PROJ.4 bevægede sig ind i en ny æra.

Dansk bidrag til fornyelse og forbedring af PROJ.4

Som dansker var det en fornøjelse at høre den store anerkendelse, der blev givet til Thomas Knudsen og Kristian Evers fra Styrelsen for Dataforsyning og Effektivisering (SDFE) for deres arbejde med PROJ.4 de seneste år. De to danskeres bidrag til at forny og forbedre en af de mest vitale dele af den infrastruktur, meget af vores GIS software bygger på, blev flere gange understreget. Det blev fremhævet, hvordan det danske team har porteret SDFEs gamle trlib-kode (KMStrans), der stammer tilbage fra starten af 60erne (dengang hvor det hed Geodætisk Institut). Det betyder, at PROJ.4 nu har understøttelse for 14-parameters time-dependent shifting.

Thomas og Kristian har ydet en stor indsats med kloge tanker, kode og som bidragsydere på PROJ.4-mailinglisten, hvor fornyelse ikke altid er lige værdsat. I det fyldte konferencelokale i Boston var der ingen tvivl om, at Howard, Kristian og Thomas høster anerkendelse - og så naturligvis en stor respekt til Gerald Evenden, der grundlagde PROJ.4. Som konferencens første keynote, Paul Ramsey, understregede i sin åbningstale, er det sådanne bidrag, der sikrer indflydelse - eller som han formulerede det “social capital” - i open source-verdenen.

Hverken Thomas eller Kristian var tilstede i Boston, men vi var flere danskere, der var stolte over, at de og SDFE bidrager til at videreudvikle en komponent, der er forudsætning for korrektheden af mange af de beregninger, vi efterhånden tager for givet.

Link til Howard Butler’s præsentation fra FOSS4G

Der er læsværdige bemærkning i koden med referencer til de navnkundige danskere Knud Poder og Karsten Engsager:


    **************************************************************
    Interfacing to a classic piece of geodetic software
    **************************************************************
    gen_pol is a highly efficient, classic implementation of a generic
    2D Horner's Scheme polynomial evaluation routine by Knud Poder and
    Karsten Engsager, originating in the vivid geodetic environment at
    what was then (1960-ish) the Danish Geodetic Institute.


    The original Poder/Engsager gen_pol implementation (where
    the polynomial degree and two sets of polynomial coefficients
    are packed together in one compound array, handled via a plain
    double pointer) is compelling and "true to the code history":
    It has a beautiful classical 1960s ring to it, not unlike the
    original fft implementations, which revolutionized spectral
    analysis in twenty lines of code.

    
    The Poder coding sound, as classic 1960s as Phil Spector's Wall
    of Sound, is beautiful and inimitable.
    On the other hand: For the uninitiated, the gen_pol code is hard
    to follow, despite being compact.

    
    Also, since adding metadata and improving maintainability
    of the code are among the implied goals of a current SDFE/DTU Space
    project, the material in this file introduces a version with a
    more modern (or at least 1990s) look, introducing a "double 2D
    polynomial" data type, HORNER.

    
    Despite introducing a new data type for handling the polynomial
    coefficients, great care has been taken to keep the coefficient
    array organization identical to that of gen_pol.
    Hence, on one hand, the HORNER data type helps improving the
    long term maintainability of the code by making the data
    organization more mentally accessible.

    
    On the other hand, it allows us to preserve the business end of
    the original gen_pol implementation - although not including the
    famous "Poder dual autocheck" in all its enigmatic elegance.


    **************************************************************

    The material included here was written by Knud Poder, starting
    around 1960, and Karsten Engsager, starting around 1970. It was
    originally written in Algol 60, later (1980s) reimplemented in C.
    The HORNER data type interface, and the organization as a header
    library was implemented by Thomas Knudsen, starting around 2015.

    **************************************************************

    Kig selv i koden på GitHub