Андрей Колесов
(декабрь 1999 года)
Наш читатель Игорь Гончаров из Томска прислал письмо, где обратил внимание на такую проблему:
"Прочитал в вашей статье, что Surfer 6.0 позволяет использовать файлы формата [.BNA] (Atlas Boundary) для ввода данных при расчете GRID. Но все мои попытки запустить на интерполяцию подготовленный векторизатором файл изолиний в формате .BNA не увенчались успехом. Как же тут быть?"
По-видимому, мы не очень точно описали возможности использования BNA-файлов. Эти файлы применяются для описания векторных данных (точек и линий) и имеют следующий формат для описания одного объекта:
"Pname", "Sname", Type/Length, x1, y2, ...xn, yn
где Pname и Sname — два идентификатора объекта, а Type/Length определяет тип объекта и число пар последующих за ним точек (x,y):
В стандартном варианте BNA-файл может использоваться только для обозначения линейных границ (то есть в том же качестве, что и BLN-файлы — традиционный формат Golden Software для описания границ) или для нанесения точечных изображений в POST-картах.
В то же время BNA-формат используют многие программы-векторизаторы для хранения данных о точечном считывании координат с помощью дигитайзеров. В частности, это могут быть координаты изолиний, которые хотелось бы использовать для получения GRID-файла.
Surfer не позволяет напрямую преобразовывать такой BNA-файл в формат DAT. Но для решения этой задачи можно использовать простую утилиту, код которой на Basic приведен на листинге 1. Этот код можно использовать как в Visaul Basic, так и в QBasic/DOS, который входит в состав всех операционных систем Windows (кроме NT).
Эта программа позволяет преобразовывать данные об изолиниях, представленные в форматах BNA (кроме объектов-эллипсов, которые в этом случае просто не нужны) в DAT-файлы. Обратите внимание, что для хранения величины параметра изолинии в утилите используется Pname (первый идентификатор объекта). Очевидно, что достаточно просто написать аналогичную программу для преобразования BLN-файлов.
Листинг 1. Утилита Line-Dat и пример преобразования форматов
DEFINT I-N ' Утилита Line-Dat.exe (вариант для MS DOS, QBasic) ' ' Преобразование файлов BNA в формат DAT ' =========================== ' Подразумечается, что файлы BNA содержат ' информацию о значениях функции в виде описания изолиний. ' Каждая изолиния представлена в виде отдельного объекта и ' значение параметра (число) записано ' в качестве первого имени объекта ' =================== ' ' Обращение к утилите: LINE-DAT.EXE LineFile [.BNA] ' Результат записывается в файл LineFile.DAT ' FileInp$ = COMMAND$: IF FileInp$ = "" THEN STOP Ins = INSTR(FileInp$, ".") FileOut$ = LEFT$(FileInp$, Ins) + "dat" OPEN "i", #1, FileInp$ OPEN "o", #2, FileOut$ ' DO WHILE NOT EOF(1) INPUT #1, Pname$: IF EOF(1) THEN EXIT DO INPUT #1, Sname$: IF EOF(1) THEN EXIT DO INPUT #1, iTypeLength IF iTypeLength = 2 THEN PRINT "Ошибка! В BNA-файле нельзя использовать эллипсы!" STOP END IF Yr = VAL(Pname$): iCount = ABS(iTypeLength) FOR i = 1 TO iCount INPUT #1, x, y: PRINT #2, x; y; Yr NEXT LOOP CLOSE END
Пример преобразования данных
"30","",-4 8.75,0 8.85,.17 8.97,.34 8.99,.36 "35","",-6 8.98,.75 8.84,.58 8.72,.42 8.6,.26 8.49,.08 8.47,-.01
8.75 0 30 8.85 .17 30 8.97 .34 30 8.99 .36 30 8.98 .75 35 8.84 .58 35 8.72 .42 35 8.6 .26 35 8.49 .08 35 8.47 -.01 35