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

Oleg Belenkov (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Oleg Belenkov
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 409 След.
Отображения названия и поиск населенных пунктов в растровых картах
 
Если функция вернула нулевые значения габаритов в метрах, значит они нулевые.
Подбирать единицы измерения и пересчитывать не нужно.

Функция примерно такая:
[CODE] TMap * map = mapGetMap(hMap, hSite);
     frame.X1 = map->X1m();
     frame.Y1 = map->Y1m();
     frame.X2 = map->X2m();
     frame.Y2 = map->Y2m();

     if (map->NeedTranslate() != 0)
     {
       // Пересчитать габариты в рабочую проекцию
       ((TMapAccess*)hMap)->TranslateFrameFromMap(frame, map->GetTranslate());
     }

[/CODE]
Например, если карта создана программно в сеансе работы приложения, запись с отключением журнала транзакций (ускоренно),
отображения не было, вызова функций типа mapSaveSite не было, то габариты еще нулевые, хотя объекты уже записывались.
Или карта создана программно с ограничением территории рамкой, но координаты рамки не были установлены - они нулевые. И т.п.

Но, скорее всего, открыты совместно карты и растры с ошибочными или несовместимыми параметрами систем координат. Пример ошибочных параметров системы координат: имеем топокарту (UTM/Гаусса-Крюгера) с координатой Y  в 7-ой зоне (с 7 000 000), а в паспорте указана 1-я зона и осевой меридиан - 3 градуса или 0.
Пример несовместимых систем координат: первая фоновая топокарта карта в 7-ой зоне, а другая - в 15-ой. А система координат документа автоматически установлена по первой открытой карте.
Преобразования координат за границами 3-ех зон от зоны документа (на самом деле дальше, но это уже ошибка) будут давать линию меридиана по границе крайней допустимой зоны, а габариты соответственно будут нулевыми.
Если работа (речь только о топокартах!) ведется на территории в пределах 3-ех зон (ширина зоны условно около 500 км), но проявляются такие ошибки, то скорее всего в паспорте карты мусор.
Тогда нужно вбить правильные параметры и забыть про лишние пересчеты.
Проверьте каждый набор данных, открыв его совместно с любым геопорталом - не сидит, значит ошибка в данных. Подбор пересчетов не поможет.
Отображения названия и поиск населенных пунктов в растровых картах
 
Смысл текста не могу понять.
И задачу не понимаю.

Попробую угадать.
Есть некая карта на некоторую территорию И есть другие карты с объектами, которые могут быть на этой территории и за ее пределами.
Нужно отбирать только те объекты с других карт, которые расположены на фоне базовой карты.
Тогда можно запросить габариты фоновой карты в момент перед запуском операции поиска (зачем их хранить и в какой системе они будут получены - датчик случайных чисел).
И использовать эти габариты в качестве условия поиска в комбинации с другими параметрами отбора объектов.

[CODE] // Запросить габариты пользовательской карты в системе координат документа
 // hMap   - идентификатор открытой основной карты
 // hSite  - идентификатор открытой пользовательской карты
 // list   - номер листа для многолистовой карты или 0
 // dframe - координаты прямоугольной области района
 // place  - система координат (PP_PLANE, PP_GEO, PP_PICTURE)
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetSiteBorder(HMAP hMap, HSITE hSite, DFRAME *dframe, long int place);

 // Установить в контексте параметры поиска объектов по прямоугольной области
 // hselect - контекст поиска об'ектов
 // dframe  - габариты области поиска в метрах
 // distance - расстояние поиска в метрах (симметрично расширяет область dframe)
 // filter  - учитывать/не учитывать(1/0) фильтр объектов,
 //           параметры фильтра должны быть установлены заранее в контексте поиска
 // inside  - границы поиска объектов по области :
 //           1 - внутри области, 2 - целиком внутри области, 0 - по расстоянию
 // visible - с учетом/без учета (1/0) видимости объектов на карте
 // action   - порядок поиска объектов :
 //            0 - последовательный поиск по мере запроса объектов (может принудительно восприниматься как 1
 //                для ускорения поиска по большим картам),
 //            1 - предварительный многопоточный отбор всех объектов
 //            (главному окну приложения посылается WM_PROGRESSBARUN - maptype.h),
 //            ускоряет многократный запрос отобранных объектов, НО ПОСЛЕ ЭТОГО ПОИСК БУДЕТ ИДТИ ТОЛЬКО ПО КАРТЕ,
 //            НА КОТОРОЙ СОЗДАН HSELECT
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSelectSeekAreaFrame(HSELECT hselect, DFRAME *dframe, double distance = 0.0, long int filter = 0,
                                               long int inside = 1, long int visible = 0, long int action = 0);


[/CODE]
В этом случае координаты будут в текущей системе документа и всегда будут согласованы.
Ничего лишнего в коде не должно быть.
Заполнение сложных подписей из классификатора
 
Данная подпись реализована через векторный знак, который отображает значения 4-ех семантик.
В КЭУЗ дана картинка с комментариями по заполнению строк, но этим строкам не назначены свои стандартные коды семантик (характеристик).

Текст в начале знака, слева от разделительной линии, содержит Материал постройки - в семантике 5400 (Произвольная надпись). Например: "зем".
Текст сверху разделительной линии содержит значения Длина плотины в метрах - Ширина по верху - в семантике 11541 (Верхняя часть подписи). Например: "170 - 4"
Текст снизу разделительной линии содержит значение Высота плотины в метрах - в семантике 11542 (Нижняя часть подписи). Например: "3.5"
Текст в конце знака, справа от разделительной линии, содержит значение Длина водосливной части плотины в метрах - в семантике 15 (Длина части объекта). Например: 140.

Мы обновим классификатор и добавим новые семантики, чтобы не гадать о назначении строк.

Чтобы нанести такую подпись, нужно указать положение знака на карте (с любым текстом или без текста), затем заполнить соответствующие семантики.
НАНЕСЕНИЕ ЗАПОЛНЯЮЩИХ ЗНАКОВ НА ПОЛИГОНЫ, *
 
Да, будет бессрочным.
Масштабирование карты согласно выделенной зоне
 
[CODE]// -----------------------------------------------------------------
// Функция изменения масштаба по координатам фрагмента в метрах
// Возвращает: 0 - масштаб не изменился, 1 - масштаб изменился
// -----------------------------------------------------------------
int TMapWindow::ChangeScaleByFrame(DFRAME * dframe)
{
 // Габариты окна в пикселах
 RECT   rect = GetClientRect();

 double x1   = dframe->X1;
 double y1   = dframe->Y1;
 double x2   = dframe->X2;
 double y2   = dframe->Y2;

 DOUBLEPOINT center;
 center.X    = (x1 + x2)/2.0;
 center.Y    = (y1 + y2)/2.0;

 mapPlaneToPicture((HMAP)MapDoc, &x1, &y1);
 mapPlaneToPicture((HMAP)MapDoc, &x2, &y2);

 int dw = ROUND(x2 - x1);
 if (dw < 0)
   dw = -dw;
 else
   if (dw == 0)
     dw = 1;

 int dh = ROUND(y1 - y2);
 if (dh < 0)
   dh = -dh;
 else
   if (dh == 0)
     dh = 1;

 // Расчет коэффициента изменения масштаба
 double change  = (double)(rect.RT - rect.LT - 64) / (double)dw;
 double change2 = (double)(rect.DN - rect.UP - 64) / (double)dh;

 if (change > change2)
   change = change2;

 double scale = mapGetRealShowScale((HMAP)MapDoc);
 scale = scale/ change;

 // Установить курсор в центр окна
 SetProcess(IDP_SCALECENTRE, 1);

 // Установить масштаб для показа объекта в рамках окна
 int ret = SetMapScale(scale, 1);

 // Установить окно в центр габаритов объекта
 ViewPlanePoint(¢er);

 return ret;
}[/CODE]
Как получить из кода его номер из классификатора
 
[CODE] // Запросить внутренний код (порядковый номер) объекта
 // по внешнему коду, локализации  и порядковому номеру среди аналогичных
 // объектов(с 1)
 // hRsc - идентификатор классификатора карты
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetRscObjectCodeByNumber(HRSC hRsc, long int excode, long int local, long int number = 1);
[/CODE]
Импорт / Экспорт в S-57, Предложения и замечания, Продолжение Архивных тем
 
Хорошо бы конкретные примеры на почту с пожеланиями - что изменить.
Поочередно - по степени важности или частоте применения.
Формально сохранение контуров объектов не противоречит стандарту. Вряд ли это экономит объем данных.
Может это влияет на решение каких-то Ваших задач?
Это не обсуждение необходимости придерживаться общепринятых подходов, а поиск приоритетов.
Получение изображения объекта из классификатора
 
[CODE] colors_number = sitapi.mapGetSiteColorsCount(map_handle, map_handle)
  sitapi.mapGetSitePalette(tmp_map, tmp_map, colorref, colors_number)

map_handle, tmp_map ?[/CODE]
Проблема с отрисовкой векторного объекта на HDC
 
[QUOTE]Антон написал:
Добрый день, не получается нарисовать объекты из IMGLIBRARY ( примитив №250). Допустим, я хочу нарисовать объект LIGHTS_P, он состоит из одного примитива IMG_LONG ( Структура типа LONG ). Что значит значение Value в этой структуре? Из описания я не понял что значат структуры IMG_DOUBLE, IMG_LONG. И в некоторых объектах различаются отображения примитивов от изображений тех же самых объектов на карте.
 [/QUOTE]
Исходные тексты всех программируемых знаков приведены в sdk -
[URL=https://gisinfo.ru/download/?id=310]https://gisinfo.ru/download/?id=310[/URL]

sdk15.zip\imlapi\s57navy
[CODE]// Огни
int _fastcall Lights(const POLYDATA4D* pdata, const IMGDRAW* draw, const IMGCONTEXT* context, int test, FRAME* border);

// Параметры для построения огней
IMLPARM ImlLights =
{
 IMLIDENT, 1,
               1, 0, 0, 0,                // Передавать семантику
 {{ IMG_LONG, "Mark border", "Габариты знака в мкм на карте", 0, 0 },
 }
};[/CODE]
Получение изображения объекта из классификатора
 
Функции в библиотеке одинаковые для разных платформ.
Описание прототипов для python одинаковое для разных платформ.
Если какой-то функции нет в текущей версии rscapi.py или другом файле - их можно добавить в текстовом редакторе.

[URL=https://gisinfo.ru/download/?id=310]https://gisinfo.ru/download/?id=310[/URL]
- тут добавлена функция mapGetRscObjectParameters
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 409 След.



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

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