原文发布时间:2010-06-07
作者:Peri
众所周知,FME是进行空间数据转换最强大的工具,但是再强力的工具也可能出现信息丢失,那么FME在数据转换工作中,是否有信息丢失呢?你又如何进行信息丢失的判断以及控制,保证数据的质量呢?本文是我在参与数据转换项目中的一些心得体会,提出来跟大家一起分享,如果你有更好的方法,我们可以进一步的探讨!
1. 任务说明
- 目标:将dgn格式的地形图数据进行坐标系转换。
- 要求:对转换过程进行质量监控,提供转换清册,记录要素丢失信息。
- 方法(质量监控部分):日志分析。
2. 质量监控流程
图1 质量监控总体流程
(1)自定义批处理
FME的批处理有多种方式,选择自定义批处理脚本进行批处理的方式,目的是为了获取独立的转换日志,从而为转换清册服务。
批处理脚本详细说明请见博文《自定义FME批处理脚本》篇,主要部分定义如下:
@ECHO OFF
:: 下面定义输出文件目录,output是转换结果目录、 logs是独立日志目录、failed是错误数据目录、dxt是原始文件目录
SET OUTPUT=.\output
SET LOG=.\logs
SET FAILED=.\failed
SET SOURCE=.\dxt
SET REPORT=report1.txt
:: 创建目录.
MD %OUTPUT%
MD %LOG%
MD %FAILED%
:: 循环执行转换任务
::如果转换失败,将把文件写入到 FAILED 文件夹
FOR %%F IN ("%SOURCE%\*.dxt") DO (
fme ss.fmw --SourceDataset_DGNV8 "%%F"^
--DestDataset_DGNV8 "%OUTPUT%\%%~nF.dxt"^
--LOG_FILE "%LOG%\%%~nF_convert.log"
FIND "Translation was SUCCESSFUL" %LOG%\%%~nF_convert.log >> %REPORT%
IF !ERRORLEVEL! EQU 0 (
ECHO %%F PASSED convert with ERRORLEVEL !ERRORLEVEL! >> %REPORT%
) ELSE (
ECHO %%F FAILED LOADING with ERRORLEVEL !ERRORLEVEL! >> %REPORT%
FIND "|ERROR |" %LOG%\%%~nF_convert.log >> %REPORT%
COPY /Y "%%F" "%FAILED%"
)
)
批处理结果的logs文件夹,存放的都是原始文件的独立转换日志,如下图所示。
图2 转换结果目录 图3 转换日志列表
通过对日志文件进行分析,获取输入要素数,写出要素数,从而获取坐标转换过程要素丢失情况,如果发现有丢失,进行分析错误定位,重新导入,确保整个项目转换的正确性和准确性。FME处理模板如下图所示:
(3)转换清册
日志分析结果为Excel转换清册,记录文件名、读取要素数、写入要素数、丢失要素数等信息,内容如下图所示:
图5 转换清册
备注:NAME表示日志文件名,R表示读取源要素数,W表示写入目标要素数,num表示丢失要素数。
3. 结论
最后对转换过程中有丢失要素的数据进行单独分析,找出错误原因。我在对dgn格式的数据进行坐标转换时,丢失要素的大部分原因都是幽灵元素导致。通过日志分析的方式,对数据转换过程进行监测,很好的控制了数据转换过程,保证了数据的质量。