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

Сергей Викторович (Все сообщения пользователя)

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 77 След.
Перестала рисоваться линия на карте, mapViewUserObject
 
Да, теперь все хорошо.
Спасибо.
Изменено: Сергей Викторович - 26.04.2021 12:43:32
Перестала рисоваться линия на карте, mapViewUserObject
 
[QUOTE]Andrey Gheleznyakov написал:
В принципе и это сработает (первые байты одинаковые), но если объявляете Maptype.IMG_LINE, то для наглядности, лучше использовать струтуру TIMGLINE = packed record     // (128) ЛИНИЯ   Color : TColor;        // Цвет линии (COLORREF)   Thick : integer;       // Толщина линииend;[/QUOTE]
Начинает проясняться.
Т.е. правильно будет так:

Мы объявили BlackLine                 : TPAINTPARM;             // Вид контура фрагмента на экране

BlackLine.Image := Maptype.IMG_LINE;
BlackLine.Parm  := @ImageLine;
BlaclLine.Mode  := R2_COPYPEN;  // R2_XORPEN;

Заполняем ImageLine                 : Maptype.TIMGLINE;      // Описание пунктирной линии (контур фрагмента)

Color := $00F0F0F0; // black
Thick := 250;       // mkm

Объявляем  Data                           : TPLACEDATA;
Заполняем Data Значениями
Data.Points:=@points;
Data.PolyCounts:=@SelectPoints;
Data.Count:=1;

Этот массив
points[SelectPoint].X := xx;
points[SelectPoint].Y := yy;
заполняется по каждому клику мыши координатами в метрической системе PP_PLANE

с помощью компонента MapPoint1
координаты нормальные в метрах


SelectPoint номер точки вычисляется по клику мыши на карте
SelectPoints количество обработанных таким способом точек

По каждому клику мыши затем рисуется линия
MapTopLeft.X:=form_main.mvMap.MapLeft;
MapTopLeft.Y:=form_main.mvMap.MapTop;
form_main.mvMap.ConvertMetric(MapTopLeft.X, MapTopLeft.Y, PP_PICTURE, PP_PLANE);
mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle, MapTopLeft, BlueLine, Data, integer(PP_PLANE));

Есть ошибки в моем понимание этого процесса?
Изменено: Сергей Викторович - 23.04.2021 15:17:58
Перестала рисоваться линия на карте, mapViewUserObject
 
[QUOTE]Andrey Gheleznyakov написал:
Хотелось бы ответить на конкретные вопросы[/QUOTE]
Мы объявили BlackLine                 : TPAINTPARM;             // Вид контура фрагмента на экране

BlackLine.Image := Maptype.IMG_LINE;
BlackLine.Parm  := @Image;
BlaclLine.Mode  := R2_COPYPEN;  // R2_XORPEN;

Заполняем Image                      : Maptype.TIMGDOT;      // Описание пунктирной линии
Image.Color := $00F0F0F0; // black
Image.Thick := 250;       // mkm
Image.Dash  := 1250;      // stroke length
Image.Blank := 500;       // gap length

Это правильно?
Изменено: Сергей Викторович - 22.04.2021 19:54:48
Перестала рисоваться линия на карте, mapViewUserObject
 
Похоже я не понимаю, как эта функция работает.
Лучше понять по шагам.

Объявляем глобальные переменные
Var
BlueLine                     : TPAINTPARM;             // Вид контура фрагмента на экране
Image                         : Maptype.TIMGDOT;      // Описание пунктирной линии
ImageLine                 : Maptype.TIMGLINE;      // Описание пунктирной линии (контур фрагмента)
Data                           : TPLACEDATA;
SelectPoint                : integer; // Количество неограниченных точек
SelectPoints               : integer; // Количество всего выбранных точек
points                         : array [1..255] of TDOUBLEPOINT;
xx,yy                          : double;  // Глобальные координаты мыши

Первый шаг. Указываем чем рисовать линию на карте OnCreate на форме с картой.
begin
Data.Points:=@points;
Data.PolyCounts:=@SelectPoints;
Data.Count:=1;

BlueLine.Image := Maptype.IMG_LINE;
BlueLine.Parm  := @ImageLine;
BlueLine.Mode  := R2_COPYPEN;  // R2_XORPEN;

Image.Color := $00F0F0F0; // black
Image.Thick := 250;       // mkm
Image.Dash  := 1250;      // stroke length
Image.Blank := 500;       // gap length
end;

Второй шаг. Определяем координаты указателя мыши на карте
procedure Tform_main.MapPoint1ChangePoint(Sender: TObject);
var
dX, dY       : double;
begin
 if not mvMap.MapView
    then exit;

 if not MapPoint1.GetPoint(dX, dY)
    then exit;

 case MapPoint1.PlaceOut of
   PP_PLANE
       begin
        MapPoint1.GetPoint(xx, yy);
       end;
 end;
end;

Третий шаг. Считаем клики мыши по карте и рисуем линию пунктиром
procedure Tform_main.mvMapMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
SelectPoint := SelectPoint+1;
SelectPoints := SelectPoints+1;

points[SelectPoint].X := xx;
points[SelectPoint].Y := yy;

MapTopLeft.X:=form_main.mvMap.MapLeft;
MapTopLeft.Y:=form_main.mvMap.MapTop;
form_main.mvMap.ConvertMetric(MapTopLeft.X, MapTopLeft.Y, PP_PICTURE, PP_PLANE);
mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle, MapTopLeft, BlueLine, Data, integer(PP_PLANE));
end;

Результат:
кликаем мышью по карте,
линия не наносится.
Изменено: Сергей Викторович - 22.04.2021 10:01:55
Перестала рисоваться линия на карте, mapViewUserObject
 
[QUOTE]Денис Вицко написал:
координаты у Вас в пикселах, PP_MAP вообще использовать не стоит, передавайте либо в пикселах (но с правильным смещеением)[/QUOTE]
Это

//---------------------------------------------------------------------------
//  Нарисовать на карте многоугольник
// --------------------------------------------------------------
procedure PaintRect;
begin
MapTopLeft.X:=form_main.mvMap.MapLeft;
MapTopLeft.Y:=form_main.mvMap.MapTop;
form_main.mvMap.ConvertMetric(MapTopLeft.X, MapTopLeft.Y, PP_PICTURE, PP_PLANE);
mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle, MapTopLeft, BlueLine, Data, integer(PP_MAP));
end;

точно работало в GisToolKit12
Если сейчас по другому, то как правильно это написать?
Перестала рисоваться линия на карте, mapViewUserObject
 
[QUOTE]Денис Вицко написал:
не увидел параметров ImageLine[/QUOTE]

ImageLine                : Maptype.TIMGLINE;      // Описание пунктирной линии (контур фрагмента)

mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle, MapTopLeft, BlueLine, Data, integer(PP_MAP));

BlueLine указана procedure Tform_main.FormCreate(Sender: TObject);

BlueLine.Image := Maptype.IMG_LINE;
BlueLine.Parm  := @ImageLine;
BlueLine.Mode  := R2_COPYPEN;  // R2_XORPEN;

Или это нет?
Изменено: Сергей Викторович - 21.04.2021 16:26:15
Перестала рисоваться линия на карте, mapViewUserObject
 
Здравствуйте!

Установили GisToolKit13
перестала работать нанесение линии на карту.

Было так:

//---------------------------------------------------------------------------
//  Нарисовать на карте многоугольник
// --------------------------------------------------------------
procedure PaintRect;
begin
MapTopLeft.X:=form_main.mvMap.MapLeft;
MapTopLeft.Y:=form_main.mvMap.MapTop;
form_main.mvMap.ConvertMetric(MapTopLeft.X, MapTopLeft.Y, PP_PICTURE, PP_PLANE);
mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle, MapTopLeft, BlueLine, Data, integer(PP_MAP));
end;

procedure Tform_main.FormCreate(Sender: TObject);
begin
SelectPoints := 0; // Количество заданных точек

Image.Color := $00F0F0F0; // black
Image.Thick := 250;       // mkm
Image.Dash  := 1250;      // stroke length
Image.Blank := 500;       // gap length

// Для рисования пунктира
Form.Image := IMG_DOT;  // пунктир
Form.Parm  := @Image;
Form.Mode  := R2_NOT;  // R2_XORPEN;

Data.Points:=@points;
Data.PolyCounts:=@SelectPoints;
Data.Count:=1;

BlueLine.Image := Maptype.IMG_LINE;
BlueLine.Parm  := @ImageLine;
BlueLine.Mode  := R2_COPYPEN;  // R2_XORPEN;
end;

procedure Tform_main.mvMapMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
// Нарисовать многоугольник
If SquareMode = true then
begin

SelectPoint := SelectPoint+1;
SelectPoints := SelectPoints+1;

points[SelectPoint].X := xx;
points[SelectPoint].Y := yy;

PaintRect();
// mapAppendPointPlane(ObjectSquare, points[SelectPoint].X, points[SelectPoint].Y, 0);
form_main.sbStatus.Panels.Items[0].Text := ' ВЫБЕРИТЕ СЛЕДУЮЩУЮ ТОЧКУ';
end;

Теперь это не работает.
Просим подсказать почему?
Как установить карту в центр по координатам, Как установить карту в центр по координатам
 
Да, все отлично!
Как установить карту в центр по координатам, Как установить карту в центр по координатам
 
Карта в системе координат Топографическая UTM WGS84

procedure Tform_main.N49Click(Sender: TObject);
Var
aPoint : TDOUBLEPOINT;
vPlaceOut  : TPPLACE;
X_GPS, Y_GPS, H_GPS : double;
begin

MapPoint1.PlaceInp := PP_GEOWGS84;

X_GPS := 55.689374; // Координата взята из Яндекс карты
Y_GPS := 37.866351; // Координата взята из Яндекс карты

MapPoint1.Point.X := X_GPS;
MapPoint1.Point.Y := Y_GPS;

MapPoint1.PlaceOut := PP_PLANE;

X_GPS := MapPoint1.Point.X;
Y_GPS := MapPoint1.Point.Y;

// Ожидаем
// X_GPS = 6172091,078 эти координаты полностью устроили бы
// Y_GPS = 428732.457

ShowMessage ('X_GPS = '+FloatToStr(X_GPS)); // Показывает 6172554,806
ShowMessage ('Y_GPS = '+FloatToStr(Y_GPS)); // Показывает 428432,264

aPoint.X := X_GPS;
aPoint.Y := Y_GPS;
vPlaceOut := PP_PLANE;
form_main.mvMap.SetCenter(aPoint,vPlaceOut); // Сдвижка от координат до центра составляет около 1230 метров.
form_main.mvMap.Repaint;
end;

Не понятно, карта в какой системе координат должна быть:
1) Топографическая UTM WGS84
2) Цилиндрическая Меркатора EPSG:3395
?
Изменено: Сергей Викторович - 05.04.2021 13:50:56
Как установить карту в центр по координатам, Как установить карту в центр по координатам
 
[QUOTE]Andrey Gheleznyakov написал:
Преобразуйте Ваши геодезические координаты в метры - mapGeoWGS84ToPlane3D(MapView.MapHandle, aX, aY, aH).[/QUOTE]
procedure Tform_main.N49Click(Sender: TObject);
Var
aPoint : TDOUBLEPOINT;
vPlaceOut  : TPPLACE;
X_GPS, Y_GPS, H_GPS : double;
begin
X_GPS := 55.6894;
Y_GPS := 37.8807;
H_GPS := 169.6;
mapGeoWGS84ToPlane3D(form_main.mvMap.MapHandle, X_GPS, Y_GPS, H_GPS);
// X_GPS := 461422.53; Ожидается такая цифра
// Y_GPS := 2211335.70; Ожидается такая цифра

ShowMessage ('X_GPS = '+FloatToStr(X_GPS)); // Вернула такую цифру 79641265,776715
ShowMessage ('Y_GPS = '+FloatToStr(Y_GPS)); // Вернула такую цифру  17023011,0652

aPoint.X := X_GPS;
aPoint.Y := Y_GPS;
vPlaceOut := PP_PLANE;
form_main.mvMap.SetCenter(aPoint,vPlaceOut); // Не установила в центр
form_main.mvMap.Repaint;
end;
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 77 След.



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

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