Я вроде наконец-то понял всю суть импорта картинок с файлами привязок, поправьте меня если я не прав. А то мне больше спрашивать не у кого.
На входе - изображение (любое для файлов привязки TAB, так как они поддерживаются в [B]mappicex.h; [/B]и BMP для всех других файлов привязки - для упрощения, так как других простых функций кроме [B]picexLoadBmpToRstAndCompress[/B] (без HMAP) я не нашёл/не осилил как пользоваться).
и файл привязки. Сложные форматы с данными о привязке внутри (GeoTIFF - это то что я знаю, PNG + GDAL - это я в комментариях в mappicex.h подсмотрел, с gdal не работал вообще не разбираюсь) не рассматриваем.
На выходе хотим привязанный файл rsw, с данными о проекции, который потом можно добавить на векторную карту.
Если файл привязки TAB - скармливаем его [B]picexLoadRasterToRswUn [/B]и идём дальше по своим делам.
Если файл привязки не TAB (и изображения BMP, в BMP в случае чего и сконвертировать можно):
[LIST=1]
[*]парсим файл сами, получаем информацию о СК
[*]Если СК - плоские прямоугольные (проекция, Гаусса-Крюгера, например), то есть данные о точках в метрах в какой-то проекции, то пункт 3, иначе пункт 6
[*]Забираем координаты в метрах углов изображения. Если изображение без поворота (в примере для Гаусса-Крюгера у двух нижних точек X (широта, вертикальная ось в проекции) одинаков ) то пункт 4, иначе (растр с поворотом) пункт 5
[*]Так как изображение без поворота, и в плоских прямоугольных координатах, то можно просто положить его в rsw, а затем установить данные о проекции. Вычисляем координаты юго-западного угла в метрах, вычисляем meterInPixelX(в гауссе крюгере это высота пикселя в метрах, то есть просто делим разность северозападного угла и юго-западного угла по широте (X) в метрах на высоту изображения), вычисляем meterInPixelY(в гауссе крюгере это ширина пикселя в метрах, разница по долготе в метрах делится на ширину изображения) и вызывается [B]picexLoadBmpToRstAndCompress[/B], после чего надо установить данные о СК - проекции в rsw, вызвав [B]mapSetRstProjectionDataPro[/B] с правильно заполненными MAPREGISTEREX, DATUM и ELLIPSOIDPARAM.
[*]Выходной растр будет с поворотом, а исходное изображение прямоугольное. Вычислим координаты юго-западного угла изображения в метрах, и загрузим изображение в rsw с помощью [B]picexLoadBmpToRstAndCompress[/B], отдав в качестве meterInPixelX и meterInPixelY единицу (1.0). Выставляем параметры СК в rsw с помощью [B]mapSetRstProjectionDataPro. [/B]Теперь у нас есть растр, у которого юго-западный угол правильный, а три других неправильные, но мы знаем их координаты. В гауссе крюгере, к примеру, координатами левого верхнего угла изображения будут координаты северозападного угла rsw. Так как мы задали размер пикселя метр на метр, то можем вычислить координаты северзападного угла просто прибавив по широте высоту изображения, а северо восточного - прибавив по широте высоту изображения, а по долготе ширину изображения. Используя функцию [B]AttachRswWithScalingAndRotationEx[/B] мы можем повернуть растр. В качестве двух исходных точек нужно отдать текущие координаты двух углов rsw (например, юго-западного и северовосточного), а в качестве двух желаемых точек нужно подставить координаты в метрах соответствующих углов изображения (левого нижнего правого верхнего в этом примере) из файла привязки. После этого ещё нужно рамку выставить, по которой будет отображаться растр, но я пока не умею это делать не добавляя rsw в район работ, так как для установки рамки требуется HOBJ, который не создать без векторной карты. Можно попробовать вручную заполнить соответствующую секцию в rsw файле, но в спецификации RSW 2.0 не описан формат хранения координат метрики замкнутого объекта, вероятно там массив DOUBLEPOINT, я не проверял. Без рамки у вас будет rsw в виде серого прямоугольника, в который вписан повернутый растр. Возможно рамка выставляется функцией AttachRswWithScalingAndRotationEx, я ещё не пробовал.
[*]Нужно сконвертировать СК из геодезической в какую-то проекцию, и работать в ней. Для примера - в проекцию Гаусса Крюгера на СК-42. После получения координат точек привязки в плоской проекции идём в пункт 3.
[/LIST]