Геоинформация(GIS и просто карты) в программах на Лазарус

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Геоинформация(GIS и просто карты) в программах на Лазару

Сообщение Alex2013 » 07.11.2025 05:33:40

"Типа заработало !" (Почему "типа" ? Потому что это только выделение области(хотя и по ральным координатам), а это самый минимум работы с областями)

Изображение


Код дополнительной кнопки "Convert to area" в диалоге просмотра списка точек TGPSListViewer

Код: Выделить всё
procedure TGPSListViewer.Convert_to_area_ButtonClick(Sender: TObject);
type
  TCoordRec = record
    Lon: Double;
    Lat: Double;
    Name: String;
  end;
var
  i, iChecked: Integer;
  item: TListItem;
  rPt: TRealPoint;
  CoordArr: array of TCoordRec;
  APoints: TRealPointArray;
  procedure AddGPSArea;
var
  area: TGPSArea;
  i: Integer;
   MapView: TMapView;
begin
  MapView:= FViewer;
  area := TGPSArea.Create;
  area.Name := Edit1.Text;
  area.FillColor := clRed;
  area.LineColor := clMaroon;
  area.Opacity := 0.5;
  for i := 0 to High(APoints) do
    area.Points.Add(TGPSPoint.CreateFrom(APoints[i]));
  MapView.GPSItems.Add(area, 201);
end;


begin
  // count checked items
  iChecked := 0;
  for i:=0 to ListView.Items.Count - 1 do begin
    if ListView.Items.Item[i].Checked then Inc(iChecked);
  end;

  if iChecked < 3 then begin
    ShowMessage('Please select more than 2 items.');
    exit;
  end;
SetLength(APoints,iChecked);
  iChecked := 0;
  for i:=0 to ListView.Items.Count - 1 do begin
    if ListView.Items.Item[i].Checked then begin
      item := ListView.Items[i];
      if TryStrToGps(item.SubItems[2], rPt.Lon)
       and TryStrToGps(item.SubItems[1], rPt.Lat) then
      begin
        APoints[iChecked].Lon := rPt.Lon;;
        APoints[iChecked].Lat := rPt.Lat;
        Inc(iChecked);
      end;
    end;
  end;
  AddGPSArea;
  SetLength(APoints,0);
end;

*ListView сдержит реальные координаты геотегов сданных кликом мыши с возможностью отметки нужных для создания области .

Добавлено спустя 35 минут 43 секунды:
Re: Геоинформация(GIS и просто карты) в программах на Лазарус


Sharfik писал(а):Никто ничего не должен.

Ну мне "долговых обязательств" LazMapViewer пока хватает даже с некоторым запасом. :wink:
(Там действительно очень гибкая система пересчета координат из одной сетки в другую)
Насчет Зд вроде как есть работа с топографией (мне сейчас не надо так что не разбирался) .
Зы
По поводу "утечки данных при использовании ИИ" сильно "продвинутые параноики" пользуются локальными моделями или хотя-бы самостоятельно развернутыми в "персональном облаке" с надежным шифрованием и сносом моделей после использования .
Зы Зы
LazMapViewer кроме OSM еще кучу сервисов поддерживает (включая google и yandex) и вообще все эти статические карты устарели . У реально продвинутых юзеров давно уже есть доступ к сервисам которые работают в реальном времени.
Последний раз редактировалось Alex2013 07.11.2025 14:27:22, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 3190
Зарегистрирован: 03.04.2013 11:59:44

Re: Геоинформация(GIS и просто карты) в программах на Лазару

Сообщение sts » 07.11.2025 10:53:03

Sharfik писал(а):Не надо раздувать проблему из ничего.

не раздувают а предупреждают.
незнание не освобождает от ответственности.
sts
энтузиаст
 
Сообщения: 501
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Геоинформация(GIS и просто карты) в программах на Лазару

Сообщение Alex2013 » 07.11.2025 11:31:20

sts писал(а):не раздувают а предупреждают.
незнание не освобождает от ответственности.

Тут есть тонкость "на параноика не нужен нож его и сказкой припугнешь" и дальше по тексту...
Так что нужен баланс между наивностью "летнего дитя " и "угрюмой паранойей Урфина Джуса". :wink:
Alex2013
долгожитель
 
Сообщения: 3190
Зарегистрирован: 03.04.2013 11:59:44

Re: Геоинформация(GIS и просто карты) в программах на Лазару

Сообщение Sharfik » 07.11.2025 12:31:09

Alex2013 писал(а):и вообще все эти стические карты устарели .

просто открытая бесплатная инфа. Я наискость посмотрел, и так понял что переключив снимки в другой режим и используя анализ графики как раз создается 3D рельеф.

Alex2013 писал(а): У реально продвинутых юзеров давно уже есть доступ к сервисам которые работают в реальном времени.

Я видел next qgis сервис. Тысяча рублей и скачиваешь что нужно. Мне пока OSM достаточно. Выгрузил себе сведения о линиях электропередач.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 831
Зарегистрирован: 20.07.2013 01:04:30

Re: Геоинформация(GIS и просто карты) в программах на Лазару

Сообщение Alex2013 » 07.11.2025 20:44:51

Добрался до механизма "Менеджера плагинов", там, в общем, есть всё, что мне нужно, и даже то, что я только планировал сделать (выбор нужных тегов прямо на карте,удаление выбранного, создание треков и областей, и их перемещение мышкой и т.д. ), но есть небольшая проблема, и она в том, что основную демку, которую я использую как основу «картографической части» проекта, начинает плющить из-за конфликта двух разных методов создания геотегов. Причем попытки убрать более примитивный «внутренний» ни к чему хорошему не привели. Можно отказаться от «основной демки» (есть более простая, специально заточенная на нужный мне плагин), но в «главной демке» есть много чего хорошего, что заработало сразу без «танцев с бубном».
Зы
Вообще разумеется лучше всего было-бы отказаться кода демок и просто использовать компоненты напрямую но придется описывать всю "обвязку самостоятельно " что слегка лениво ...

Добавлено спустя 1 час 56 минут 18 секунд:
Re: Геоинформация(GIS и просто карты) в программах на Лазарус
"Вы панике не поддавайтесь организовано спасайтесь... " Уф глюк победил ! "Паническая атака" отбита ! :D

Изображение
Правда пришлось сделать отдельный режим MarkerEditor и пока работает "очереди" или в нем или без него но не вместе но это уже ерунда (нужно сохранить точки и приключится в другой режим ).

Добавлено спустя 46 минут 4 секунды:
Re: Геоинформация(GIS и просто карты) в программах на Лазарус
Ну это немного "Обман зрения" (Сейчас можно "смешать режимы" но в списке точек будет путаница )
Изображение

Добавлено спустя 11 часов 57 минут 45 секунд:
Re: Геоинформация(GIS и просто карты) в программах на Лазарус
"Смешение" режимов немного поправил (добавил удаление "обычных точек" при конверсии в область ) чем полезно "смешение" тем что "обычные точки " имеют имя, а созданные, с помощью MarkerEditor-ра остаются безымянными.

Новая версия "Convert_to_area_ButtonClick" (для формы GPSListViewer ) + настройка цветов.

Код: Выделить всё
const
areaFillColor1 :integer = clRed;
areaLineColor1 :integer  = clMaroon;

procedure TGPSListViewer.Convert_to_area_ButtonClick(Sender: TObject);
type
  TCoordRec = record
    Lon: Double;
    Lat: Double;
    Name: String;
  end;
var
  i, iChecked: Integer;
  item: TListItem;
  rPt: TRealPoint;
  gpsObj: TGpsObj;
  CoordArr: array of TCoordRec;
  APoints: TRealPointArray;
  procedure AddGPSArea;
var
  area: TGPSArea;
  i: Integer;
   MapView: TMapView;
begin
  MapView:= FViewer;
  area := TGPSArea.Create;
  area.Name := Edit1.Text;
  area.FillColor :=  areaFillColor1;
  area.LineColor :=  areaLineColor1;
  area.Opacity := 0.5;
  for i := 0 to High(APoints) do
    area.Points.Add(TGPSPoint.CreateFrom(APoints[i]));
  MapView.GPSItems.Add(area, 201);
end;


begin
  // count checked items
  iChecked := 0;
  for i:=0 to ListView.Items.Count - 1 do begin
    if ListView.Items.Item[i].Checked then Inc(iChecked);
  end;

  if iChecked < 3 then begin
    ShowMessage('Please select more 2 items .');
    exit;
  end;
SetLength(APoints,iChecked);
  iChecked := 0;
  for i:=0 to ListView.Items.Count - 1 do begin
    if ListView.Items.Item[i].Checked then begin
      item := ListView.Items[i];
      if TryStrToGps(item.SubItems[2], rPt.Lon) and TryStrToGps(item.SubItems[1], rPt.Lat) then
      begin
        APoints[iChecked].Lon := rPt.Lon;;
        APoints[iChecked].Lat := rPt.Lat;

        Inc(iChecked);
      end;
    end;
  end;
// Удаление точек после конверсии  (теперь область можно редактировать и удалять в режиме MarkerEditor  )
  for i:= ListView.Items.Count - 1 downto 0  do begin
    if ListView.Items.Item[i].Checked then begin
      item := ListView.Items[i];
       if TryStrToGps(item.SubItems[2], rPt.Lon) and TryStrToGps(item.SubItems[1], rPt.Lat) then
      begin

        gpsObj := TGpsPoint.CreateFrom(rPt);
        gpsObj.Name := item.SubItems[0];
        FViewer.GPSItems.Add(gpsObj, _CLICKED_POINTS_);
       ListView.Items[i].Free;
       FViewer.GpsItems.Clear(_CLICKED_POINTS_);
      end
     end
    end;

  AddGPSArea;
  SetLength(APoints,0);
end;


procedure TGPSListViewer.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  with TColorDialog.Create(self) do begin
  if   Execute then
   Case Button Of
   mbLeft:begin
   Shape1.Brush.Color:=Color;
   areaFillColor1:=Color;
   end;
   mbRight:begin
     Shape1.Pen.Color:=Color;
        areaLineColor1:=Color;
   end
   end;
    free;
   end;
end;


Зы
Переход режим "Marker Editor" очень простой .
procedure TCfgFrame.CheckBoxMarkerEditorChange(Sender: TObject);
begin
MarkerEditor:=CheckBoxMarkerEditor.Checked;
PluginManagerMarkerEditorPlugin1.Enabled:= MarkerEditor;
end;
MarkerEditorPlugin добавляется PluginManager-е в "дизайн тайм" .
(+ нужно установить PluginManagerMarkerEditorPlugin1. Enabled :=False )

Панель управления "Marker Editor" почти полностью выдрана из примера
..\LazMapViewer\examples\plugin_demos\markereditor_demo
(Нет выбора типа точек но и без него все работает )

А флаг MarkerEditor блокирует стандартную реакцию на правую кнопку мыши .
Код: Выделить всё
procedure TMainForm.MapViewMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
...
begin
  if (Button = mbRight) and not CfgFrame.MarkerEditor  then begin
..
  end;
end;

Изображение
Зы Зы
Все это разумеется происходит в постепенно перестраиваемой под мой проект "mapviewer_demo"
..\LazMapViewer\examples\fulldemo\mapviewer_demo.lpr
Но то что срыто за "шторками" пока никак с картами не взаимодействует
( как нетрудно догадаться по соседей теме это будет мнемосхема и дополнительная панель настройки )
Alex2013
долгожитель
 
Сообщения: 3190
Зарегистрирован: 03.04.2013 11:59:44

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1