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

Почему не рисует квадрат на карте

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Почему не рисует квадрат на карте, Почему не рисует квадрат на карте
 
Var
center     : TDOUBLEPOINT;
vPlaceOut  : TPPLACE;
MapTopLeft1 : TDOUBLEPOINT;
QFrame1     : array[1..5] of TDOUBLEPOINT;
QData1      : TPLACEDATA;
PointCount1 : Integer;
begin
vPlaceOut := form_main.mvMap.ViewSelect.PlaceOut;
center.X := bd_Zones.QSanitCleaningCoordXMsk.AsFloat;
ShowMessage ('center.X  = '+FloatToStr(center.X)); // Здесь координата нормальная в метрах 482215,618306
center.Y := bd_Zones.QSanitCleaningCoordYMsk.AsFloat;
ShowMessage ('center.Y  = '+FloatToStr(center.Y));  // Здесь координата нормальная в метрах 2226838,735923
form_main.mvMap.SetCenter(center, vPlaceOut);

MapTopLeft1.X:=form_main.mvMap.MapLeft;
MapTopLeft1.Y:=form_main.mvMap.MapTop;

form_main.mvMap.ConvertMetric(MapTopLeft1.X, MapTopLeft1.Y, PP_PICTURE, PP_PLANE);

QFrame1[1].X := center.X+3;
QFrame1[1].Y := center.Y-3;
QFrame1[2].X := center.X+3;
QFrame1[2].Y := center.Y+3;
QFrame1[3].X := center.X-3;
QFrame1[3].Y := center.Y+3;
QFrame1[4].X := center.X-3;
QFrame1[4].Y := center.Y-3;
QFrame1[5].X := center.X+3;
QFrame1[5].Y := center.Y-3;
PointCount1 := 5;
QData1.Points      := @QFrame1[1];
QData1.PolyCounts  := @PointCount1;  // адрес количества точек
QData1.Count       := 1; // счетчик контуров

mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle,MapTopLeft1,Form,QData1,integer(PP_MAP));

Ожидаем нарисованный квадрат вокруг точки на карте.
В результате, нарисованный квадрат вокруг точки на карте не наблюдаем.
 
Цитата
// Отобразить произвольный объект в пределах фрагмента окна (карты)
// hmap   - идентификатор открытых данных
// hwnd  - идентификатор окна,
// point - координаты верхнего левого угла окна на карте
// в соответствующей параметру place системе координат
// image - описание вида объекта (см. MAPGDI.H),
// data  - координаты объекта.
// place - вид системы координат (в точках экрана - PP_PICTURE, в метрах в
//         системе координат документа - PP_PLANE, в радианах на эллипсоиде
//         документа - PP_GEO)
// Координаты объекта заданы в соответствии с параметром place

_MAPIMP long int _MAPAPI mapViewUserObject(HMAP hmap, HWND hwnd, DOUBLEPOINT *point, PAINTPARM *image, PLACEDATA *data, long int place);

1. Вы же сами пишете, что координаты center у Вас в метрах, а передаёте зачем-то place=PP_MAP.
2. point - это координаты верхнего левого угла окна на карте, а не угол карты.
3. Чему будет равен перечислимый тип Delphi, принудительно преобразованный к integer (integer(PP_MAP))? Используйте целочисленную константу cPP_PLANE.
 
Да, Денис работает, спасибо.
Подскажите, еще как увеличить в этом случаи толщину линии
и изменить цвет линии?
 
Цитата
Сергей Викторович написал:
Подскажите, еще как увеличить в этом случаи толщину линиии изменить цвет линии?

За отрисовку отвечает параметр PAINTPARM *image функции mapViewUserObject

Параметры отображения передаются в PAINTPARM.Parm и зависят от выбранной функции рисования PAINTPARM.Image.

Цитата

typedef struct PAINTPARM
{
 PAINTPARM() { Image = 0; Mode = R2_COPYPEN | IM_DONTSCALE; Parm = 0; }

 int Image;        // Вид функции отображения
 int Mode ;        // Условия отображения и масштабирования
                   //   R2_COPYPEN   - отображение цветом
                   //   R2_NOT       - отображение инверсией фона (цвет игнорируется)
                   //   IM_SCALE, IM_DONTSCALE, ... - признаки масштабируемости
                   //    (игнорируются при Image равном IMG_OBJECT)
                   // Пример использования: Mode = R2_NOT | IM_SCALE
 const char * Parm;// Параметры отображения для соответствующей функции
                   // Игнорируется при Image равном IMG_OBJECT (параметры
                   // и номер функции устанавливается из классификатора)
}
 PAINTPARM;

В качестве примера могу порекомендовать ознакомиться, как это выполняется в компоненте TMapSelectRect, где настраивается и цвет, и толщина отрисовки рамки:
Цитата

  FImageParm.Image := IMG_LINE;
  FImageParm.Mode  := R2_NOT;
  FImageParm.Parm  := @FImageObj;
  FImageObj.Color  := FColorRect;
  FImageObj.Thick  := MKMINPIX * FLineWidth;
  FImageObj.Dash   := 0;
  FImageObj.Blank  := 0;
 
Цитата
Денис Вицко написал:
За отрисовку отвечает параметр PAINTPARM *image функции mapViewUserObject
Все понятно.
Спасибо, Денис!
Страницы: 1
Читают тему (гостей: 1)



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

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