На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Импорт TIFF и публикация RSW на веб-сервисе

Поиск  Пользователи  Правила  Войти
Форум » Серверные приложения » GIS WebService
Страницы: Пред. 1 2 3
RSS
Импорт TIFF и публикация RSW на веб-сервисе
 
Продолжаются чудеса. Пытаюсь подключить файл привязки при импорте TIF. Для чего - чтобы скомпенсировать возможные проблемы с метаданными внутри растра. Чтобы получить безошибочный файл привязки, пытаюсь сгенерить его Панорамой-мини (самой последней, только что скачанной). Загружаю RSW, начинаю экспортировать его в TIF. Первая неприятность - не предлагают мне указать файл привязки, который нужно сгенерить. Замечу попутно, что и сам файл TIF сгенерён не был, то есть экспорт не состоялся, хотя никаких сообщений об ошибках я не увидел.
Ладно, открываю этот RSW Панорамой-мини под виндой, экспортирую в TIF - всё успешно, предлагается выбрать тип файла привязки и затем генерятся оба файла - и TIF, и привязка. Тип файла привязки выбирал TAB (для MapInfo). Имя файла в нём оказалось в кодировке WINDOWS-1251, но это не беда, ведь кодировка в файле указана. Для проверки выполняю обратный импорт только что сгенерённого растра несколько раз, вручную меняя координаты в файле привязки - всё в порядке, при импорте растр каждый раз оказывается в правильных координатах, т.е. содержимое файла привязки учитывается. Ради интереса пробую поменять в файле привязки имя файла TIF - Панорама это обнаруживает и игнорирует файл привязки, выполняет привязку по метаданным из TIF.

Теперь переношу полученный растр и файл привязки под Астру. Выполняю импорт TIF, указывая файл привязки. Специального чекбокса, как под виндой, указывающего, что нужно игнорировать данные привязки внутри TIF, в версии под Астрой нет - ну, значит так и надо, наверное признаком служит тот факт, что файл привязки указан. И что я вижу в результате? Вижу, что растр импортирован, но привязан по данным не из файла привязки, а из самого растра. Меняю данные внутри файла привязки, как делал это под виндой - никакой реакции, растр импортируется, но привязывается всегда в то же самое место.


Что будем делать, товарищи разработчики?
 
Цитата
Сергей Гамов написал:
Функция picexMakeLocationFileName, если ей первым параметром дать 1, т.е.

Код
 // Значения параметра type:
//        1 - файл привязки world file
 
формирует имя файла привязки, добавляя в конец "wld"  без  точки. Т.е. если файл с растром имеет имя temp149489003784187c770000.tif, то имя файла привязки будет temp149489003784187c770000wld, а не temp149489003784187c770000.wld. Для других значений первого параметра формат имени файла привязки обычный - temp149489003784187c770000.tab, temp149489003784187c770000.map.

Это ошибка?

Выполнили проверку. Имя файла привязки для указанного типа формируется без точки. Данное поведение будет исправлено в следующих версиях.

Цитата
Сергей Гамов написал:
Цитата
Сергей Гамов написал:
Спасибо, после выходных опробую.
Да, с этими дополнениями сработало. Насколько я понимаю, эти файлы должны бы были оказаться в составе пакета appservice.deb, но почему-то этого не случилось. Конечно, можно их включить в свой пакет. Но тогда в РКД нужно перечислить эти файлы и для каждого указать его назначение. Оно в настоящий момент известно только вам. Могу я рассчитывать на вашу поддержку?

Данные для библиотеки GDAL можно использовать из состава пакета libgdal20, поставляемого операционной системой. Например, с помощью создания символической ссылки командой:
Код
 ln -s /usr/share/gdal/2.1 /usr/appservice/GdalData
 
Чудеса продолжаются, но теперь с разоблачениями.

Отчаявшись импортировать растр из TIF с привязкой по файлу TAB теми функциями, которые предлагает API Панорамы (навроде picexLoadTiffToRstAndCompressExUn и тому подобных, имеющих параметр //    flagIgnoreGeoTiff - (0/1) флаг игнорирования GeoTiff тегов) решил пойти иным путём. Функции эти все до единой возвращают ноль, но picexGetLastError тоже возвращает ноль, то есть установить причину ошибки невозможно. Ну, всё как обычно, к этому уже начинаю привыкать.

Так вот, решил сначала конвертнуть TIF в JPG, а потом уже получившийся растр без всяких геопривязок внутри импортировать со своим файлом привязки. Для конвертирования использую GDALTranslate. Получил растр jpeg, прописал имя файла в файл привязки и вижу новое чудо - при импортировании таким образом любого TIF с одним и тем же файлом привязки они привязываются не туда, куда файл привязки указывает, а туда, куда указано в TIF. Но ведь я уже сконвертировал TIF в JPEG,эти данные утрачены! В чём дело?

А дело оказалось вот в чём. GDAL при конвертировании сгенерил помимо растра JPEG ещё и некий файл с именем filename.jpg.aux.xml, в котором записаны всякие данные для привязки. А Панорама при импорте этот файл прочла и привязала туда, куда указано в этом файле, файл же привязки filename.tab, лежащий рядом с filename.jpg проигнорирован начисто. И это при том, что про функцию picexLoadRasterToRswUn написано:
Код
// Приоритет изъятия параметров привязки:
//   1. Содержимое соответствующих тегов файлов TIF, IMG
//   2. Файл привязки world.file
//   3. Файл привязки TAB (MapInfo)
// Функция ищет файл привязки рядом с исходным файлом srcname,
// перебирая по приоритету типы файлов.
Про файл filename.jpg.aux.xml, обращаю внимание, ни намёком не упомянуто. Т.е. функция ведёт себя совершенно не так, как написано.

Мне, граждане разработчики, несложно удалить этот файл. Теперь, когда я знаю, в чём дело, спустя долгое потерянное время - несложно. Но вам-то почему сложно нормальную документацию сделать и вообще довести до ума свой продукт? Деньги ведь за него берёте настоящие и сразу, а исправления вносите когда-нибудь потом. Долго ещё пользователи сертифицированной версии будут вам тестировщиками работать, без возможности даже получить исправления? У вас что, собственных тестировщиков в штате нет?

Стыдоба.
 

Здравствуйте!

Выпущена новая версия программы «ГИС Панорама Мини» для Linux.

В новой версии  модернизирован интерфейс диалога импорта графических файлов в формат RSW при использовании файлов привязки. Выбор пользователем возможности использования данных из файла привязки выполняется установкой соответствующего флажка в диалоге. Программа выполняет поиск файла привязки по совпадению его имени с именем файла растра. Если в результате поиска найден единственный файл привязки, происходит автоматическая загрузка данных из этого файла. При существовании нескольких одноименных файлов привязки в различных форматах выбор файла, используемого при загрузке графических данных, предоставляется пользователю.  

 
Задача стояла импортировать графические файлы не с помощью  «ГИС Панорама Мини» для Linux, а своей программой - модулем к appservice. Панорама Мини использовалась только как подручное средство для просмотра сконвертированных файлов, генерации файлов привязки, проверки работоспособности подходов к решению задачи.

Так что если библиотеки, реализующие API остались без изменения, а просто в Панораме Мини сделан некий костыль, выполняющий конвертацию, то к решению задачи мы не приблизились ни на шаг.

Впрочем, даже если библиотеки изменились, то от этого тоже толку никакого. Как я уже писал, задача должна быть решена на сертифицированной версии. Я уже понял, что новой сертифицированной версии не дождаться, а уж обновления её по бюллетеню - тем более. Поэтому нужен работающий воркараунд.
 
Здравствуйте!
Для привязки растра можно воспользоваться таким решением:
- прочитать из файла привязки координаты юго-западного угла растра;
- выполнить привязку растра функцией mapSetRstLocation (rstapi.h).

Код
// Установить привязку растра в районе работ(в метрах)
// hMap - идентификатор открытых данных
// number - номер файла в цепочке
// location - координаты юго-западного угла растра(в метрах)
// При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapSetRstLocation(HMAP hMap, long int number, DOUBLEPOINT *location);
 
Здравствуйте. Совершенно неясно, как воспользоваться этой функцией в принятом алгоритме решения задачи. Вы обратите внимание на первое сообщение - откуда взяться параметрам для вызова этой функции?

Можете Вы сюда запостить фрагмент того кода, который иллюстрирует решение задачи, на котором Вы проверяли, что с этой функцией всё сработает?
Изменено: Сергей Гамов - 16.01.2022 08:03:16
 
Цитата
Вы писали:
Пытаюсь подключить файл привязки при импорте TIF. Для чего - чтобы  скомпенсировать возможные проблемы с метаданными внутри растра.
Если растр (TIF) содержит привязку, то внешний файл и вызов функции для привязки не нужны.
Если растр не содержит привязку, то ее можно установить функцией
Код
mapSetRstLocation(HMAP hMap, long int number, DOUBLEPOINT *location);
location - координаты юго-западного угла растра(в метрах)

Алгоритм выбора параметров зависит от типа файла.

Передайте конкретный файл привязки (они все текстовые) и мы подскажем в каких полях записаны координаты.
 
Цитата
Oleg Belenkov написал:
location - координаты юго-западного угла растра(в метрах)
С координатами вопросов нет. Есть вопросы по первым двум параметрам. Первый, hMap, должен быть ссылкой на открытую карту, наличие которой не предусматривается алгоритмом конвертации, который я описал в начале темы. Второй параметр тоже непонятно откуда взять. Вы всё-таки почтите первое сообщение темы, чтоб нам в одном контексте беседовать.
Цитата
Oleg Belenkov написал:
Передайте конкретный файл привязки (они все текстовые) и мы подскажем в каких полях записаны координаты.
Думаю, в этом нет необходимости. В панорамовском API есть функции для вычитывания данных из файлов привязки. Они ведь корректно работают под Astra Linux SE, не так ли?
Я, конечно, имею ввиду сертифицированную версию.
 
Цитата
Сергей Гамов написал:
С координатами вопросов нет. Есть вопросы по первым двум параметрам. Первый, hMap, должен быть ссылкой на открытую карту, наличие которой не предусматривается алгоритмом конвертации, который я описал в начале темы. Второй параметр тоже непонятно откуда взять.
Код
  // Открыть растровые данные
  // Возвращает идентификатор открытой растровой карты (TMapAccess*)
  // rstname - имя файла растровой карты
  // mode    - режим чтения/записи (GENERIC_READ, GENERIC_WRITE или 0)
  // GENERIC_READ - все данные только на чтение
  // При ошибке возвращает ноль

_MAPIMP HMAP _MAPAPI mapOpenRstUn(const WCHAR *rstname,long int mode);
Код
HMAP hmap = mapOpenRstUn(rstname, 0);

DOUBLEPOINT location;
location.X = 1234567.89;
location.Y = 8765432.01;

mapSetRstLocation(hmap, 1, &location);
mapSaveRst(hmap,1);
mapCloseData(hmap);
Страницы: Пред. 1 2 3
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности