Meerdere invoerbestanden verwerken in één datamapping

Typische taken voor dataomzetting vereisen het verwerken van een groot aantal invoerbestanden die in batches worden ontvangen. Altova MapForce biedt functies waarmee u groepen bestanden met minimale tussenkomst kunt verwerken. Zo hebben we onlangs een set bestanden van de geheugenkaart van een digitale camera met GPS-ondersteuning gekopieerd. Elk .LOG-bestand is een CSV-bestand dat GPS-coördinaten bevat voor een specifieke route.

We hebben snel een conversieprocedure ontworpen om de CSV-gegevens om te zetten naar het XML-gebaseerde .gpx-formaat, en vervolgens alle drie de bestanden verwerkt om in één keer drie uitvoerbestanden te genereren:

Allereerst hebben we een wildcard-teken gebruikt in de bestandsnaam van het invoerbestand in het dialoogvenster "Eigenschappen" voor het invoercomponent van de mapping. Dit instrueert MapForce om elk bestand in de werkmap dat overeenkomt met het wildcard afzonderlijk te verwerken.

Als u een complexe conversie uitvoert, of als de invoerbestanden erg groot zijn, kunt u een unieke bestandsnaam gebruiken om de conversie-instellingen in te stellen. Zodra u tevreden bent met het resultaat, kunt u overschakelen naar een wildcard.

Functies voor bestandspaden

De ingebouwde MapForce-functiebibliotheek bevat functies voor bestandspaden waarmee we de namen van uitvoerbestanden kunnen beheren. Als we één uitvoerbestand definiëren, wordt dit aangevuld met nieuwe gegevens wanneer we elk volgend invoerbestand verwerken.

U kunt bestandspadfuncties combineren met andere stringfuncties om volledige controle te krijgen over de namen en locaties van de uitvoerbestanden. We hebben besloten om de uitvoerbestanden in dezelfde map te plaatsen als de invoerbestanden, maar om beschrijvender bestandsnamen te gebruiken en de bestandsextensie .gpx te gebruiken.

Het onderstaande fragment van de mapping gebruikt de functie voor het samenvoegen van strings, in combinatie met functies voor bestandspaden, om het uitvoerbestand "1211190converted.gpx" te genereren op basis van "1211190.LOG", en zo verder.

U kunt ook bestandspadfuncties gebruiken om strings te genereren en deze als uitvoer in te voegen. Het XML-schema voor .gpx-bestanden bevat een element voor metadata. We hebben besloten om de naam van het invoerbestand in de metadata op te nemen, om de uitvoerbestanden expliciet te koppelen aan de oorspronkelijke gegevens. Deze aanpak maakt het uitvoerbestand zelfdocumenterend en kan helpen bij het opsporen van fouten als u onverwachte uitvoer terug moet traceren naar de oorspronkelijke bron.

Het volgende fragment van de code voegt de naam van het bronbestand in een string en koppelt deze string aan het metagegevenselement <desc>:

De resulterende beschrijving staat op regel 4 van de "Voorbeeldweergave van de resultaten van de mapping":

[Afbeelding van voorbeeldgegevens met een bestandsnaam]

Het filteren van invoergegevens

De kern van deze datamapping vereiste een filter op het invoerbestand. De GPS-logbestanden van de camera worden volgens de specificatie van de National Marine Electronics Association (NMEA) opgeslagen. Een fragment van een van de invoerbestanden wordt hieronder weergegeven:

Na de eerste regel wordt elk geregistreerd punt beschreven door twee NMEA-zinnen, waarbij het type zin wordt aangegeven in het eerste veld. Elke GGA-zin bevat de tijd, breedtegraad, lengtegraad, hoogte en aanvullende gegevens over de nauwkeurigheid van de positiebepaling. Elke RMC-zin bevat de tijd, breedtegraad, lengtegraad en de datum.

Een RMC-zin bevat de minimale gegevens die we nodig hebben om een .gpx-bestand te genereren <trkpt> element, waardoor we een filter kunnen gebruiken om alleen die regels uit de invoer te selecteren, zoals hieronder wordt getoond:

Als het type bericht in het eerste veld van een rij "$GPRMC" bevat, wordt de rij doorgestuurd voor verwerking. Anders wordt de rij genegeerd.

De daadwerkelijke gegevens in het invoerbestand vereisten ook enige bewerking. Voor elke breedte- en lengtegraad moesten we meerdere velden in de bron combineren die graden, minuten en seconden definieerden, en deze omzetten naar decimale graden. We moesten de velden voor tijd en datum combineren en het resultaat opslaan in het ISO 8601-formaat, zoals vereist door .gpx, bijvoorbeeld 2012-11-19T20:43:23Z. We hebben elke van deze conversies gedefinieerd als gebruikersfuncties om hun complexiteit te isoleren en ze te scheiden van de hoofdfunctionaliteit van de kaartapplicatie.

Deze mapping biedt ook de mogelijkheid om de gebruikersfunctie getElevationUS die we eerder in de post "Verwacht het onverwachte - Altova MissionKit lost een probleem met getallenformaten op" hebben gedefinieerd, opnieuw te gebruiken. Deze keer hebben we de hoogtedata afgerond op drie decimalen, wat overeenkomt met het dichtstbijzijnde millimeter.

Het belangrijkste onderdeel van de data-omzetting van Camerlog naar GPX, met behulp van gebruikersfuncties, ziet er als volgt uit:

Hier is een van de uitvoerbestanden, waarin een <trk>, een <trkseg> en verschillende <trkpt> elementen worden weergegeven.

Het menu "Output" in MapForce biedt een selectie waarmee we de gegenereerde bestanden kunnen valideren aan de hand van het .gpx XML-schema:

Als u Altova MapForce wilt gebruiken om invoerbestanden in batches te verwerken voor uw eigen datamappingen, **klik hier om een gratis proefversie te downloaden.****