diff options
| author | Guilhem Moulin <guilhem@fripost.org> | 2024-06-20 15:34:18 +0200 | 
|---|---|---|
| committer | Guilhem Moulin <guilhem@fripost.org> | 2024-06-20 16:06:04 +0200 | 
| commit | 279424f34102fb87c86f70cee1425dc7cdab3814 (patch) | |
| tree | c90bee1b6b719d4c67467b408f12413271999321 | |
| parent | baec26389dacb5541966baf7b1aaad2636b8882c (diff) | |
Conditionally use GetComment()/SetComment() depending on the GDAL version.
OGRFieldDefn: add GetComment() / SetComment() methods were added in OGR
3.7.0, cf. https://github.com/OSGeo/gdal/blob/master/NEWS.md#core-5 .
Don't comment out comments on field definitions.  Instead we check the
GDAL/OGR version and ignore comments on field definitions if the OGR
version is too old.
| -rw-r--r-- | common.py | 15 | ||||
| -rw-r--r-- | config.yml | 144 | ||||
| -rwxr-xr-x | webmap-import | 10 | 
3 files changed, 95 insertions, 74 deletions
| @@ -186,6 +186,21 @@ def format_time(s):      h, m = divmod(m, 60)      return f'{h:02d}:{m:02d}:{s + fs:06.3f}' +# Return a boolean indicating whether the installer GDAL version is +# greater than or equal to the provider (maj, min, rev) triplet. +def gdal_version_min(maj=0, min=0, rev=0): +    if maj < 1 or (maj == 1 and min < 10): +        # GDAL_VERSION_NUM() macro was changed in 1.10.  That version +        # was released in 2013 so we blindly assume the installer +        # version is more recent +        return True + +    from osgeo import gdal +    version_cur = int(gdal.VersionInfo()); +    # cf. GDAL_COMPUTE_VERSION(maj,min,rev) in gcore/gdal_version.h.in +    version_min = maj*1000000 + min*10000 + rev*100 +    return version_min <= version_cur +  ######  # The function definitions below are taken from cpython's source code @@ -261,17 +261,17 @@ layers:            subtype: UUID            unique: true            #width: 36 -          #comment: Globalt unik identitet för generaliserat objekt +          comment: Globalt unik identitet för generaliserat objekt          - name: skapad            type: DateTime            #tz: local -          #comment: Tidpunkt när objektet ändrades +          comment: Tidpunkt när objektet ändrades          - name: lanskod            type: Integer            subtype: Int16            unique: true            nullable: false -          #comment: Tvåsiffrig kod för län +          comment: Tvåsiffrig kod för län      source:        # https://www.lantmateriet.se/sv/geodata/vara-produkter/produktlista/topografi-250-nedladdning-vektor/        cache: administrativindelning_sverige.zip @@ -299,17 +299,17 @@ layers:            subtype: UUID            unique: true            #width: 36 -          #comment: Globalt unik identitet för generaliserat objekt +          comment: Globalt unik identitet för generaliserat objekt          - name: skapad            type: DateTime            #tz: local -          #comment: Tidpunkt när objektet ändrades +          comment: Tidpunkt när objektet ändrades          - name: kommunkod            type: Integer            subtype: Int16            unique: true            nullable: false -          #comment: Fyrsiffrig kod för kommun +          comment: Fyrsiffrig kod för kommun      source:        # https://www.lantmateriet.se/sv/geodata/vara-produkter/produktlista/topografi-250-nedladdning-vektor/        cache: administrativindelning_sverige.zip @@ -435,67 +435,67 @@ layers:            type: Integer            unique: true            nullable: false -          #comment: Unik identitet +          comment: Unik identitet          - name: Beteckn            type: String            width: 12            unique: true            nullable: false -          #comment: Ärendebeteckning +          comment: Ärendebeteckning          - name: ArendeAr            type: Integer            subtype: Int16            nullable: false -          #comment: År anmälan/ansökan registrerades +          comment: År anmälan/ansökan registrerades          - name: Avverktyp            type: String            width: 254            nullable: false -          #comment: Vad anmälan/ansökan gäller +          comment: Vad anmälan/ansökan gäller          - name: Skogstyp            type: String            width: 254            nullable: false -          #comment: Anger om avverkning är inom fjällnära skog eller normal skog +          comment: Anger om avverkning är inom fjällnära skog eller normal skog          - name: Inkomdatum            type: Date            nullable: false -          #comment: Anmälan/ansökan inkom datum +          comment: Anmälan/ansökan inkom datum          - name: AnmaldHa            # XXX convert to m²?            type: Real            subtype: Float32            nullable: false -          #comment: Areal anmält (ha) +          comment: Areal anmält (ha)          - name: SkogsodlHa            type: Real            subtype: Float32            nullable: false -          #comment: Areal plantering (ha) +          comment: Areal plantering (ha)          - name: NatforHa            type: Real            subtype: Float32            nullable: false -          #comment: Areal naturlig föryngring (ha) +          comment: Areal naturlig föryngring (ha)          - name: AvvSasong            type: String            width: 254            nullable: false -          #comment: Avverkningssäsong +          comment: Avverkningssäsong          - name: ArendeStat            type: String            width: 254            nullable: false -          #comment: Ärendestatus +          comment: Ärendestatus          - name: AvvHa            type: Real            subtype: Float32 -          #comment: Avverkad areal (ha) +          comment: Avverkad areal (ha)          - name: Avverkning            type: String            width: 254            nullable: false -          #comment: Avverkningsamalan/NyAvverkningsanmalan +          comment: Avverkningsamalan/NyAvverkningsanmalan      source:        download:          url: 'https://geodpags.skogsstyrelsen.se/geodataport/data/sksAvverkAnm.zip' @@ -535,68 +535,68 @@ layers:            type: Integer            unique: true            nullable: false -          #comment: Unik identitet +          comment: Unik identitet          - name: Beteckn            type: String            width: 12            unique: true            # obfuscated codes are mapped to NULL            nullable: true -          #comment: Ärendebeteckning +          comment: Ärendebeteckning          - name: ArendeAr            type: Integer            subtype: Int16            nullable: false -          #comment: År anmälan/ansökan registrerades +          comment: År anmälan/ansökan registrerades          - name: Avverktyp            type: String            width: 254            nullable: false -          #comment: Vad anmälan/ansökan gäller +          comment: Vad anmälan/ansökan gäller          - name: Skogstyp            type: String            width: 254            nullable: false -          #comment: Anger om avverkning är inom fjällnära skog, ädellövskog eller normal skog +          comment: Anger om avverkning är inom fjällnära skog, ädellövskog eller normal skog          - name: AnmaldHa            type: Real            subtype: Float32            nullable: false -          #comment: Areal anmält (ha) +          comment: Areal anmält (ha)          - name: SkogsodlHa            type: Real            subtype: Float32            nullable: false -          #comment: Areal plantering (ha) +          comment: Areal plantering (ha)          - name: NatforHa            type: Real            subtype: Float32            nullable: false -          #comment: Areal naturlig föryngring (ha) +          comment: Areal naturlig föryngring (ha)          - name: Avvdatum            type: Date            nullable: false -          #comment: Datum för avverkning +          comment: Datum för avverkning          - name: KallaDatum            type: Date -          #comment: Ursprung för datum för avverkning (vid ”Uppgift saknas” är det vanligen Skogsstyrelsens personal som registrerat datumet) +          comment: Ursprung för datum för avverkning (vid ”Uppgift saknas” är det vanligen Skogsstyrelsens personal som registrerat datumet)          - name: KallaAreal            type: String            width: 62 -          #comment: Ursprung för areal avverkning (vid ”Uppgift saknas” är det vanligen Skogsstyrelsens personal som registrerat datumet) +          comment: Ursprung för areal avverkning (vid ”Uppgift saknas” är det vanligen Skogsstyrelsens personal som registrerat datumet)          - name: Forebild            type: String            width: 62 -          #comment: Namnet på den gamla bilden i skillnadsanalysen +          comment: Namnet på den gamla bilden i skillnadsanalysen          - name: Efterbild            type: String            width: 62 -          #comment: Namnet på den nya bilden i skillnadsanalysen +          comment: Namnet på den nya bilden i skillnadsanalysen          - name: ArealHa            type: Real            subtype: Float32            nullable: false -          #comment: Areal för ytan (ha) +          comment: Areal för ytan (ha)      sources:        - source: @@ -769,17 +769,17 @@ layers:            unique: true            nullable: false            width: 254 -          #comment: Benämning på området +          comment: Benämning på området          - name: Mineral            type: String            nullable: false            width: 254 -          #comment: Koncessionsmineral +          comment: Koncessionsmineral          - name: Applicant            type: String            nullable: false            width: 254 -          #comment: Sökandens namn +          comment: Sökandens namn          - name: ApplicationDate            type: Date            nullable: false @@ -791,7 +791,7 @@ layers:          - name: LastUpdated            type: Date            nullable: false -          #comment: Datum för senaste uppdatering +          comment: Datum för senaste uppdatering      source:        download:          module: webmap-download-mrr @@ -823,25 +823,25 @@ layers:            unique: true            nullable: false            width: 254 -          #comment: Benämning på området +          comment: Benämning på området          - name: Mineral            type: String            nullable: false            width: 254 -          #comment: Koncessionsmineral +          comment: Koncessionsmineral          - name: Owner            type: String            nullable: false            width: 254 -          #comment: Ägares namn +          comment: Ägares namn          - name: ValidFrom            type: Date            nullable: false -          #comment: När tillståndets giltighet börjar +          comment: När tillståndets giltighet börjar          - name: ValidTo            type: Date            nullable: false -          #comment: När tillståndets giltighet slutar +          comment: När tillståndets giltighet slutar          - name: DiaryNr            type: String            unique: true @@ -849,7 +849,7 @@ layers:          - name: LastUpdated            type: Date            nullable: false -          #comment: Datum för senaste uppdatering +          comment: Datum för senaste uppdatering      source:        download:          module: webmap-download-mrr @@ -884,10 +884,10 @@ layers:            type: String            nullable: false            width: 254 -          #comment: Benämning på området +          comment: Benämning på området          - name: DecisionDate            type: Date -          #comment: Beslutsdatum +          comment: Beslutsdatum          - name: DiaryNr            type: String            unique: true @@ -895,7 +895,7 @@ layers:          - name: LastUpdated            type: Date            nullable: false -          #comment: Datum för senaste uppdatering +          comment: Datum för senaste uppdatering      source:        download:          module: webmap-download-mrr @@ -931,17 +931,17 @@ layers:            unique: true            nullable: false            width: 254 -          #comment: Benämning på området +          comment: Benämning på området          - name: Mineral            type: String            nullable: false            width: 254 -          #comment: Koncessionsmineral +          comment: Koncessionsmineral          - name: Applicant            type: String            nullable: false            width: 254 -          #comment: Sökandens namn +          comment: Sökandens namn          - name: ApplicationDate            type: Date            nullable: false @@ -953,7 +953,7 @@ layers:          - name: LastUpdated            type: Date            nullable: false -          #comment: Datum för senaste uppdatering +          comment: Datum för senaste uppdatering      source:        download:          module: webmap-download-mrr @@ -985,17 +985,17 @@ layers:            unique: true            nullable: false            width: 254 -          #comment: Benämning på området +          comment: Benämning på området          - name: Mineral            type: String            nullable: false            width: 254 -          #comment: Koncessionsmineral +          comment: Koncessionsmineral          - name: Owner            type: String            nullable: false            width: 254 -          #comment: Ägares namn +          comment: Ägares namn          - name: LicenceID            type: String            unique: true @@ -1004,11 +1004,11 @@ layers:          - name: ValidFrom            type: Date            nullable: false -          #comment: När tillståndets giltighet börjar +          comment: När tillståndets giltighet börjar          - name: ValidTo            type: Date            nullable: false -          #comment: När tillståndets giltighet slutar +          comment: När tillståndets giltighet slutar          - name: DiaryNr            type: String            unique: true @@ -1016,7 +1016,7 @@ layers:          - name: LastUpdated            type: Date            nullable: false -          #comment: Datum för senaste uppdatering +          comment: Datum för senaste uppdatering      source:        download:          module: webmap-download-mrr @@ -1080,17 +1080,17 @@ layers:            unique: true            nullable: false            width: 254 -          #comment: Benämning på området +          comment: Benämning på området          - name: Mineral            type: String            nullable: false            width: 254 -          #comment: Koncessionsmineral +          comment: Koncessionsmineral          - name: Applicant            type: String            nullable: false            width: 254 -          #comment: Sökandens namn +          comment: Sökandens namn          - name: ApplicationDate            type: Date            nullable: false @@ -1102,7 +1102,7 @@ layers:          - name: LastUpdated            type: Date            nullable: false -          #comment: Datum för senaste uppdatering +          comment: Datum för senaste uppdatering      source:        download:          module: webmap-download-mrr @@ -1134,17 +1134,17 @@ layers:            unique: true            nullable: false            width: 254 -          #comment: Benämning på området +          comment: Benämning på området          - name: Mineral            type: String            nullable: false            width: 254 -          #comment: Koncessionsmineral +          comment: Koncessionsmineral          - name: Owner            type: String            nullable: false            width: 254 -          #comment: Ägares namn +          comment: Ägares namn          - name: LicenceID            type: String            unique: true @@ -1153,11 +1153,11 @@ layers:          - name: ValidFrom            type: Date            nullable: false -          #comment: När tillståndets giltighet börjar +          comment: När tillståndets giltighet börjar          - name: ValidTo            type: Date            nullable: false -          #comment: När tillståndets giltighet slutar +          comment: När tillståndets giltighet slutar          - name: DiaryNr            type: String            unique: true @@ -1165,7 +1165,7 @@ layers:          - name: LastUpdated            type: Date            nullable: false -          #comment: Datum för senaste uppdatering +          comment: Datum för senaste uppdatering      source:        download:          module: webmap-download-mrr @@ -1202,24 +1202,24 @@ layers:            unique: true            nullable: false            width: 254 -          #comment: Benämning på området +          comment: Benämning på området          - name: Mineral            type: String            width: 254 -          #comment: Koncessionsmineral +          comment: Koncessionsmineral          - name: Owner            type: String            nullable: false            width: 254 -          #comment: Ägares namn +          comment: Ägares namn          - name: ValidFrom            type: Date            nullable: false -          #comment: När tillståndets giltighet börjar +          comment: När tillståndets giltighet börjar          - name: ValidTo            type: Date            nullable: false -          #comment: När tillståndets giltighet slutar +          comment: När tillståndets giltighet slutar          - name: DiaryNr            type: String            unique: true @@ -1227,7 +1227,7 @@ layers:          - name: LastUpdated            type: Date            nullable: false -          #comment: Datum för senaste uppdatering +          comment: Datum för senaste uppdatering      source:        download:          module: webmap-download-mrr diff --git a/webmap-import b/webmap-import index 8a2848d..901360d 100755 --- a/webmap-import +++ b/webmap-import @@ -340,6 +340,9 @@ def validateSchema(layers, drvo=None, lco_defaults=None):      drvoSupportsNotNULLFields = getMetadataItem(drvo, GDAL_DCAP_NOTNULL_FIELDS)      drvoSupportsUniqueFields  = getMetadataItem(drvo, GDAL_DCAP_UNIQUE_FIELDS) +    # Cf. https://github.com/OSGeo/gdal/blob/master/NEWS.md +    hasCommentSupport = common.gdal_version_min(maj=3, min=7) # GetComment()/SetComment() added in 3.7.0 +      for layername, layerdef in layers.items():          create = layerdef.get('create', None)          if create is None or len(create) < 1: @@ -381,8 +384,11 @@ def validateSchema(layers, drvo=None, lco_defaults=None):                      elif k2 == 'alternativename' or k2 == 'alias':                          fld_def2['AlternativeName'] = v                      elif k2 == 'comment': -                        # (WARN support added in GDAL 3.7) -                        fld_def2['Comment'] = v +                        if hasCommentSupport: +                            fld_def2['Comment'] = v +                        else: +                            logging.debug('Ignoring Comment="%s" on field "%s" (OGR v%s is too old)', +                                v, fld_name, gdal.__version__)                      elif k2 == 'type':                          fld_def2['Type'] = parseFieldType(v) | 
