Задача - отобразить растр на карте Yandex.
Создал растр в CK-42
Создал растр в CK-42
17.05.2016 13:00:07
Задача - отобразить растр на карте Yandex.
Создал растр в CK-42 |
|
|
|
17.05.2016 13:01:34
далее выполняю алгоритм -
Описание алгоритма получения полноценного растра из графического файла BMP: 1. Конвертируем изображение растра из файла BMP в файл RSW. Используем одну из функций, объявленных в файле mappicex.h: picexLoadBmpToRstAndCompress, picexLoadBmpToRstAndCompressJPEG, LoadBmpToRstByPlace... В результате выполнения функции импорта получаем на диске файл RSW. 2. Открываем полученный растр RSW в отдельном документе вызовом функции mapOpenData() из mapapi.h. В результате выполнения функции получаем идентификатор (дескриптор) HMAP открытого документа. В документе у нас открыт только один растр. 3. Заполняем структуры MAPREGISTEREX, ELLIPSOIDPARAM, DATUMPARAM параметрами проекции и системы координат. 4. Устанавливаем параметры проекции и СК (системы координат) в растр RSW вызовом функций: mapSetRstProjectionData, mapSetRstEllipsoidParam, mapSetRstDatumParam. Функции, позволяющие установить параметры проекции и СК растра (и многое другое), объявлены в файле rstapi.h. Как правило, функции принимают на вход дескриптор открытого документа HMAP, который мы получили вызовом функции mapOpenData() (см. п.2), и номер растра в цепочке (документе), т.к. в документ можно добавить несколько растров. Номер растра в цепочке (документе) определяется вызовом функции mapGetRstNumberByName. 5. Закрываем документ с растром для освобождения ресурсов и памяти: Код // Закрыть все данные электронной карты // hmap - идентификатор открытых данных // Идентификатор HMAP становится недействительным ! _MAPIMP void _MAPAPI mapCloseData(HMAP hMap);
Изменено: |
|
|
|
17.05.2016 13:06:25
указываю только нужные параметры,
// Цилиндрическая Меркатора на шаре "World Mercator" EPSG:3395 mapGetParametersForEPSG(3395, @mapreg, @datum, @ellipsoid); mapreg.MapType := MT_MERCATOR; mapreg.MaterialProjection := MP_WORLDMERCATOR; -------------- Почему растр неправильный ? координаты смещены на огромное расстояние ? Я никак не могу этот растр наложить на Yandex карту
Изменено: |
|
|
|
17.05.2016 22:24:19
Еще вопрос.
----------------------------------------- есть такой код из пред переписки ----------------------------------------- double x_min = 100; // значения привязки условные ! double y_min = 100; double x_max = 200; double y_max = 200; DFRAME frame; frame.X1 = x_min; frame.Y1 = y_min; frame.X2 = x_max; frame.Y2 = y_max; // Конвертор Bmp -> Rsw if (LoadBmpToRstByPlace(0, 0, bmpName, rswName, 500, &frame) != 0) { // Открыть данные с автоматическим определением их типа HMAP hMap = mapOpenData(rswName, 0); if (hMap) { // Запросить номер растра в цепочке по имени файла int numberRsw = mapGetRstNumberByName(hMap, rswName); if (numberRsw != 0) { ------------------------------------ получаю рамку k:=mapGetRstFrameMeters(hMap_, frame, numberRsw); x1:=100 y1:=100; x2:=102.5 y2:=102.5; почему рамка изменилась ? |
|
|
|
17.05.2016 23:29:40
В функции LoadBmpToRstByPlace в качестве разрешения растра устанавливается значение по умолчанию - 20000 т./м, что соответствует 508 т./д.
Очевидно, что это значение не соответствует загружаемому изображению. Размер элемента (пикселя) растра рассчитывается по формуле: MeterInElement = Scale / Precision ; MeterInElement - размер элемента (пикселя) растра в метрах, Scale - масштаб, Precision - разрешения растра ( т./м). Для импорта растра предлагаю использовать функцию picexLoadBmpToRstAndCompress:
Точка привязки растра point: DOUBLEPOINT point; point.x = x_min; point.y = y_min; // height - высота изображения в элементах (пикселях) // width - ширина изображения в элементах (пикселях) // размер элемента (пикселя) растра в метрах по X и Y double meterInElementX = (x_max - x_min)/height; double meterInElementY, = (y_max - y_min)/width; // вызов функции picexLoadBmpToRstAndCompress(0, BmpName, RstName, &meterInElementX, &meterInElementY, &point, 0); |
|||
|
|
18.05.2016 12:20:10
Спасибо ! Работает...
|
||||
|
|
|||
© КБ Панорама, 1991-2024 Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности |