예상치 못한 문제 해결: Altova MissionKit이 숫자 형식의 수수께끼를 풀어드립니다

외부 소스에서 데이터를 받을 때마다, 예상한 형태와 다르게 전달될 가능성이 있습니다. 이러한 경우, 실제 데이터 매핑 및 변환 솔루션을 안정적이고 신뢰성 있게 만들기 위해서는 특수한 조치가 필요할 수 있습니다.

저희는 블로그 게시물 GPS 데이터를 개선하기 위한 조회 테이블로서의 웹 서비스에서 설명한 MapForce 매핑을 사용하여 수십 개의 .gpx 파일을 처리했습니다. 각 파일에는 수백 개의 좌표 정보가 포함되어 있었습니다. 그러던 어느 날, 새로운 파일을 처리하던 중 아래의 오류가 발생하여 매핑 작업이 실패했습니다

(문맥에 따라 다양한 번역이 가능합니다. 가장 일반적인 경우를 예시로 들겠습니다.) 알토바 미션킷 (Altova MissionKit) ~의 특징을 결합하다 MapForce 그리고 XMLSpy, 저희는 문제의 원인을 신속하게 파악했고, 향후 지도 제작 프로젝트에서도 활용할 수 있는 해결책을 개발했습니다.

우선 입력 데이터에 문제가 있을 가능성을 의심하여, 해당 파일을 XMLSpy 프로그램으로 열어 확인했습니다. 그 결과, 파일이 올바른 XML 형식인지 확인했는데, 문제가 없는 것으로 나타났습니다 XML 유효성 검사 테스트 과정에서 문제가 발생했습니다. 다행히 각 데이터 포인트에는 고유한 타임스탬프가 기록되어 있어, 마지막으로 정상적으로 처리된 GPS 좌표를 나타내는 23:06:22라는 타임스탬프를 검색했습니다. 해당 타임스탬프는 입력 파일의 1772번째 줄에서 한 번 나타났습니다.

다음으로 확인한 원본 데이터에는 명확하게 잘못된 부분이 보이지 않았습니다. 우리는 단순히 다음 데이터 포인트를 주석 처리하고, 파일을 저장하여 매핑 과정을 다시 수행했습니다

이번에는 매핑 작업이 성공적으로 완료되었습니다

이제 우리는 웹 서비스에서 반환되는 데이터에 대해 의심을 품게 되었습니다. 미국 지질조사소의 국가 지리정보 프로그램에서 이 웹 서비스를 운영하고 있지만, 어쩌면 기본 데이터베이스에 잘못된 데이터가 포함되어 있을 수도 있습니다.

저희는 매핑 과정에 간단한 .csv 파일을 추가하여 대체 출력 방식을 구현하고, 각 좌표 세트에 대한 고도 결과를 매핑하여 웹 서비스의 출력 결과를 확인했습니다.

출력 파일인 "diagnostic.csv"의 한 줄에는 이전 오류 메시지에 언급된 동일한 값이 포함되어 있었습니다

이것은 과학적 표기법입니다! 웹 서비스에서 반환된 숫자가 과학적 표기법으로 형식화되어 있습니다! 저희 데이터 매핑 시스템에서 웹 서비스 결과를 처리하는 반올림 정밀도 기능은 소수점 입력값을 필요로 합니다.

데이터 타입 변환

한 가지 방법은 웹 서비스 결과를 과학적 표기법으로 인식하는 함수를 작성하고, 명시적으로 숫자 값을 계산하는 것입니다. MapForce 오류 메시지 "변환 오류"는 다음과 같은 경우에 발생할 수 있습니다 소수점 "'-1.24202767892712E-06' 값으로 실패했다"는 것은 더 간단한 해결책이 있다는 것을 시사합니다.

이제 데이터 유형에 대해 생각해 볼 좋은 시기입니다. 저희의 매핑에서 웹 서비스 구성 요소는 텍스트 문자열을 반환한다는 것을 명확하게 나타냅니다. MapForce는 매핑에서 문자열을 입력으로 사용하여 수학적 공식을 사용할 때, 자동으로 문자열을 십진수로 변환합니다. 대부분의 경우, 이러한 자동 변환은 데이터가 서로 다른 형식 간에 이동할 때 개발자가 명시적인 데이터 유형 변환에 대해 고민하는 것을 덜어줍니다. 저희의 매핑에서 MapForce는 과학적 표기법으로 표현된 데이터를 만나기 전에, 문자열을 십진수로 178번 성공적으로 변환했습니다.

일반적으로 과학적 표기법은 너무 크거나 너무 작은 숫자를 소수 형태로 편리하게 기록하기 어려울 때 사용됩니다. MapForce에서 "decimal" 데이터 유형은 숫자의 크기나 값을 지정하지 않습니다. 대신, 이 데이터 유형은 XML에서 사용되는 소수점 데이터 유형을 나타내며, 이는 소수점 기호를 사용하여 숫자를 표현하는 문자열입니다.

XML과 MapForce에서 "double" 데이터 유형은 과학적 표기법을 지원합니다. 과학적 표기법으로 표현된 데이터를 "double" 데이터 유형으로 명시적으로 변환한 후, 결과를 반올림할 수 있습니다.

이 솔루션은 텍스트 파일을 입력 및 출력으로 사용하여 간단한 매핑을 통해 쉽게 테스트할 수 있습니다. 우리는 반올림 정밀도 함수 앞에 간단한 변수를 삽입하고, 해당 변수의 데이터 유형을 "double"로 설정했습니다. 첫 번째 테스트에서는 USGS 웹 서비스에서 수집한 데이터를 입력으로 사용하여, 웹 서비스 호출을 중복해서 수행하지 않고 동일한 데이터를 처리했습니다. 이 매핑을 통해 새로운 입력 데이터를 사용하여 더 많은 테스트 케이스를 쉽게 구축할 수 있습니다.

매핑 작업이 성공적으로 완료되었으며, 다음과 같은 결과가 생성되었습니다

사용자 정의 함수를 만드세요

사용자 기능 MapForce에서 정의된 매핑 규칙은 하나의 매핑 파일에 저장되며, 함수 라이브러리에 추가되어 다른 매핑 파일에서도 여러 사용자가 함께 사용할 수 있습니다. 사용자 정의 함수는 복잡한 작업을 묶어 처리하는 역할을 하며, 대규모 매핑 설계의 전체 데이터 흐름을 더욱 명확하게 파악하는 데 도움을 줍니다.

우리는 이미 경도에 따라 동부 또는 서부 미국 지역에 적합한 데이터베이스를 선택하여 간단한 웹 서비스 호출을 수정했습니다. 이제 결과에 명시적인 데이터 유형을 추가하면 getElevation 함수 호출이 더욱 복잡해집니다. 우리는 모든 것을 사용자 정의 함수 내에서 정의하기로 결정했습니다.

사용자 함수 적용하기

아래에 제시된 코드에서, 새로운 getElevationUS 함수를 추가했습니다.

여기서 우리는 웹 서비스에서 반환되는 고도를 처음부터 반올림한 이유를 다시 한번 생각해 볼 필요가 있습니다. 웹 서비스는 미터 단위로 값을 반환하며, 소수점 두 자리, 즉 센티미터 단위는 반 인치보다 훨씬 작은 값입니다.

"getElevationUS" 함수 내에 반올림 기능을 포함시킬 수도 있었지만, 원본 고도 데이터를 반올림하지 않는 것이 향후 데이터 매핑에 더 유용할 것으로 판단했습니다.

다음은 수정된 매핑 결과를 보여주는 것으로, 문제의 원인이 되었던 동일한 .gpx 파일을 사용했습니다. 오류 발생 전에 마지막으로 정상적인 좌표를 찾기 위해 사용했던 시간 정보인 23:06:22를 출력 파일에서 검색했습니다. 902번째 줄부터 시작하는 다음 지점이 오류가 발생한 지점입니다.

처음에 우리는 이 모든 노력이 고작 0에 가까운 높이 변화로 귀결된다는 사실에 실망했습니다. 그런 다음, 의심스러운 좌표를 구글 지도에 표시해 보았습니다

일부 구간은 조류의 영향을 받는 해안 지역을 가로지르는 다리를 따라 이어졌습니다. 향후 데이터 매핑에서 getElevationUS 함수를 다시 사용하지 않더라도, 다른 여행에 대한 다른 .gpx 파일들이 다른 조류 지역을 지나게 될 가능성이 높으며, 이 과정에서 매우 작은 고도 값을 생성할 수 있습니다.

자신의 데이터 매핑을 위해 ** Altova MissionKit 의 도구를 사용하여 사용자 정의 함수를 만들고 싶다면, 무료 평가판을 다운로드하려면 여기를 클릭하세요..**